CodeBlanks Logo Icon CodeBlanks

Ö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

main.c
#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

main.c
#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

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