Giriş

2 minute read

CUDA Nedir ?

Grafik İşlem Birimi(GPU)’nin temel görevi bilgisayarda oluşturulan görüntülerin ekrana verilmesini sağlamaktır.Bu yüzden ilk GPU’lar sadece bu görevi yerine getirmekteydi. Zaman içerisinde Merkezi İşlem Birimi(CPU)’nin karşılaşılan büyük hesaplama problemlerinde yetersiz kaması üzerine GPU’nun donanımsal paralelliğinden yararlanma fikri ortaya çıkmıştır. GPU’ların programlanabilir bir arayüze sahip olmasını ve yüksek seviyeli dillerle programlanabilmesini sağlamak için GPGPU modeli oluşturulmuştur.

CUDA(Compute Unified Device Architecture), NVIDIA firmasının 2006 yılında GPU’nun donanımsal hesaplama gücünden faydalanmak amacıyla sunduğu paralel hesaplama mimarisidir. Linux, Windows ve Mac Osx platformları üzerinde çalışabilmektedir.FORTRAN, C/C++ ve Python gibi dilleri destekleyen bir API’dir.Rakiplerine göre avantajları paylaşımlı bellek kullanımı, GPU’dan daha hızlı veri okuma ve bit düzeyinde işlem yapılabilmesine olanak sağlaması olarak sayılabilir.

GPU’nun CPU’dan farkı, SIMD(Single Instruction Multiple Data-Tek Komut Çoklu Veri) mimarisine sahip olmasıdır.Alttaki şekilde CPU(soldaki) ve GPU(sağdaki)’ların donanımsal olarak karşılaştırılması gösterilmiştir. CPU hesaplamalarını seri bir şekilde gerçekleştirirken, GPU hesaplamalarını yapısal olarak paralel olması sebebiyle paralel bir şekilde gerçekleştirmektedir.

</a>

İŞ AKIŞI

CUDA mimarisinde geliştirilen uygulamalar sadece GPU üzerinde çalışmazlar. Öncelikle CPU tarafından kontrol edilen ana bellek üzerinden grafik kartı üzerindeki belleğe kopyalanması gereklidir. GPU belleğindeki veri CUDA iş parçacıkları tarafından yürütülerek paralel olarak hesaplanması tamamlanır ve ardından tekrar ana belleğe gönderilerek işlem sonlandırılır. Bu akış modeli alttaki şekilde görülmektedir.

</a>

CPU üzerinde çalışan kod parçaları ile GPU üzerinde çalışan kod parçaları farklıdır. CUDA mimarisi ile uygulama geliştirillirken bu yapıya uygun bir şekilde kod yazılır. Alttaki şekilde CUDA ile geliştirilmiş bir programın genel çalışma mantığı ifade edilmektedir. Burada “Host” CPU olarak ve “Device” ise GPU olarak düşünülmelidir. Seri kodlar CPU üzerinde yürütülür. “Kernel” olarak adlandırılan paralel kod parçaları ise GPU üzerinde yürütülür. Host üzerinde çalıştırılan komut tektir ve aynı anda tek bir thread(iş parçacığı) işlenir. Device üzerinde çalıştırılan komutlar ise birden fazla thread’e bölünerek işlenir.

</a>

ÖLÇEKLENEBİLİR PROGRAMLAMA

Gelişen GPU teknolojisi ile birlikte donanımsal farklılıklar da ortaya çıkmaktadır. CUDA mimarisi, NVIDIA’nın Geforce 8800 ve sonrasında çıkan modellerinde desteklenmektedir. Piyasaya çıkan her yeni ürün öncekilerden farklı çekirdek sayılarına sahiptir. Ancak CUDA ile yazılmış bir uygulama , GPU çekirdekleri ile ilgili bir işlem yapmak zorunda değildir. Bu özelliğe GPU’nun ölçeklenebilirlik özelliği denilmektedir. Alttaki şekilde çift çekirdekli bir GPU ile 4 çekirdekli bir GPU’nun programa nasıl ayak uydurdukları görülmektedir.

</a>

Referanslar

  1. “CUDA Teknolojisi” http://www.hwa.com.tr/nvidia/wpcontent/uploads/2013/08/cuda_teknolojisi_3.jpg
  2. NVIDIA,(2012) “NVIDIA CUDA C Programming Guide Version 4.2”

Tags:

Updated:

Leave a Comment