İlk olarak 2006 yılında ortaya çıkan CUDA, dünyanın en değerli şirketlerinden biri olan NVIDIA için çok şey ifade ediyor. Hatta şirketin bel kemiği desek abartmış olmayız. Platform, verilerin geleneksel CPU’lara göre daha hızlı işlenmesi için CUDA GPU’ların ham işlem gücüne erişim sağlıyor. Böylelikle geliştiriciler, araştırmacılar, BT uzmanları ve bilgisayarlarından daha fazla verim almak isteyen herkes arasında bu kadar popüler.
Grafik işlemcilerinin CPU’ya göre paralel hesaplama yapabildiğini, aynı zamanda çok sayıda çekirdek barındırdığını hepimiz biliyoruz. Ancak işler sadece donanımla yürümüyor. Gelin teknoloji arenasında oldukça ünlü olan CUDA’ya, GPU paralel hesaplamayı bilgi teknolojileri dünyası için bu kadar değerli kılan şeylere bir göz atalım.
CUDA nedir?
“Compute Unified Device Architecture” kelimelerinin kısaltması olan CUDA, “Birleşik Cihaz Mimari Hesaplaması” anlamına geliyor. Aslında konuya bağlı olarak “CUDA” birden fazla farklı şeyi ifade edebilir: Üst düzey bir cihaz mimarisi, bu tasarıma sahip mimariler için paralel bir programlama modeli veya programlama modelini eklemek için C gibi üst düzey dilleri genişleten bir yazılım platformu gibi.
NVIDIA’ya göre CUDA, geliştirilen paralel bir hesaplama platformu ve programlama modeli. Bugüne kadar 20 milyondan fazla indirilen CUDA, geliştiricilerin GPU hızlandırıcılarının gücünden yararlanarak uygulamalarını hızlandırmalarını sağlıyor. Yüksek performanslı hesaplama (HPC) ve araştırma uygulamalarını hızlandırmanın yanı sıra, tüketici ve endüstriyel ekosistemlerde de yaygın olarak benimseniyor.
Gelişmiş hesaplama gücüne olan ihtiyaç her geçen gün artmakta, artmaya da devam edecek gibi görünüyor. Dünya çapındaki üreticiler, boyut, sıcaklık vb. sınırlamalar nedeniyle CPU’ları ileri taşıma konusunda zorluklarla karşı karşıya. Haliyle başka bir çözüm bulmak gerek. Bu çözümlerden biri de paralel hesaplama için GPU’ların kullanılması. Her zaman değindiğimiz üzere, grafik yongalarındaki çekirdek sayısı CPU’larınkinden çok çok daha fazla. CPU, görevleri sırayla gerçekleştirmek üzere tasarlanıyor. Bazı görevler ise paralel işleme olanak tanıyan GPU üzerinden yürütülebilir.

