Thread overview
Feci bir programlama veya derleyici hatası!
Apr 22, 2012
Salih Dinçer
Apr 22, 2012
Salih Dinçer
Apr 22, 2012
Salih Dinçer
Apr 23, 2012
Salih Dinçer
Jan 17, 2019
Salih Dinçer
April 22, 2012
// Concurrent computation of pi.
// See http://goo.gl/ZuTZM.
//
// This demonstrates Go's ability to handle
// large numbers of concurrent processes.
// It is an unreasonable way to calculate pi.
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(pi(5000))
}

// pi launches n goroutines to compute an
// approximation of pi.
func pi(n int) float64 {
	ch := make(chan float64)
	for k := 0; k <= n; k++ {
		go term(ch, float64(k))
	}
	f := 0.0
	for k := 0; k <= n; k++ {
		f += <-ch
	}
	return f
}

func term(ch chan float64, k float64) {
	ch <- 4 * math.Pow(-1, k) / (2*k + 1)
}

Bu kodu dilin resmi sitesi (http://golang.org)nden aldım ve Fedora 16 x 64 bir sistemde go 1.0 ile derledim. Tabi sınırları görebilmek için döngü sayısına 3-4 sıfır daha ekliyoruz. Sonuç feci, sistemdeki 8 GB. hafızayı bir anda tüketti, yetmedi 6,6 GB.'da takas dosyasını şişirdi!

Sanırım aynı kodu D'de yapsaydık böyle bir şey olmayacaktı...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 22, 2012

Büyük biz zevkle...:)

Sanırım bahsettiğin algoritma Go ile hemen hemen aynı ve sadece writefln() ile ilgili şeyleri ekledim:

import std.algorithm, std.parallelism, std.range, std.stdio;

void main() {

// Parallel reduce can be combined with std.algorithm.map to interesting
// effect. The following example (thanks to Russel Winder) calculates
// pi by quadrature using std.algorithm.map and TaskPool.reduce.
// getTerm is evaluated in parallel as needed by TaskPool.reduce.
//
// Timings on an Athlon 64 X2 dual core machine:
//
// TaskPool.reduce: 12.170 s
// std.algorithm.reduce: 24.065 s

   immutable n = 1_000_000;
   immutable delta = 1.0 / n;

   real getTerm(int i) {
       immutable x = ( i - 0.5 ) * delta;
       return delta / ( 1.0 + x * x );
   }

   immutable pi = 4.0 * taskPool.reduce!"a + b"(
                  std.algorithm.map!getTerm(iota(n))
               );
   writefln("%.9f", pi);
}

Çıktısı:
'[salih@telyeweb GO]$ dmd -release pi
[salih@telyeweb GO]$ time ./pi
3.141594654

real 0m0.018s
user 0m0.053s
sys 0m0.002s
'

Sanırım sonucu vermeye gerek yok çünkü böyle bir ölümcül hata karşısında dmd'nin yaptığı sadece, mütevazı bir şekilde ve saniyeler için pi demek...:)

Başarılar...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 22, 2012

Tekrar denedim ve sistem kararsızlaştıp edata kilitlenme seviyesine ulaşmadı... :rolleyes:

Ancak gnome-system-monitor ile baktığımda 6.6 GB belleği hesaplama süresi içinde yediğini ve legal bir şekilde geri verdiğini gözlemledim! Bence yine ciddi bir hata ki işlem sonuçları şöyle:

Alıntı:

>

[salih@telyeweb GO]$ ls -al
toplam 876
'drwxrwxr-x. 2 salih salih 4096 Nis 23 08:36 .
drwx--x---+ 59 salih salih 4096 Nis 23 08:19 ..
-rw-rw-r--. 1 salih salih 77 Nis 22 22:21 hello.go
-rw-rw-r--. 1 salih salih 115 Nis 22 22:18 hello.go~
-rwxrwxr-x. 1 salih salih 640726 Nis 23 08:36 pi
-rw-rw-r--. 1 salih salih 759 Nis 23 08:36 pi.d
-rw-rw-r--. 1 salih salih 759 Nis 23 08:36 pi.d~
-rw-rw-r--. 1 salih salih 599 Nis 23 08:32 pi.go
-rw-rw-r--. 1 salih salih 599 Nis 22 22:55 pi.go~
-rw-r--r--. 1 salih salih 209200 Nis 23 08:36 pi.o
-rw-rw-r--. 1 salih salih 2676 Nis 22 22:32 solitaire.go'
[salih@telyeweb GO]$ go build pi.go
[salih@telyeweb GO]$ ls pi -al
'-rwxrwxr-x. 1 salih salih 1285910 Nis 23 08:47 pi'
[salih@telyeweb GO]$ time ./pi
3.1415946535856922

real 0m1.946s
user 0m0.968s
sys 0m0.861s

Neredeyse bir saniye sürüyor ve Go da GC kullanıyor. Ancak dosya boyutu D'ye göre iki kat fazla 1 disket (3½HD) boyutlarında...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 22, 2012

std.parallelism modülünün belgesinde kullanılan örnek de pi'yi hesaplar. Bir örnek Synopsis'te var bir tane de WorkerLocalStorageStorage'in altında:

http://dlang.org/phobos/std_parallelism.html

Dener misin, acaba D'de de sorun oluyor mu?

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 23, 2012

Estağfirullah, denenecek çok şey var da ne vakit ne de onları unutmayacak akıl var bende...:)

Bu arada sabah evden çıkmadan evvel bir şey daha denedim. Döngü sayısını 2 milyona çıkardım ve dolayısıyla süre iki kat arttı. İşte o zaman bir şeyler yine yolunda gitmemeye başladı; Go için söylüyorum...

