C++ Kod Bloğu İçerisinde Geçen Zaman ?
-
Merhabalar yazdığım bir programda belirli kod blokları içerinde geçen zamanı hesaplamam gerekiyor. Blok girişine ve blok çıkışına birer tane clock() fonksiyonunu içeren değişken koydum ve sondaki değişkenden baştakini çıkarınca sonuca ulaşıyorum. Ancak olay çok hızlı gerçekleştiği için genelde 0 değerini alıyorum. http://www.cplusplus.com/reference/ctime/clock/ burayı inceleyip fark/CLOCKS_PER_SEC yapmama rağmen yine sıfır değeri geliyor bu sanırım milisaniye cinsinden hesaplıyor o yüzden.
Forumlardan birinde 12ms altındaki değerleri ölçülemediğini okudum ne kadar doğru bilmiyorum. Bloklar arasında zaman sıralaması yapabilmem için hepsinin bir zaman değeri olması gerekiyor toplam 4 blok olduğunu düşünürsek genelde ilk 2 si aynı değerleri son 2 si de sıfır değerini dönderiyor. Bu durumun düzelmesi için nanosaniye ile karşılaştırma yapmam gerekiyor sanırım. Başka herhangi bir fikri olan var mı ? Kod bloklarının içerisine herhangi bir bekleme yada sleep komutu koyamıyorum malesef.
-
Bloğu bir döngü içine al 1000 defa döndür çıkan sonucu 1000'e böl. Ya da bölme :) Gerçek değerin onun 1000'de biri olduğunu bil :)
-
https://msdn.microsoft.com/en-us/library/windows/desktop/dn553408%28v=vs.85%29.aspx
Belki işine yarar.http://stackoverflow.com/questions/14337278/precise-time-measurement
Bu da mesele ile ilgili yorumlar.
niRvana_GG tarafından 01/May/15 02:14 tarihinde düzenlenmiştir -
verilen linklerdeki c++11 kodu en güzel olanı sanırım;
auto begin = std::chrono::high_resolution_clock::now();
// code to benchmark
auto end = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::nanoseconds>(end-begin).count() << "ns" << std::endl; -
DrKill bunu yazdı
verilen linklerdeki c++11 kodu en güzel olanı sanırım;
auto begin = std::chrono::high_resolution_clock::now();
// code to benchmark
auto end = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast(end-begin).count() << "ns" << std::endl;hocam baktımda kullanamadım sanırım kütüphane ile ilgil ibir sıkıntı var.
edit : farklı bir yol buldum blokların hepsi aynı input u alacağından dolayı bende elimdeki input un boyutunu 100 kat civarında arttırınca hangi bloğun daha kısa sürede işlemi tamamladığını buldum :D nanosaniye olayınada gerek kalmadı böylece.
Altair tarafından 01/May/15 03:22 tarihinde düzenlenmiştir -
Bu işler için profiler kullanmayı deneseniz çok daha iyi olur. O kadar compiler direktifine ihtiyacınız da kalmaz, performans ölçümü için yazdığınız kod bölümlerini product'e çevirirken silmenize de...
-
Altair bunu yazdıDrKill bunu yazdı
verilen linklerdeki c++11 kodu en güzel olanı sanırım;
auto begin = std::chrono::high_resolution_clock::now();
// code to benchmark
auto end = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast(end-begin).count() << "ns" << std::endl;hocam baktımda kullanamadım sanırım kütüphane ile ilgil ibir sıkıntı var.
edit : farklı bir yol buldum blokların hepsi aynı input u alacağından dolayı bende elimdeki input un boyutunu 100 kat civarında arttırınca hangi bloğun daha kısa sürede işlemi tamamladığını buldum :D nanosaniye olayınada gerek kalmadı böylece.
2. Mesajda tavsiye edilen şey de buydu zaten hocam :)