Özet - Performans
- C kursu
- İleri seviye
- Ders 78/83
- 5 dk
Profiling, cache ve döngü optimizasyonunu birleştirerek bir kopyalama fonksiyonu yazarsın.
Özet - Performans
Bu grupta profiling, cache etkisi, döngü optimizasyonu, inline ve bellek hizalamayı öğrendin. Şimdi bunları birleştirerek hizalı ve açmalı bir kopyalama işlevi yazacaksın.
copy_block işlevi 4'lü açmayla int dizisini kopyalar; her yinelemede 4 eleman kopyalar. {1,2,3,4} dizisini hedefe kopyalar ve hedefi yazdırır. Tüm çıktı deterministiktir: kopya 1 2 3 4.
Uygulama copy_block işlevi
void copy_block(const int *src, int *dst, int n) yaz: int i;, 4'lü açma for (i = 0; i + 3 < n; i += 4) { dst[i] = src[i]; dst[i+1] = src[i+1]; dst[i+2] = src[i+2]; dst[i+3] = src[i+3]; }, kalan for (; i < n; i++) dst[i] = src[i];. main'de int src[] = {1,2,3,4};, int dst[4] = {0};, copy_block(src, dst, 4); ve printf("kopya: %d %d %d %d\n", dst[0], dst[1], dst[2], dst[3]);.
Başlangıç kodu
#include <stdio.h>
// copy_block yaz: 4'lü açma + kalan döngü
// main: 4 elemanlı src dizisini dst'ye kopyala ve yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
void copy_block(const int *src, int *dst, int n) {
int i;
for (i = 0; i + 3 < n; i += 4) {
dst[i] = src[i];
dst[i+1] = src[i+1];
dst[i+2] = src[i+2];
dst[i+3] = src[i+3];
}
for (; i < n; i++) dst[i] = src[i];
}
int main(void) {
int src[] = {1,2,3,4};
int dst[4] = {0};
copy_block(src, dst, 4);
printf("kopya: %d %d %d %d\n", dst[0], dst[1], dst[2], dst[3]);
return 0;
}Beklenen çıktı
kopya: 1 2 3 4
Sonraki adımlar
Performans temellerini öğrendin: profiling, cache, döngü açma, inline ve hizalama. Bunlar sistem programlamanın temel araçlarıdır.
İleri adımlar: perf stat ile CPU sayaçları, SIMD vektör komutlarıyla aynı anda 8 veya 16 eleman, __builtin_expect ile dallanma tahmini ve numa ile çoklu düğüm bellek yönetimi. Öğrendiğin desenler bu ileri tekniklerin temelidir.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 copy_block hangi teknikle hızlanır?
- Sütun major
- 4'lü açma Doğru cevap
- Yavaş döngü
- Rastgele erişim
Açıklama: 4'lü açma her yinelemede 4 eleman kopyalar; yükü azaltır.
2 Performans araçlarını eşle
| Kavram | Anlamı |
|---|---|
clock |
Süre ölçer |
satır major |
Cache dostu |
unroll |
Döngü yükü düşer |
_Alignof |
Hizalama verir |