Sanırım olay bellek kapasitesinin sınırına geldiğinde takasa yedeklemesi ve artık ne yapıyorsa takas dahil her şeyi deli gibi kullanmak istemesi. Bir yandan takastaki hafızaya geliyor, kullanıyor sonra yine takasa yükleniyor. Bu böyle gidiyor ve benim sistemi kararsızlaştırıyor. Mouse hareketi dahil hiç bir şey yapamıyorum...:(

İmkanı olan kendi sisteminde de deneyebilir mi? Çünkü bu belki Go'nun değil benim donanımın sorunudur...

İşin bir diğer ilginci saniye dolmadan GB'larca RAM alanını nasıl üstüne alıyor anlamadım! Buna benzer şeyleri (hafızayı gereksizce israf eden uygulamalar!) daha önce yapmıştım ve hafızanın dolması uzun bir vakit alıyordu. Neyse ki D'de sağlam bir GC var ve bu sorunlar olmuyor...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 23, 2012

Denemeler için teşekkürler.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 17, 2019

Bu denemeyi uzun bir aradan sonra Android smartfonlar için yazılmış Dcoder ile yaptım ve şu hatayı aldım:
Alıntı:

>

fatal error: runtime: out of memory

runtime stack:
runtime.throw(0x4b5a2f, 0x16)
/usr/lib/go-1.10/src/runtime/panic.go:616 +0x81
runtime.sysMap(0xc475ab0000, 0x100000, 0x100, 0x546d18)
/usr/lib/go-1.10/src/runtime/mem_linux.go:216 +0x20a
runtime.(*mheap).sysAlloc(0x52e7a0, 0x100000, 0x7fa338574ac8)
/usr/lib/go-1.10/src/runtime/malloc.go:470 +0xd4
runtime.(*mheap).grow(0x52e7a0, 0x4, 0x0)
/usr/lib/go-1.10/src/runtime/mheap.go:907 +0x60
runtime.(*mheap).allocSpanLocked(0x52e7a0, 0x4, 0x546d40, 0x7fa338574a30)
/usr/lib/go-1.10/src/runtime/mheap.go:820 +0x301
runtime.(*mheap).allocManual(0x52e7a0, 0x4, 0x546d40, 0x7fa338574a30)
/usr/lib/go-1.10/src/runtime/mheap.go:782 +0x53
runtime.stackpoolalloc(0x545e00, 0x180)
/usr/lib/go-1.10/src/runtime/stack.go:179 +0x79
runtime.stackcacherefill(0x7fa3393a1000, 0x100)
/usr/lib/go-1.10/src/runtime/stack.go:260 +0x44
runtime.stackalloc(0x800, 0x4b1ba0, 0x7ffcc4213b01)
/usr/lib/go-1.10/src/runtime/stack.go:362 +0x151
runtime.malg.func1()
/usr/lib/go-1.10/src/runtime/proc.go:3225 +0x31
runtime.malg(0xc400000800, 0x0)
/usr/lib/go-1.10/src/runtime/proc.go:3224 +0x86
runtime.newproc1(0x4b9ec8, 0xc420041ee8, 0x7fa300000010, 0x482f78)
/usr/lib/go-1.10/src/runtime/proc.go:3273 +0x42d
runtime.newproc.func1()
/usr/lib/go-1.10/src/runtime/proc.go:3244 +0x46
runtime.systemstack(0x0)
/usr/lib/go-1.10/src/runtime/asm_amd64.s:409 +0x79
runtime.mstart()
/usr/lib/go-1.10/src/runtime/proc.go:1175

goroutine 1 [running]:
runtime.systemstack_switch()
/usr/lib/go-1.10/src/runtime/asm_amd64.s:363 fp=0xc420041e98 sp=0xc420041e90 pc=0x44c190
runtime.newproc(0x10, 0x4b9ec8)
/usr/lib/go-1.10/src/runtime/proc.go:3243 +0x64 fp=0xc420041ed8 sp=0xc420041e98 pc=0x42f354
main.pi(0x4c4b40, 0x0)
source_file.go:23 +0x78 fp=0xc420041f30 sp=0xc420041ed8 pc=0x482f78
main.main()
source_file.go:15 +0x2e fp=0xc420041f88 sp=0xc420041f30 pc=0x482e7e
runtime.main()
/usr/lib/go-1.10/src/runtime/proc.go:198 +0x212 fp=0xc420041fe0 sp=0xc420041f88 pc=0x427992
runtime.goexit()
/usr/lib/go-1.10/src/runtime/asm_amd64.s:2361 +0x1 fp=0xc420041fe8 sp=0xc420041fe0 pc=0x44e621

goroutine 5 [chan send]:
main.term(0xc420060060, 0x0)
source_file.go:34 +0x81
created by main.pi
source_file.go:23 +0x78

...
Yazılımın isminden hemen heyecanlanmayın; bu bir D derleyicisi değil ve aldığım hata "goroutine 202’ye kadar devam ediyor. Zaten yazılımın 150 MB. sınırı var (yani normal) ve derleme bulutta (cloud computing) yapılıyor. Ben 500 bin dahil sorun yaşamadım ama sıfırlar artınca işler karışıyor!

Dip Not: Decoder, 30'u aşkın dili (HTML, CSS tasarım da yapılıyor) destekleyen ve telefonunuzun kaynaklarını çok akıllıca kullanan, sağlam topluluğu (user community) olan ve üreticisi Paprbit Technologies (https://paprbit.com)'e ait olan harika bir yazılımdır.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]