Bagaimana saya sebut clock()
di C++
?
Sebagai contoh, saya ingin menguji berapa banyak waktu yang dibutuhkan untuk pencarian linear untuk menemukan elemen yang diberikan dalam array.
c++
benchmarking
clock
dato datuashvili
sumber
sumber
perf stat -d ./a.out
Jawaban:
sumber
clock()
danclock_t
berasal dari tajuk C Standard Librarytime.h
, dan karenanya tidak perlu menggunakanstd
awalan namespace setelah dimasukkannya pustaka mereka.<ctime>
membungkus nilai dan fungsi itu denganstd
namespace, tetapi itu tidak diharuskan untuk digunakan. Periksa di sini untuk detail implementasi: en.cppreference.com/w/cpp/header/ctimeSolusi alternatif, yang portabel dan dengan presisi lebih tinggi, tersedia sejak C ++ 11, adalah untuk digunakan
std::chrono
.Berikut ini sebuah contoh:
Menjalankan ini di ideone.com memberi saya:
sumber
using Clock=std::chrono::high_resolution_clock;
. Lihat jenis alias .std::chrono::high_resolution_clock
bukan monoton di semua implementasi STD lib. Dari cppreference - Umumnya kita hanya perlu menggunakan std :: chrono :: stable_clock atau std :: chrono :: system_clock secara langsung alih-alih std :: chrono :: high_resolution_clock: gunakan stable_clock untuk pengukuran durasi, dan system_clock untuk waktu jam dinding.clock()
mengembalikan jumlah tick tick sejak program Anda dimulai. Ada konstanta terkaitCLOCKS_PER_SEC
,, yang memberi tahu Anda berapa banyak kutu jam terjadi dalam satu detik. Dengan demikian, Anda dapat menguji operasi apa pun seperti ini:sumber
timeInSeconds
selalu datang0.000000
untukku. Bagaimana saya memperbaikinya?long double
untuk mendapatkan lebih presisi.Pada Windows setidaknya, satu - satunya mekanisme pengukuran yang praktis akurat adalah QueryPerformanceCounter (QPC). std :: chrono diimplementasikan menggunakannya (sejak VS2015, jika Anda menggunakannya), tetapi tidak akurat pada tingkat yang sama dengan menggunakan QueryPerformanceCounter secara langsung. Secara khusus klaim untuk melaporkan granularity 1 nanosecond sama sekali tidak benar. Jadi, jika Anda mengukur sesuatu yang membutuhkan waktu yang sangat singkat (dan kasing Anda mungkin merupakan kasing), maka Anda harus menggunakan QPC, atau yang setara untuk OS Anda. Saya menemukan ini saat mengukur latensi cache, dan saya mencatat beberapa catatan yang mungkin berguna bagi Anda, di sini; https://github.com/jarlostensen/notesandcomments/blob/master/stdchronovsqcp.md
sumber
sumber
Mungkin Anda mungkin tertarik pada timer seperti ini: H: M: S. Msec.
kode dalam OS Linux:
sumber
usleep
tidak akan selalu kembali setelah persis jumlah yang Anda minta. Terkadang akan lebih lama. Anda harus memeriksa waktu saat ini di awal, kemudian memeriksa waktu saat ini dan kurangi untuk mendapatkan waktu absolut sejak Anda mulai setiap kali melalui loop.Anda dapat mengukur berapa lama program Anda bekerja. Fungsi-fungsi berikut membantu mengukur waktu CPU sejak awal program:
referensi saya : Algoritma toolbox minggu 1 kursus bagian dari struktur data dan algoritma spesialisasi oleh University of California San Diego & National Research University Higher School of Economics
sehingga Anda dapat menambahkan baris kode ini setelah algoritme Anda
Output yang Diharapkan: output yang mewakili jumlah
clock ticks per second
sumber