NVIDIA’nın Birleşik Hesaplama Mimarisi, şirketin GPU’larında genel amaçlı işlemler için kullandığı bir platform. Sıralı yürütme gerektirmeyen görevler, CUDA kullanılarak GPU’da diğer görevlerle paralel olarak çalıştırılabiliyor. C, C++ ve Fortran dil desteği ile, CUDA kullanarak yoğun hesaplama gerektiren görevleri ekran kartlarına aktarmak son derece kolay. Bu özel mimari, çok fazla hesaplama gücü gerektiren alanlarda veya paralelleştirmenin mümkün olduğu, paralel hesaplamaya izin veren senaryolarda kullanılmakta. Makine öğrenimi, araştırma ve tıp bilimleri analizi, fizik, süper hesaplama, kripto madenciliği, bilimsel modelleme ve simülasyonlar gibi alanlarda CUDA kendine yer buluyor.
CUDA iki farklı şeyi ifade edebilir, ikisi de birbiriyle bağlantılı:
- CUDA mimarisi: Yüzlerce veya binlerce çekirdeğe sahip NVIDIA GPU’larının devasa paralel mimarisi.
- CUDA yazılım platformu ve programlama modeli: Yine NVIDIA tarafından geliştirilen CUDA, geliştiricilerin bu GPU’ları genel amaçlı işlemler için programlamak amacıyla kullandıkları bir API (uygulama programlama arayüzü) türü.
Devrim niteliğindeki teknoloji, özetle geliştiricilerin hesaplamanın paralel hale getirilebilen herhangi bir kısmı için GPU’ların gücünden yararlanarak hesaplama yoğun uygulamaları hızlandırmalarını sağlıyor. Grafik programlamada ileri düzey beceriler gerektiren Direct3D ve OpenGL gibi önceki GPU programlama arayüzlerinin aksine, bu platform C, C++ veya Fortran gibi birçok tanıdık programlama diliyle uyumlu olduğu için geliştiriciler ve yazılım mühendislerinin paralel programlamayı uygulamasını çok daha kolay hale getiriyor. Geliştiricinin bu dillerin uzantılarını yalnızca birkaç temel anahtar sözcük biçiminde eklemesi yeterli. Yani hesaplama çekirdeklerinin yürütülmesi için GPU’nun sanal komut kümesine ve paralel hesaplama öğelerine doğrudan erişim sağlanıyor.
NVIDIA, 150’den fazla CUDA tabanlı kütüphane, SDK (yazılım geliştirme kiti), profil ve optimizasyon aracı sunduklarını söylüyor. Yani genel anlamda “CUDA” dediğimizde çok geniş kapsamlı bir kütüphaneden söz etmiş oluyoruz. Binlerce GPU hızlandırmalı uygulama, NVIDIA CUDA paralel hesaplama platformu üzerinde geliştirildi. CUDA’nın esnekliği ve programlanabilirliği, onu yeni derin öğrenme ve paralel hesaplama algoritmalarının araştırılması ve uygulanması için tercih edilen platform haline getirdi. CUDA ayrıca, geliştiricilerin yeni nesil NVIDIA GPU mimarileriyle sunulan yeniliklerden kolaylıkla yararlanmasına imkan tanıyor.
CUDA’nın hikayesi ve etkisi
2006 yılında NVIDIA tarafından piyasaya sürülmesinden bu yana CUDA, çeşitli sektörlerde hesaplama süreçlerinin hızlandırılmasında önemli bir rol oynamıştır. Bu teknoloji, GPU hızlandırmalı hesaplamayı hayatımıza sokarak dünya çapındaki araştırmacılar, bilim insanları ve geliştiriciler için erişilebilir hale getirdi. Yapay zeka, derin öğrenme ve bilimsel hesaplama gibi yüksek performanslı hesaplama (HPC) gerektiren alanlarda ise özellikle çok daha etkili.
Günümüzde CUDA, genellikle bir CPU’nun karmaşık hesaplama görevlerini bir GPU’ya devretmesini sağlıyor. Böylelikle hesaplama verimliliğinde çok ciddi bir artış sağlanabiliyor. Çünkü grafik çipleri, paralel işleme yetenekleri sayesinde aynı anda birden fazla işlemi yürütmede olağanüstü derecede verimli ve başarılı.

GPU’lar, oyunlar gibi grafikleri görüntülemek için yüksek hızlı paralel hesaplamalar gerçekleştirmek üzere tasarlanmakta. Grafik işlemciler, bazı alanlarda mikroişlemcilere kıyasla 30-100 kat daha hızlı. Nitekim senaryoya bağlı olarak arada muazzam farklar oluşabiliyor. Bildiğiniz gibi GPU’lar biraz daha büyük olan CPU’lara kıyasla çok küçük Aritmetik Mantık Birimlerine (Arithmetic Logic Units, ALU) sahip. Bu sayede ekrandaki her pikselin rengini hesaplamak gibi görevler için paralel hesaplama yapılabiliyor. Ekran kartlarının birincil görevi her zaman görüntüleri çizmek olmuştur lakin zaman içinde sayısız alana etki etmeye başladı.
GPU paralel hesaplamanın yaygın kullanıldığı alanlar
- Bilgisayar grafikleri: Startup’lar ve önemli teknoloji şirketleri, oyunlar, filmler vb. için foto-gerçekçi 3D grafikler oluşturmak için GPU’ları kullanıyor. GPU’lar, CPU’ların yapabileceğinden daha ayrıntılı ve gerçekçi grafikler sağlamakta.
- Yüksek performanslı hesaplama: GPU hesaplama ile hava tahmini, finansal tahminler ve diğer yüksek performanslı hesaplama görevleri için mükemmel olan büyük miktarda veriyi paralel olarak işleyebilirsiniz.
- Derin öğrenme: Konuşma tanıma, görüntü tanıma ve doğal dil işleme gibi çeşitli alanlarda grafik çiplerinin yüksek hesaplama performansından yararlanılıyor.
- Bilgisayar modelleme: GPU, iklim değişikliği modelleri ve insan beyni modelleri gibi yüksek doğrulukta modeller oluşturmak için kullanılabilir.
- Veri madenciliği: Büyük miktarda veriden yararlı bilgiler keşfetmenin bir yolu. GPU’lar veri madenciliğini daha hızlı ve verimli hale getirmekte.
- Bilimsel hesaplama: Kimya, biyoloji ve fizik gibi alanlarda rol oynuyor. GPU paralel hesaplama ile simülasyonları ve modellemeleri hızlandırabilirsiniz.
- Makine öğrenimi: Makine öğrenimi birçok alanda çeşitli alanlarda kullanılır. Görüntü tanıma algoritmaları, metin analizi ve tahmine dayalı modellemede kullanılır.
- Web hizmetleri: GPU hesaplama ile veri analizi, hava tahmini ve hisse senedi fiyat tahminleri gibi web üzerindeki hizmetleri daha hızlı hale getirmek mümkün.
CUDA nasıl kullanılır?
CUDA ile geliştiriciler, C, C++, Fortran, Python ve MATLAB gibi sürekli genişleyen desteklenen diller listesini kullanarak programlar yazarken bu dillere birkaç temel anahtar kelime şeklinde uzantılar ekleyebiliyor. Anahtar kelimeler, geliştiricinin paralel yapıyı kullanmasına ve derleyiciyi (veya yorumlayıcıyı) GPU hızlandırıcılarındaki uygulamanın bu bölümlerine yönlendirmesine olanak tanımakta.

