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
#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
#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ü
long sum = 0; for (int i = 0; i < ____; i++) sum++;
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 |