Mevcut CPU uygulamalarının NVIDIA GPU’lara aktarılması, performans artışlarını beraberinde getirebilir. Bu sayede kullanıcılar, sorunları çok daha büyük ölçeklerde ve hızlarda çözebilmektedir. NVIDIA GPU hızlandırması için kodu uyarlama süreci başta zaman ve çaba gerektirse de, sonuçta elde edilen verimlilik ve throughput artışları genellikle bu maliyetleri fazlasıyla karşılamaktadır.
Bu sürecin göz korkutucu görünebileceği ve zaman kaybı yaşanacağı endişeleri yaratabileceği doğrudur. Ancak CPU kodunu GPU koduna aktarmak, aşamalı şekilde yapılabilir ve böylece anında hızlanma sağlanarak risk en aza indirilebilir.
Portlama süreci boyunca, CPU’dan GPU’ya tek bir görevin aktarılmasının sağladığı önemli hızlandırma ve sonraki performans artışları için fırsatlar sıkça ortaya çıkmaktadır; bunun için gelişmiş kernel optimizasyon tekniklerine ihtiyaç duyulmaz.
NVIDIA Nsight Araçlarıyla Kolay Portlama
NVIDIA Nsight araç seti, portlama sürecinin tamamını desteklemektedir; ister yeni başlıyor olun, ister deneyimli bir NVIDIA CUDA geliştiricisi. Az bir çaba ile NVIDIA Nsight Systems’i kurarak kod analizi yapmaya ve düşük çaba gerektiren hızlandırma fırsatlarını belirlemeye başlayabilirsiniz. NVIDIA Nsight Compute gibi gelişmiş araçlar, bu çabaların üzerine inşa edilerek bireysel kernel performansını optimize eder ve tüm uygulamanın mümkün olan en hızlı şekilde çalışmasını sağlar.
Enerji Simülasyonlarını Hızlandırmak
Électricité de France (EDF), AWS, NVIDIA ve Aneo, EDF tarafından kullanılan code_saturne hesaplamalı akışkanlar dinamiği (CFD) uygulamasını AWS’de NVIDIA GPU’larıyla hızlandırarak iteratif bir şekilde portlamak için iş birliği yapmaktadır.
EDF, Fransız hükümetine ait çok uluslu bir elektrik şirketi olup, dünya genelinde en büyük elektrik üreticilerindendir. 1997 yılında karmaşık akış dinamiği akışlarını simüle edebilen çeşitli, açık kaynaklı bir araç olarak code_saturne’yi geliştirmiştir. Bu araç, güvenlik değerlendirmeleri ve santrallerin ömrünü uzatma gibi fiziksel deneylerle erişilemeyen senaryoların yüksek kaliteli modellemelerini yapmayı sağlar.
Projenin amacı, code_saturne’nin NVIDIA yazılım ve donanım platformlarını kullanabilmesini sağlamak ve modüler mimarisini koruyarak NVIDIA GPU’lara uyumlu hale getirmektir, ayrıca AWS Bulutu üzerinden erişim sağlamaktır.
Bu blog yazısı, NVIDIA Nsight kullanarak CPU uygulamalarını NVIDIA GPU’larda hızlandırmaya başlamak için gerekli adımları gösteren ongoing code_saturne iş birliğinden alıntılar içermektedir.
Analiz İçin Kodu Hazırlamak
code_saturne gibi gelişmiş ve zengin özelliklere sahip kodlar için hangi parçaların önceliklendirilmesi gerektiği açık değildir. Nsight Systems kullanarak yapılan dikkatli analiz, kod darboğazlarını belirlemeye ve geliştirici çabalarının önceliklerini yönlendirmeye yardımcı olmuştur.
Portlama işlemini, bozulma değişikliklerini en aza indirerek ve kodun süreç boyunca sürekli kullanılabilir olmasını sağlamak için aşamalı olarak gerçekleştirildi. İlk zorluk, kod geliştikçe belleğin GPU tarafından görünür olmasını sağlamaktı. CUDA yönetilen bellek, bu zorluğun üstesinden gelerek, CUDA sürücüsünün CPU ve GPU belleği arasında gereken yerde kullanılmak üzere otomatik olarak veri göçü yapmasını sağladı.
Yönetilen bellek, geliştiricilere daha az müdahalede bulunarak yardımcı oldu. Hem CPU hem de GPU tarafından aynı mantıksal adresin kullanılmasını sağladı ve bellek transferlerinin Nsight Systems tarafından izlenebilmesi için görünür olmasını sağladı.
Bununla birlikte NVIDIA Araçları Uzantısı (NVTX) eklemeleri kullanılarak, code_saturne’nin portlama süreci analiz edildi ve takip edildi. Projenin hangi bölümlerinin darboğaz oluşturduğunu belirlemek için her adımda gözlemlendi.
NVTX eklemeleri, code_saturne kodunun ana bölümlerine kolayca eklenebilir ve iç içe geçirilebilir. nvtxRangePushA
komutu bir aralığı başlatır ve adlandırırken, nvtxRangePop
her aralığı kapatır. Bu, geliştiricilerin kodun bölümlerine isim vermesine ve böylece uygulama profillerinde tanıdık ve net olmalarına olanak tanır. Bu ekleme API’si, Python ve Fortran için de mevcuttur; birçok NVIDIA matematik kütüphanesi NVTX ile birlikte gelir.
Şekil 1, code_saturne simülasyonundan elde edilen bir Nsight Systems raporunun niteliksel bir gösterimini sunmaktadır. Her yineleme, özel olarak yazılmış bir gradyan kodu (yeşil) ve ardından AmgX gibi kütüphanelere bağımlı çok ızgara çözücü adımlarını (mor) içermektedir.

