CodeBlanks Logo Icon CodeBlanks

Profiling

  • C kursu
  • İleri seviye
  • Ders 73/83
  • 5 dk

profiling araçlarıyla performans ölçümünü öğrenirsin.

Profiling

Profiling, programın hangi işlevlerde ne kadar zaman harcadığını ölçer. gprof ve perf Linux'ta yaygın araçlardır; her işlev için çağrı sayısı ve süre verir.

Bu derste en temel profiling aracını kullanıyoruz: clock(). <time.h> başlığında tanımlıdır; işlemci saat tiklerini döndürür. clock_t start = clock(); ... clock_t end = clock(); ile bir bölgenin süresini ölçersin. CLOCKS_PER_SEC ile saniyeye çevirirsin. Bu derste çıktı deterministik olsun diye yalnızca döngü sonucunu yazdırıyoruz.

Süre ölçmek

Bir işlevin süresini ölçmek için öncesi ve sonrasında clock() çağırırsın. Fark, harcanan saat tiki kadardır; CLOCKS_PER_SEC'e bölünce saniye verir.

Örnek: clock_t start = clock(); long r = busy_work(1000000); clock_t end = clock();. Bu derste süre farkı yerine yalnızca döngü sonucunu yazdırıyoruz; böylece çıktı her makinede aynı kalır. busy_work bir sayaç artırır; derleyici bunu optimize edip atabilir. (void)start; (void)end; ile kullanılmayan uyarısını bastırırız.

Uygulama busy_work profille

long busy_work(int n) yaz: long sum = 0; for (int i = 0; i < n; i++) sum++; return sum;. main'de clock_t start = clock();, long r = busy_work(1000000);, clock_t end = clock();. (void)start; (void)end; ile uyarıyı bastır. printf("döngü: %ld\n", r); ve printf("profiling: hazır\n");.

Başlangıç kodu

main.c
#include <stdio.h>
#include <time.h>

// long busy_work(int n) yaz: n kez sayaç artır
// main: clock ile ölç, sonucu ve profiling iletisini yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <time.h>

long busy_work(int n) {
    long sum = 0;
    for (int i = 0; i < n; i++) sum++;
    return sum;
}

int main(void) {
    clock_t start = clock();
    long r = busy_work(1000000);
    clock_t end = clock();
    (void)start; (void)end;
    printf("döngü: %ld\n", r);
    printf("profiling: hazır\n");
    return 0;
}

Beklenen çıktı

döngü: 1000000
profiling: hazır

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 clock() hangi başlıkta tanımlıdır?

  • time.h Doğru cevap
  • stdio.h
  • stdlib.h
  • math.h

Açıklama: clock() <time.h> başlığındadır.

2 busy_work döngüsü

Soru
long sum = 0; for (int i = 0; i < ____; i++) sum++;
Cevap
long sum = 0; for (int i = 0; i < n; i++) sum++;

Açıklama: Döngü n kez döner ve sum'ı n yapar.

3 Profiling araçlarını eşle

Kavram Anlamı
clock Saat tiki
gprof Çağrı grafiği
perf Linux izleyici
CLOCKS_PER_SEC Saniye çevrimi

İleri seviye bölümündeki tüm dersler