Eğitim İçeriği
GPU ile Hızlandırılmış Hesaplamaya Giriş
- Heterojen hesaplama ve CPU-GPU mimarisi
- CUDA yürütme ve bellek uzayları
- nvcc ve CMake ile CUDA C++ derleme
- GPU geliştirme ortamının doğrulanması
Thrust ve CUB ile Paralel Algoritmalar
- GPU ile hızlandırılan sıralama, indirme ve dönüştürme işlemleri
- GPU yürütmesi için STL algoritmalarının yeniden yapılandırılması
- Thrust cihaz vektörleri ve yürütme politikaları
- Özel veri yolları için CUB cihaz genel ilkel fonksiyonları
GPU Bellek Mimarisi ve Yönetimi
- Genel, sabit ve doku bellek türleri
- Bilinçli cihaz belleği ayrımı ve aktarımları
- Sadeleştirilmiş veri erişimi için Birleşik Bellek (Unified Memory)
- Bellek birleştirme ve erişim desen optimizasyonları
CUDA Akışları ile Asenkron Yürütme
- CUDA akışlarının oluşturulması ve yönetimi
- Çekirdek yürütmeyi veri aktarımlarıyla örtüşdürme
- Bağımlılık yönetimi için CUDA olayları (events)
- Akış öncelikleri ve eşzamanlılık ayarlaması
Özel CUDA Çekirdekleri Yazma
- SIMT programlama modeli ve iş parçacığı grubu (warp) yürütme
- Çekirdek başlatma yapılandırması ve grid-şerit döngüleri
- İş parçacığı indeksleme ve çok boyutlu grid yapıları
- Hata yönetimi ve CUDA Runtime API kontrolleri
İş Parçacığı Hiyerarşisi ve Yürütme Modeli
- Cihaz kodundaki gridler, bloklar ve iş parçacıkları
- Warp seviyesi ilkel fonksiyonları ve oylama işlemleri
- Blok seviyesi senkronizasyon ve engeller (barriers)
- Yerleşim (occupancy) ve kaynak kullanım analizi
Esnek Paralellik için İşbirlikçi Gruplar (Cooperative Groups)
- cooperative_groups API'si ve grup türleri
- İş parçacığı bloku döşemeleri ve tiled_partition
- Grid seviyesi işbirlikçi başlatmalar
- Çoklu-grid senkronizasyon kalıpları
Paylaşılan Bellek Optimizasyon Teknikleri
- Paylaşılan bellek bankaları ve banka çakışmalarının önlenmesi
- Matris işlemleri için döşeme (tiling) stratejileri
- Kullanıcı tarafından yönetilen önbellek olarak paylaşılan bellek
- Çok boyutlu görünümler için cuda::shared_memory_mdspan kullanımı
Çekirdek Füzyonu ve Gelişmiş Paralel Kalıplar
- Yaklaşık yükleme süresini azaltmak için birden fazla çekirdeğin birleştirilmesi (fusing)
- Tarama, anahtara göre indirme ve segmentli algoritmalar
- Atonik işlemler ve kilit içermeyen veri yapıları
- Verimlilik için wapr-ağırlıklı atomik işlemler
Nsight Systems ile Profil Çıkarma ve Optimizasyon
- CPU ve GPU etkinliğinin zaman çizelgesi analizi
- Bellek aktarım darboğazlarının belirlenmesi
- Çekirdek performansı ve yerleşim (occupancy) profil çıkarma
- Nsight Compute ile iteratif optimizasyon
CUDA Cihaz Kodunda Modern C++ Özellikleri
- Çekirdeklerde lambda ifadeleri, constexpr ve auto kullanımı
- C++17 paralel algoritmalar ve yürütme politikaları
- Cihaz üzerinde C++20 kavramları (concepts) ve aralıklar (ranges)
- nvcc ve CCCL 3.x'te C++23 desteği
CUDA Grafikleri ve Gelişmiş Asenkronluk
- CUDA grafiklerinin tanımlanması ve başlatılması
- Akış yürütmelerinden grafik yakalama
- Grafik güncelleme ve koşullu yürütme düğümleri
- İteratif yüklemeler için başlatma gecikmesinin azaltılması
Mevcut Uygulamalar İçin Entegrasyon Kalıpları
- C++ arayüzlerinin arkasına GPU kodunun sarmalanması
- Çoklu GPU ve NUMA sistemlerinin yönetimi
- CMake ve CUDA ile derleme sistemi entegrasyonu
- cuda-gdb ile cihaz kodunun hata ayıklanması
Özet ve En İyi Uygulamalar
- Thrust, CUB ve özel çekirdekler arasından seçim yapma
- GPU mimarileri arasında performans taşınabilirliği
- Kod düzenlemesi ve CUDA kaynakları için RAII kullanımı
- Sonraki adımlar ve ileri düzey CUDA öğrenim yolları
Kurs İçin Gerekli Önbilgiler
- Lambda ifadeleri, şablonlar ve STL dahil temel C++ yeterliliği
- Standart algoritmalar, konteynerler ve yineleyiciler ile aşinalık
- Döngüler, koşullu ifadeler ve işlevlerle konforlu düzeyde hakimiyet
- Önceden CUDA veya GPU programlama bilgisi gerekmez
Hedef Kitle
- Hesaplama yoğunluğundaki uygulamalarını GPU'lar ile hızlandırmak isteyen C++ geliştiricileri
- Sadece CPU'dan çalıştırılan sistemlerden heterojen paralel programlamaya geçiş yapan yazılım mühendisleri
- Büyük veri setleriyle çalışan performans mühendisleri ve nicel geliştiriciler
Danışanlarımızın Yorumları (3)
Başlangıçta eğitmenin temposu bana biraz hızlı geldi, ancak eğitim sırasında geri bildirimde bulunmam üzerine bunu kabul etti ve derslerin hiçbir kısmından ödün vermeden tempoyu yavaşlattı. Katılımcılarla mükemmel bir bağ kuruyor, son derece dost canlısı ve tartışmalara açık.
Alexandru Ostafi - Siemens
Eğitim - Advanced C++ : Practical workshop
Yapay Zeka Çevirisi
Detaylı açıklamalar, noktaların neredeyse açıkça tekrarlanması sayesinde bilgi gerçekten iyi bir şekilde aktarıldı. Rod'un, sorduğumuz tuhaf ve belirsiz soruları kontrol etmeye ve cevaplarının %100 doğru olduğundan emin olmaya olan istekliliği de dikkat edilmesi gereken bir noktaydı. Ayrıca, alternatif kodlama stillerinin avantajları ve dezavantajları hakkında tartışmak konusundaki ilgisi sayesinde sadece C++'ı niyet ettiğimiz şekilde kullanmayı değil, bunun neden böyle yapılması gerektiğini de öğrendik.
Nick Dillon - cellxica Ltd
Eğitim - Using C++ in Embedded Systems - Applying C++11/C++14
Yapay Zeka Çevirisi
Deneyim paylaşımı, öğretmenin bilgi ve değeri açısından çok önemlidir.
Carey Fan - Logitech
Eğitim - C/C++ Secure Coding
Yapay Zeka Çevirisi