Buradan, kodun ana parçaları görsel olarak gözlemlenerek hangi rutinlerin en çok zaman alan ve detaylı bir şekilde incelenmesi gereken bölümler olduğu belirlenebilir.
Portlama Fırsatlarını Belirlemek
NVTX ile etiketlenmiş bir kod bölümünün, örneğin önceki resimdeki “Gradyanlar”, detaylı analizi, potansiyel portlama fırsatlarını sağlamakta cömert bir şekilde bilgi sunabilir. Şekil 2, code_saturne’nin gradyan kodunun bir segmentini sunmakta ve hemen iki potansiyel problemin fark edilmesini sağlamaktadır.
İlk olarak, CPU’da çalışırken GPU’nun boşa harcadığı zaman boyunca uzun bir kod segmenti bulunmaktadır. İkincisi, hemen ardından gelen iki kernel, CPU’dan GPU’ya veri transferi gerçekleşirken sayfa göçü göstermektedir. Bu iki sorun, bu CPU kodu segmentinin GPU’ya taşınması için mükemmel bir aday olduğunu kanıtlamaktadır.

Geliştiriciler, bu bilgileri rehber alarak daha fazla hesaplamayı GPU’ya taşımayı ilerlettiler. Böylece, hem sayfa göçleri azaltıldı hem de GPU’nun boşta bekleme süresi kısaldı. Şekil 3, bu çabanın sonuçlarını göstermektedir. Portlamadan önce, CPU segmenti 12.3 ms’de çalışırken, portlamadan sonra 0.69 ms’ye düşerek 18 kat hızlanma sağlanmıştır. İkinci ve dolaylı bir fayda, daha fazla verinin artık GPU’da bulunmasıdır. Bu durum, sonraki iki kernel için bellek transferlerini azaltarak, toplam çalışma süresini 4 kat hızlandırmaktadır.

code_saturne projesi devam etmekte ve bir sonraki adımlar, GPU kodunun daha da iyileştirilmesini sağlamak amacıyla kernel optimizasyonuna başlamak olacaktır. Bu çabada, Nsight Compute gibi araçlar kritik bir rol oynamaktadır.
Bugün Kodu Hızlandırmaya Başlayın
CPU kodunuzu GPU’ya aktarmaya başlamak, düşündüğünüz kadar göz korkutucu değildir. Bu süreç aşamalı olarak gerçekleştirilebilir ve NVIDIA, süreci kolaylaştıran güçlü araçlar sunmaktadır.
Nsight Systems, Nsight Compute ve NVTX hakkında daha fazla bilgi edinmek için belgelerine göz atmayı unutmayın.
EDF’nin code_saturne‘si hakkında daha fazla bilgi edinmek için ziyaret edebilirsiniz.