CUDA paralel programlama modelini kullanarak programlamayı öğrenmek kolay. NVIDIA geliştirici web sitesinde videolar ve öğretici içerikler bulunuyor. CUDA Toolkit, GPU hızlandırmalı kütüphaneler, derleyici, geliştirme araçları ve CUDA runtime araçlarını içeriyor. C, C++ ve Fortran için araç setlerine ek olarak, GPU’lar ve OpenACC yönerge tabanlı derleyiciler gibi diğer programlama yaklaşımları için optimize edilmiş çok sayıda kütüphane bulunmakta.
AMD tarafında CUDA’nın bir karşılığı var mı?
Rakibinin çözümlerine sürekli olarak alternatifler sunmak üzere çabalayan AMD, şirketin tüketici odaklı RDNA ve veri merkezi odaklı CDNA mimarilerini tek bir mikro mimaride birleştirmek üzere yeni bir proje üzerinde çalıştığını duyurmuştu: UDNA. Nedir bu UDNA diyecek olursanız; donanımıyla, yazılımıyla komple bir mimari.
Grafik işlemciler, çekirdek teknolojileri ve yazılım geliştirmeleriyle birlikte grafik tarafında sürekli yeşil takımın çözümlerini konuşuyoruz. Özellikle de üzerinde durduğumuz “CUDA” platformu sektör üzerinde çok etkili. CUDA ekosistemiyle etkin bir şekilde mücadele etmek isteyen kırmızılılar, yeni UDNA ekosistemiyle birlikte yeni bir alternatif geliştirmeye karar vermişti.

Yeni UDNA mimarisinin amacı, geliştiriciler için tek bir odak noktası sağlamak. Böylelikle optimize edilmiş her uygulama, Radeon RX tüketici sınıfı ekran kartlarının yanı sıra Instinct Serisi gibi üst düzey veri merkezi GPU’larında verimli bir şekilde çalışacak. NVIDIA’nın CUDA platformu, genel amaçlı GPU hesaplamalarında GPU çekirdeklerinin kullanılmasını sağlıyor. C programlama dilinde eklenti olarak sunulan CUDA yazılımlarıyla birlikte destekli uygulamalarda NVIDIA GPU’ları daha verimli şekilde kullanabiliyoruz. AMD’nin amaçladığı şey de bu. Masaüstü ve dizüstü bilgisayarlardan veri merkezlerine kadar kırmızı ekibin grafik yongalarından daha iyi şekilde yararlanmak mümkün olacak. Yazılım geliştiricileri, gelecekte daha kolay şekilde özel optimizasyonlar sunabilecek.
Peki CUDA çekirdeği nedir?
CUDA Çekirdekleri, en basit tabirle NVIDIA GPU’larda bulunan paralel işlem birimleridir. Bu çekirdekler, hesaplamalar yaparak ve görevleri CPU ile paralel olarak yürüterek GPU’ların render uygulamaları ile birlikte işlemeye katkıda bulunmasını sağlar. Dahası, CUDA Çekirdekleri CUDA programlama için özel olarak tasarlanmakta. Bu da geliştiricilerin GPU’ların gücünü yalnızca işleme dışında genel amaçlı bilgi işlem görevleri için kullanmasına olanak tanıyor.
CUDA Çekirdekleri verileri eşzamanlı olarak işlemek için birlikte uyum içinde çalışabiliyor, böylelikle geleneksel CPU işlemeye kıyasla hesaplamalar çok daha hızlı hale geliyor. Ayrıca her bir CUDA Çekirdeği aynı anda birden fazla talimat yürütme yeteneğine sahip. Özetle diyebiliriz ki GPU’lar paralel iş yükleri için oldukça verimli.
CUDA Çekirdeklerinin çalışmasını anlamak için bir örnek ele alalım. İşlemciyi bir su deposu olarak düşünün. Eğer depoyu boşaltmak istiyorsanız borulardan yararlanmanız gerek. Eğer daha fazla sayıda boru bağlarsanız, doğal olarak depoyu daha hızlı şekilde boşaltabilirsiniz. NVIDIA’nın çekirdekleri işlemciye giden bu borular gibi hareket eder. Daha fazla sayıda CUDA çekirdeğiyle işlemi daha hızlı bir şekilde gerçekleştirebiliriz.