GPGPU nedir ve ne işe yarar?

CPU mikro mimarileri uzun bir yol kat etti, ancak genel işleme için kullanılsalar bile, her şeyde en iyisi değiller. Bu nedenle birkaç yıl önce heterojen bilgi işlem gibi yeni bir paradigma doğdu. Ve bu tür bilgi işlemin en önemli noktalarından biri, bu makalede odaklanacağımız GPGPU’dur.

Heterojen bilgi işlem ortaya çıkana kadar bir adı yoktu, ancak şimdi var olduğu için homojen bilgi işlem adı verildi. Yani CPU’nun bilgi işlemden sorumlu olduğu, bu amaçla işlemci veya benzeri birimleri kullanan sistemlerdir.

Heterojen bilgi işlem nedir?

Bununla birlikte, homojen veya geleneksel bilgi işlemin aksine, sisteme giderek daha fazla işlemci türü entegre ediliyor, böylece birlikte çalışıyorlar ve her biri en iyi yaptığı şeyi yapıyor, basitçe ifade etmek gerekirse. Örneğin, CPU grafikleri işleyebilir, ancak uzun zaman alır, bu yüzden GPU var.

Şu anda, her birinin avantajları ve dezavantajları olan ve her biri bir tür uygulamanın işlenmesinde öne çıkan birçok farklı işlemci türü vardır. Örneğin, özel hızlandırıcılar olarak CPU, GPU, DPU, VPU, DSP, FGPA, ASIC’ler, NPU’lar vb.

Heterojen bilgi işlemde, her birine uzman oldukları veya daha yüksek performansa ve/veya enerji verimliliğine sahip oldukları farklı iş yükleri atanacaktır. Örneğin, genellikle CPU’da işlenen bir vektör komutunun yürütülmesi GPU’da daha kısa sürede yapılabiliyorsa, neden olmasın? Bu heterojen hesaplamanın dayandığı şey tam olarak budur.

Bu sayede performans ve enerji verimliliği katlanarak artabilir. Son yıllarda özellikle HPC sektöründe istismar edilen de budur. Watt başına maksimum performans elde etmenin ve bellek erişimlerini en aza indirmenin yolu. Örneğin, GPU, CPU ve DPU kullanan bir süper bilgisayar hayal edin. Dolayısıyla, bu veri merkezlerinde son derece önemli olan yürütme süresini ve tüketimi azaltarak heterojen bilgi işlemin avantajlarından zaten yararlanılıyor.

Yapay zeka, yapay görme veya derin öğrenme gibi iş yüklerini çalıştırdığınızı hayal edin. Bu görevlerin büyük miktarda veriyi işlemesi gerekir. Bu nedenle grafik formatına aktarılabilirler ve GPU bunları halledebilir. Ve bu çipler, CPU’dan daha düşük bir frekansta çalışsalar da, daha fazla işlem çekirdeğine sahipler.

Aynı mantıkla, farklı bir ISA veya mikro mimariye dayalı çekirdeklerin kullanılması da, genellikle iki Cortex A-Serisi çekirdeğin kümelerini kullanan Arm gibi birimlerden söz ettiğimizde olduğu gibi, bu heterojen bilgi işlemden yararlanmanın iyi bir yolu olabilir. Bu sayede iş yükü düşük olduğunda E-Çekirdekler, yüksek olduğunda ise P-Çekirdekler kullanılarak verimlilik artırılır.

Bu, mevcut işlemcileri başka bir şekilde kullanarak potansiyellerini ortaya çıkarmaya çalışmak, sektördeki uzmanların çeşitli şekillerde aradığı bir şey. Ama tabii ki bu aynı zamanda yazılımın bu paradigmadan yararlanabilecek şekilde uyarlanması anlamına da geliyor.

GPGPU nedir?

GPGPU (General-Purpose Graphics Processing Unit), GPU’nun geleneksel olarak işlem CPU’su olması gereken özelleşmemiş genel amaçlı hesaplamaları gerçekleştirmek gibi yalnızca grafiklerden daha fazlası için kullanıldığı modern bir heterojen bilgi işlem metodolojisini ifade eden bir terimdir.

Ancak, paralellik için yapılmış GPU mimarisi göz önüne alındığında, bunları daha hızlı ve daha iyi güç verimliliğiyle çalıştırabilirsiniz. Kısacası, GPU’nun potansiyelinden genel amaçlar için yararlanmak, böylece paralelliği geliştirmek. Bununla birlikte, GPU’dan GPGPU olarak yararlanmak, yazılımı buna göre uyarlamayı gerektirir, dolayısıyla bazı zorluklar da ortaya çıkarır.

Donanıma gelince, gerçek şu ki, tüm modern GPU’lar GPGPU’lardır, bunun için herhangi bir fiziksel değişikliğe ihtiyaç duymazlar, işlemci programlanabilir ve içerdikleri binlerce çekirdekten yararlanarak aynı anda hesaplamalar yapabilirsiniz. GPU’ların orijinal olarak bunun için değil, grafikleri işlemek için tasarlandıkları doğrudur, ancak gördüğümüz gibi, belirli bilimsel uygulamalar için kullanıldıklarında çok fazla potansiyele sahiptirler.

GPU’yu bir GPGPU gibi davranması için nasıl ayarlayabilirim?

Daha önce de belirttiğim gibi güncel bir GPU veya ekran kartının GPGPU olarak çalışabilmesi için “kandırılması” yani hızlandırmak istediğimiz uygulamalardan gelen verilerin sanki grafik verileriymiş gibi gelmesi gerekiyor ki bu bunları normal grafiklerde olduğu gibi işler ve bu şekilde sonuca ulaşır. Ve bunun için öne çıkan iki API var:

CUDA, NVIDIA tarafından oluşturulmuş bir paralel bilgi işlem platformu ve programlama modelidir. Geliştiricilerin GPGPU uygulamaları oluşturmak için kullandıkları SDK, yalnızca bu markanın grafik kartları veya GPU’ları için çalışır.

OpenCL, işleme için GPGPU kullanan heterojen bilgi işlem için düşük seviyeli bir Khronos Grubu (başlangıçta Apple tarafından oluşturulmuştur) API’sidir. Bununla, geliştiriciler, önceki CUDA örneğine benzer şekilde, C/C++ programlama dilinde genel amaçlı yazma için GPU bilgi işlem çekirdeklerini kullanabilirler.