Bizi tercih ettiğiniz için teşekkür ederiz. Ekip üyelerimiz en kısa sürede sizlerle iletişime geçecektir.
Rezervasyonunuzu gönderdiğiniz için teşekkür ederiz! Ekibimizden bir yetkili kısa süre içinde sizinle iletişime geçecektir.
Süre 28 Saat
Eğitim İçeriği
Giriş
- OpenCL nedir?
- OpenCL vs CUDA vs SYCL
- OpenCL özelliklerinin ve mimarisinin genel bakışı
- Geliştirme Ortamının Kurulması
Temellere Giriş
- Visual Studio Code kullanarak yeni bir OpenCL projesi oluşturma
- Proje yapısının ve dosyalarının keşfi
- Programın derlenmesi ve çalıştırılması
- printf ve fprintf kullanarak çıktının görüntülenmesi
OpenCL API'si
- OpenCL API'sinin ana bilgisayar programındaki rolünün anlaşılması
- Aygıt bilgilerini ve yeteneklerini sorgulamak için OpenCL API'sinin kullanılması
- Bağlam (context), komut kuyrukları (command queue), tamponlar (buffer), çekirdekler (kernel) ve olaylar (event) oluşturmak için OpenCL API'sinin kullanılması
- Okuma, yazma, kopyalama, eşleme (map), eşlemeyi kaldırma (unmap), yürütme ve bekleme gibi komutları sıraya koymak için OpenCL API'sinin kullanılması
- Hataları ve istisnaları yönetmek için OpenCL API'sinin kullanılması
OpenCL C
- OpenCL C'nin cihaz programındaki rolünün anlaşılması
- Cihazda çalışan ve veri manipülasyonu yapan çekirdekler yazmak için OpenCL C'nin kullanılması
- OpenCL C veri tipleri, sınırlayıcıları (qualifiers), operatörleri ve ifadelerinin kullanılması
- Matematik, geometrik, ilişkisel vb. OpenCL C yerleşik fonksiyonlarının kullanılması
- atomik, image, cl_khr_fp16 vb. OpenCL C uzantılarının ve kütüphanelerinin kullanılması
OpenCL Bellek Modeli
- Host ve cihaz bellek modelleri arasındaki farkın anlaşılması
- global, local, constant ve private gibi OpenCL bellek alanlarının kullanılması
- buffer, image ve pipe gibi OpenCL bellek nesnelerinin kullanılması
- Sadece okuma, sadece yazma, okuma-yazma gibi OpenCL bellek erişim modlarının kullanılması
- OpenCL bellek tutarlılık modeli ve senkronizasyon mekanizmalarının kullanılması
OpenCL Çalışma Modeli
- Host ve cihaz çalışma modelleri arasındaki farkın anlaşılması
- Paralellik tanımını yapmak için OpenCL work-item'ları, work-group'ları ve ND-range'larının kullanılması
- get_global_id, get_local_id, get_group_id vb. OpenCL work-item fonksiyonlarının kullanılması
- barrier, work_group_reduce, work_group_scan vb. OpenCL work-group fonksiyonlarının kullanılması
- get_num_groups, get_global_size, get_local_size vb. OpenCL cihaz fonksiyonlarının kullanılması
Hata Ayıklama (Debugging)
- OpenCL programlarındaki yaygın hataların ve hata kaynaklarının (bugs) anlaşılması
- Değişkenleri, kırılma noktalarını (breakpoints) ve çağrı yığınını (call stack) incelemek için Visual Studio Code hata ayıklayıcısının kullanılması
- AMD cihazlarında OpenCL programlarını hata ayıklamak ve analiz etmek için CodeXL'in kullanılması
- Intel cihazlarında OpenCL programlarını hata ayıklamak ve analiz etmek için Intel VTune'un kullanılması
- NVIDIA cihazlarında OpenCL programlarını hata ayıklamak ve analiz etmek için NVIDIA Nsight'ın kullanılması
Optimizasyon
- OpenCL programlarının performansını etkileyen faktörlerin anlaşılması
- Aritmetik verimliliğini artırmak için OpenCL vektör veri tipleri ve vektörleme tekniklerinin kullanılması
- Kontrol maliyetini azaltmak ve yerelliği (locality) artırmak için OpenCL döngü açma (loop unrolling) ve döngü karosu (loop tiling) tekniklerinin kullanılması
- Bellek erişimini ve bant genişliğini optimize etmek için OpenCL yerel belleği ve yerel bellek fonksiyonlarının kullanılması
- Yürütme süresini ve kaynak kullanımını ölçmek ve iyileştirmek için OpenCL profilleme ve profilleme araçlarının kullanılması
Kurs İçin Gerekli Önbilgiler
- C/C++ dili ve paralel programlama kavramlarına hakimiyet
- Bilgisayar mimarisi ve bellek hiyerarşisi hakkında temel bilgi
- Komut satırı araçları ve kod editörleri konusunda deneyim
Hedef Kitle
- Heterojen cihazlarda programlamak ve paralel yapılarını kullanmak için OpenCL'in nasıl kullanılacağını öğrenmek isteyen geliştiriciler
- Farklı platformlarda ve cihazlarda çalışabilen, taşınabilir ve ölçeklenebilir kod yazmak isteyen geliştiriciler
- Heterojen programlamanın düşük seviye yönlerini keşfetmek ve kod performansını optimize etmek isteyen programcılar