Özet - Performans
- C++ kursu
- Uzman
- Ders 30/47
- 5 dk
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
#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
#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?
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
inline int doubled(int x) { return x * ____; }
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 |