OpenMP aracılığıyla paralel hale getirmek için sıralı kodum var. İlgili pragmaları koyup test ediyorum. Test ederken ana fonksiyonda harcanan zamanı kontrol ederek performans kazancımı yorumluyorum. Garip olan şey, cpu_time()
üzerinden hesaplanan geçen süredir ve omp_get_wtime()
iki farklı sonuç döndürmektedir. Nedenin ne olduğunu düşünüyorsun?OpenMP zamanı ve saati() iki farklı sonucu hesaplar
cpu_time()
işlevi kullanılarak hesaplanan süre, ardışık süreye benzer.
hesaplama
ctime2_ = cpu_time();
#ifdef _OPENMP
ctime2 = omp_get_wtime();
#endif
cpu_time() işlev tanımı
double cpu_time(void)
{
double value;
value = (double) clock()/(double) CLOCKS_PER_SEC;
return value;
}
Baskı sonucu
printf("%f - %f seconds.\n", ctime2 - ctime1, ctime2_ - ctime1_);
sona erdikten sonra, hesaplama
ctime1_ = cpu_time();
#ifdef _OPENMP
ctime1 = omp_get_wtime();
#endif
başlamadan önce
Numune sonuç
7.009537 - 11.575277 seconds.
Windows'da 'clock()' aslında duvar süresini ölçer. – Mysticial
@Mysticial, yine, standart yerine kendi ruh halini takip ediyor gibi görünüyor. Standart şöyle diyor: * Saat işlevi, programın yalnızca programa girişiyle ilgili bir uygulama tanımlı dönemin başlangıcından beri program tarafından kullanılan işlemci süresine en iyi yaklaşımı verir. * –