CodeBlanks Logo Icon CodeBlanks

Özet - Performans

profiling, cache ve move semantiğini birleştirerek optimize edilmiş bir kopyalama fonksiyonu yazarsın.

Özet - Performans

Bu grupta performans araçlarını gördün: profiling, cache, vectorization, inline ve move. Hepsi programın hızını artırır; ama yalnızca ölçümle doğru kullanılır.

Şimdi bunları bir inline + vektörize döngü örneğinde birleştireceksin. inline int doubled(int x) ile cache dostu bir döngüyü birleştireceksin; bu, performans araçlarının nasıl birlikte çalıştığını gösterir.

Inline + vektörize döngü

Bir inline fonksiyonu döngü içinde çağırmak, derleyicinin hem inline hem vektörizasyon yapmasına olanak tanır. Örnek: inline int doubled(int x) { return x * 2; } fonksiyonunu bir döngüde çağırırsan, derleyici gövdeyi döngüye yayar ve SIMD ile işler.

Örnek: int a[3] = {1, 2, 3}; int s = 0; for (int i = 0; i < 3; ++i) s += a[i]; std::cout << s + doubled(5);. Burada s=6, doubled(5)=10, toplam 16. Bu küçük örnek, inline ve döngünün nasıl birleştiğini gösterir.

Uygulama Inline + döngü birleştir

inline int doubled(int x) yaz; gövdesi return x * 2;. main içinde int a[3] = {1, 2, 3};, int s = 0; tanımla; for (int i = 0; i < 3; ++i) s += a[i]; yaz; sonra std::cout << s + doubled(5); yaz.

Başlangıç kodu

main.cpp
#include <iostream>

// inline doubled fonksiyonunu buraya tanımla

int main() {
    // a dizisini topla, doubled(5) ile birleştir ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

inline int doubled(int x) {
    return x * 2;
}

int main() {
    int a[3] = {1, 2, 3};
    int s = 0;
    for (int i = 0; i < 3; ++i) s += a[i];
    std::cout << s + doubled(5);
    return 0;
}

Beklenen çıktı

16

Soru ve cevaplar

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

1 Hangi erişim düzeni cache dostudur?

main.cpp
for (int i = 0; i < n; ++i) sum += data[i];
  • Rasgele indislerle erişim
  • Sıralı indislerle erişim Doğru cevap
  • Yalnızca çift indislerle erişim
  • Büyük adımlarla erişim

Açıklama: Sıralı erişim spatial locality sağlar.

2 inline fonksiyonu tamamla

Soru
inline int doubled(int x) { return x * ____; }
Cevap
inline int doubled(int x) { return x * 2; }

Açıklama: x * 2 değerin iki katını verir.

3 Aracı özelliğine eşle

Kavram Anlamı
profiling Darboğaz ölçümü
cache Yerellik ile hız
vectorization SIMD paralelliği
move Kaynak devretme

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