CodeBlanks Logo Icon CodeBlanks

Profiling

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

main.cpp
#include <iostream>
#include <chrono>

int main() {
    // t0 ve t1'i ölç, karşılaştır ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#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?

main.cpp
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

Soru
auto t0 = std::chrono::steady_clock::____();
Cevap
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ü

Uzman bölümündeki tüm dersler