Saya telah menemukan bahwa jam biasa (), semua orang merekomendasikan di sini, untuk beberapa alasan menyimpang dari menjalankan untuk menjalankan, bahkan untuk kode statis tanpa efek samping, seperti menggambar ke layar atau membaca file. Bisa jadi karena CPU mengubah mode konsumsi daya, OS memberikan prioritas yang berbeda, dll ...
Jadi satu-satunya cara untuk secara andal mendapatkan hasil yang sama setiap kali dengan clock () adalah dengan menjalankan kode terukur dalam satu loop beberapa kali (selama beberapa menit), mengambil tindakan pencegahan untuk mencegah kompiler mengoptimalkannya: kompiler modern dapat melakukan precode kode tanpa efek samping berjalan dalam satu lingkaran, dan memindahkannya keluar dari loop., seperti menggunakan input acak untuk setiap iterasi.
Setelah cukup sampel dikumpulkan ke dalam array, satu macam array itu, dan mengambil elemen tengah, yang disebut median. Median lebih baik daripada rata-rata, karena itu membuang penyimpangan ekstrim, seperti mengatakan antivirus mengambil semua CPU atau OS melakukan beberapa pembaruan.
Berikut ini adalah utilitas sederhana untuk mengukur kinerja eksekusi kode C / C ++, rata-rata nilai dekat median: https://github.com/saniv/gauge
Saya sendiri masih mencari cara yang lebih kuat dan lebih cepat untuk mengukur kode. Seseorang mungkin dapat mencoba menjalankan kode dalam kondisi terkendali pada bare metal tanpa OS apa pun, tetapi itu akan memberikan hasil yang tidak realistis, karena pada kenyataannya OS memang terlibat.
x86 memiliki penghitung kinerja perangkat keras ini, yang termasuk jumlah instruksi aktual yang dijalankan, tetapi mereka sulit diakses tanpa bantuan OS, sulit ditafsirkan dan memiliki masalah sendiri ( http://archive.gamedev.net/archive/reference/articles /article213.html ). Tetap mereka bisa membantu menyelidiki sifat leher botol (akses data atau perhitungan aktual pada data itu).