2020’de GPU programlama – OpenCL mi, CUDA mı?

CUDA ve OpenCL

OpenCL ve CUDA ile yüksek performanslı GPGPU yani genel amaçlı GPU programlama gün geçtikçe daha fazla duyulmaya başladı. Bu iki programlama arayüzünün avantajlarını ve dezavantajlarını konuşmadan önce gelin bu teknolojilerle ilgili biraz daha bilgi verelim. Daha sonra ortak yanlarından ve farklarından bahsedebiliriz.

Ekran kartları ile ilgili; tek işlerinin sadece oyun ve görüntü renderlamak olduğu gibi bir algı var. Oysa ekran kartları tasarımı ve mimarisi gereği çok yönlü kullanılabilir. Mesela çoğu durumlarda hızlı video encoding işlemleri, video işleme ve render işlemler ekran kartı üzerinde gerçek zamanlı olarak gerçekleşmektedir ve CPU’ya göre hatrı sayılır bir hız farkı vardır.

CUDA ve OpenCL ile GPU yani ekran kartı üzerinde genel işlemler yapılabilir. Eskiden fazlasıyla karmaşık olan bu işlemler günümüzde çok daha kolaylaştırılmıştır. Ekran kartlarının render harici ilk kullanımı shader ile görülmeye başlamıştı. Shader dilleri ve bu dillerin uygulamaları çok da kullanışlı değildi. Programlamacılar yüksek hızlı işlemler için geliştirmek zorunda olduğu Pixel Shaderlar genel hesaplamalar yapmak için en uygun yöntem değildi. Bu ihtiyaçların sonucunda CUDA ve OpenCL ortaya çıktı ve yazılım geliştiricilere ekran kartı üzerinde yüksek hızlı hesaplamalar yapma olanağı sağlanmış oldu.

OpenCL ve CUDA için donanım

Günümüzde NVIDIA, AMD ve Intel olmak üzere üç büyük ekran kartı üreticisi vardır. NVIDIA bunların arasında en büyük markete sahip olanıdır.

NVIDIA genel amaçlı hesaplama için dört farklı amaca yönelik ekran kartları üretmektedir. Mobil için GPU Tegra, laptop bilgisayarlar için üretilen GPU GeForce GT serileri, masaüstü bilgisayarlar için üretilen GeForce GTX serileri ve serverlar için Quadro ve Tesla işlemcileri üretmektedir.

AMD ise mobil cihazlar, laptop ve masaüstü bilgisayarlar ve sunucular için gömülü Radeon grafik işlemcileri üretmektedir.

Intel’in grafik işlemci çözümleri ise doğrudan CPU yani işlemcilerin üzerine entegredir. Bu grafik işlemciler, genel amaçlı ve yüksek hızlı işlemler için çok da iyi bir seçenek değildir. Laptopların orta ve düşük performans isteyen grafik işlem isteklerini yerine getirebilmektedir. Ama ekran kartları bir kenara dursun, herhangi bir ekran kartı bulunmaması durumunda OpenCL CPU üzerinde çalışmaya devam edebilir, bu da en önemli CPU üreticisi olarak Intel’i yakından ilgilendirmektedir.

OpenCL ve CUDA için yazılım

NVIDIA halihazırda varıyla yoğuyla CUDA’yı geliştirmeye devam ediyor. Hatta kendi frameworkünü yaymak için dünya çapında eğitim merkezleri kurup, konferanslar dahi düzenleniyor. NVIDIA, MSVS entegrasyonu, Video SDK gibi birçok aracı kapsayan CUDA araçlarını geliştirdi. Bunların haricinde üçüncü parti araçlar ve kütüphaneler bulunmakta, bunun da CUDA geliştiricilerine büyük faydası var. Ekran kartlarında yapılan her bir yükseltme, CUDA ve araçlarına çok çabuk entegre edilmektedir.

NVIDIA’ya kıyasla, AMD daha pasif halde. Yine de CodeXL araçları OpenCL geliştiricilerine birçok imkan sunmaktadır.

OpenCL ile CUDA arasındaki farklar

Daha net olmak gerekirse, CUDA bir dilden ziyade API, yani programlama arayüzüdür. CUDA, paralel hesap platformu ve aynı zamanda GPU ile genel amaçlı hesaplama için programlama modelidir. Yani bir geliştirici olarak, CUDA ile C veya C++ dilinde programınızı yazabilir, bazı eklentilerle GPU ile çalışabilir hale getirebilirsiniz. OpenCL’de ise C++ dilini kullanamıyorken, yine CUDA’daki gibi C diliyle bazı eklentilerle GPU ile çalışabilir hale getirebilirsiniz.

OpenCL platformlar-arası bir üründür. Bu da demek oluyor ki neredeyse her türlü işletim sisteminde, ve CPU, FPGA ve ASIC dahil neredeyse her türlü donanım üzerinde çalıştırabilirsiniz.

CUDA ve OpenCL’nin artı ve eksileri nelerdir

CUDAOpenCL
NVIDIA marketi çok büyük (+)AMD ve Intel pazarları fena sayılmaz
CUDA Toolkit (+)CodeXL Toolkit (+)
Birçok toolkit ve kütüphane (+)Pek fazla toolkit ve kütüphane yok (-)
Teknik destek ve eğitime erişim kolay (+)Teknik destek (+)
Mobil NVIDIA ekran kartı desteği (+)CPU / FPGA / ASIC desteği (+)
Çok geniş NVIDIA ekran kartı yelpazesi (+) Çok geniş AMD/Intel donanım yelpazesi (+)
Kapalı kaynak, tescilli ürün (-) Açık kaynaklı (+)