From: Rüºtü Derici (rustuderici@gmail.com)
Date: Mon 16 Apr 2007 - 22:46:11 EEST
Merhabalar..
struct timeval kullanarak
bir for loop un süresini microsecondlar cinsinden hesaplatmaya çalışıyorum.
Sorun şu ki aynı kodu defalarca çalıştırdım.Beklenen, olması gereken
(diff1 +diff2*1000000) değerinin belli bir zaman aralığında seyretmesi iken
bazen çok büyük beklemeler yapabiliyor..Bu tabii ki cpudaki
sıkışmalarda olablir.
Ama benim hesaplamada atladığım bir noktamı var?.Ayrica timeval
değişkenlerini bir pointer ile fonksyon içine yazdığımda bir türlü ne
kıyaslama ne işlem yaptırtamadım.
diff1 tekbaşına microsecond olarak sağlıklı bir standartta output vermiyor...
hane sayısı sürekli değişiyor ve sanki bitiş değeri başlangıç
değerinden küçükmüş gibi sonuçlar alabiliyorum.
Kodu aşağıda gönderiyorum...mili ve mikro saniye cinsinden çok kısa
süreli işlemlerde sağlıklı bir benchmark yazmak için ne yapmak
lazım...
Saygılar ,
Rüştü
Kod yaklaşık şöyle :
struct timeval start_time;
struct timeval end_time;
suseconds_t diff1;
time_t diff2;
for (j=0;j<1000;j++) //this loop is to take an arithmetic mean of time
{
gettimeofday(&start_time,NULL);
for (i=0;i<N;i+=4)
res+=A[i+3]*B[i+3]+A[i+2]*B[i+2]+A[i+1]*B[i+1]+A[i]*B[i];
gettimeofday(&end_time,NULL);
diff1=end_time.tv_usec- start_time.tv_usec;
diff2=end_time.tv_sec- start_time.tv_sec;
diff1+=(diff2*1000000);
diff+=(double)diff1;
cout << diff1<< endl;
}
cout << diff/1000<<endl; //arithmetic mean of time
_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama