Profiling
- C++ kursu
- Uzman
- Ders 25/47
- 5 dk
profiling araçlarıyla performans ölçümünü öğrenirsin.
Profiling
Profiling, programın zamanını nerede harcadığını ölçmektir. Tahminle değil veriyle ilerlemek için profil çıkar; çoğu zaman beklenmedik bir fonksiyon darboğazdır.
C++'ta zaman ölçmek için std::chrono::steady_clock kullanılır: auto t0 = std::chrono::steady_clock::now(); ile başlangıç, auto t1 = std::chrono::steady_clock::now(); ile bitiş alınır. İki zaman arasındaki fark t1 - t0 ile elde edilir. Linux'ta perf, GCC ile gprof, Valgrind ile callgrind kullanılır.
std::chrono ile ölçüm
std::chrono::steady_clock monoton bir saattır; geriye gitmez. now() çağrısı bir zaman noktası döndürür; iki noktanın farkı bir süre (duration) verir.
Süreyi mikrosaniyeye çevirmek için: auto us = std::chrono::duration_cast<std::chrono::microseconds>(t1 - t0).count();. Burada .count() sayıyı çeker. Bu deyim, bir fonksiyonun ortalama süresini ölçmek için çoklayıcı (benchmark) döngülerinin içine yerleştirilir.
Uygulama Zaman noktası ölç
#include <chrono> ekle. main içinde auto t0 = std::chrono::steady_clock::now(); ve auto t1 = std::chrono::steady_clock::now(); yaz. Sonra std::cout << (t1 >= t0); yaz.
Başlangıç kodu
#include <iostream>
#include <chrono>
int main() {
// t0 ve t1'i ölç, karşılaştır ve yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <chrono>
int main() {
auto t0 = std::chrono::steady_clock::now();
auto t1 = std::chrono::steady_clock::now();
std::cout << (t1 >= t0);
return 0;
}Beklenen çıktı
1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Profiling neyi ölçer?
auto t0 = std::chrono::steady_clock::now();
// ... islem ...
auto t1 = std::chrono::steady_clock::now();- Zamanın nerede harcandığını Doğru cevap
- Derleme süresini
- Sembol sayısını
- Bellek boyutu
Açıklama: Profiling, darboğazı veriyle gösterir.
2 now() çağrısını tamamla
auto t0 = std::chrono::steady_clock::____();
auto t0 = std::chrono::steady_clock::now();
Açıklama: now() geçerli zaman noktasını döndürür.
3 Aracı rolüne eşle
| Kavram | Anlamı |
|---|---|
perf |
Linux profilci |
gprof |
GCC profilci |
callgrind |
Valgrind profilci |
std::chrono |
Süre ölçümü |