C++’ta performans: ölçmek ve hızlandırmak
Doğru ölçüm ve profil çıkarmayla darboğazı bulur, veri düzeni, bellek ayırma ve derleyici iyileştirmeleriyle C++ kodunu kanıtlı biçimde hızlandırırsın.
Seviye 501 · 16 ders · 15 pratik lab
Dersler
Ölçmek
- Doğru ölçmek: Google Benchmark ve gürültü
- perf ile profil çıkarmak
- Alev grafikleriyle sıcak noktaları görmek
- Kısa görev: yavaş aracın sıcak noktasını bul
Bellek ve önbellek
- Önbellek yerelliği: veri düzeni önemlidir
- Yapı dizisi ile dizi yapısı
- Bellek ayırmanın maliyeti ve reserve
- pmr ile özel bellek kaynakları
- Küçük dizgi ve küçük nesne iyileştirmesi
- Kısa görev: veri düzenini değiştirerek hızlandır
Derleyici ve işlemci
- Satır içi açma, LTO ve PGO
- Dal tahmini ve dalsız kod
- Vektörleştirme ve SIMD
- Derleme süresi ve ikili dosya boyutu
- Kısa görev: döngüyü vektörleştirilebilir yap
Bitirme
- Bitirme görevi: günlük dizinleyiciyi ölçerek beş kat hızlandır
Pratik lablar
- Ölçümde elenen kodu korumak: Derleyicinin sildiği için sıfır süre gösteren ölçümü DoNotOptimize ile düzelt ve iki işlevi adil karşılaştır.
- Sıcak işlevi perf ile bulmak: Yavaş çalışan metin eşleştiricide perf kaydı alıp sürenin çoğunu harcayan işlevi bul ve bulgunu rapor çıktısıyla belgele.
- Alev grafiğinden darboğazı bulup gidermek: Karaçam Mobilya'nın sipariş birleştirme aracının alev grafiğini üret, en geniş çerçevedeki gereksiz işi kaldır ve en az üç kat hızlanmayı ölçümle göster.
- Matrisi önbellek dostu sırayla gezmek: Sütun sütun gezen toplama döngüsünü satır sırasına çevir ve iki sürümün süresini ölçerek farkı raporla.
- Yapı dizisini dizi yapısına çevirmek: Yalnızca iki alanı okuyan sıcak döngü için veri düzenini dizi yapısına çevir; sonuçlar aynı kalmalı ve hızlanma ölçülmeli.
- İşaretçi kovalayan yapıyı düz dizine taşımak: Düğümleri dağınık bağlı listeyle tutan arama yapısını sıralı düz vektöre taşı; önbellek ıskalarını say ve beş kat hız hedefini tuttur.
- Yeniden ayırmaları reserve ile önlemek: Boyutu baştan bilinen vektörde reserve kullanarak yeniden ayırma sayısını sıfıra indir ve ayırma sayacı testini geç.
- Kısa dizgi iyileştirmesinden yararlanmak: Uzun önekli anahtarlar yüzünden her aramada ayırma yapan kodu kısa anahtarlara ve string_view aramasına çevirip ayırma sayısını ölç.
- İstek başına ayırmaları pmr arenasına taşımak: Her istekte binlerce küçük ayırma yapan ayrıştırıcıyı monotonic_buffer_resource kullanan pmr kaplarına taşı; ayırma sayısı ve süre hedeflerini tuttur.
- İyileştirme düzeylerini karşılaştırmak: Aynı programı farklı iyileştirme düzeyleriyle derleyip süre ve ikili boyut tablosunu üreten betiği yaz.
- Birimler arası satır içi yerleştirmeyi açmak: Ayrı kaynak dosyasındaki küçük işlevin sıcak döngüde çağrı maliyetini bağlama zamanı iyileştirmesiyle kaldır ve derleyici çıktısından doğrula.
- Profil yönlendirmeli derleme hattı kurmak: Temsilî iş yüküyle profil toplayıp ikinci derlemede kullanan betiği yaz; kazancı ölç ve derleme süresi ile ikili boyut bedelini raporla.
- Dal tahmininin etkisini ölçmek: Aynı koşullu toplamı sıralı ve karışık veride ölç ve farkı açıklayan kısa raporu üreten programı yaz.
- Koşullu sayımı dalsız yazmak: Tahmin edilemeyen dallar yüzünden yavaşlayan eşik sayma döngüsünü dalsız aritmetiğe çevir ve sonuçların aynı olduğunu rastgele testlerle göster.
- Döngüyü vektörleştirilebilir hale getirmek: Derleyicinin vektörleştirme raporundan döngüyü engelleyen örtüşme ve bağımlılık nedenlerini bul, gider ve vektörleşmenin gerçekleştiğini çıktıdan doğrula.
Kurs hakkında
Doğru ölçüm ve profil çıkarmayla darboğazı bulur, veri düzeni, bellek ayırma ve derleyici iyileştirmeleriyle C++ kodunu kanıtlı biçimde hızlandırırsın.
Ne öğreneceksin
- Ölçmek
- Bellek ve önbellek
- Derleyici ve işlemci
- Bitirme
Ön koşullar
Aynı yolun 401 düzeyine kadar olan konularında deneyimli olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 501 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.