İçeriğe atla

OpenCL

OpenCL'nin logosu

OpenCL, (Open Computing Language), Apple tarafından 2008 yılında kâr amacı gütmeyen teknoloji şirketleri birliği Khronos Group'a önerilen, kabul gördükten sonra spesifikasyonu pek çok şirketin katkılarıyla hazırlanan heterojen hesaplama platformudur. OpenCL; destekli grafik işlemcileri, genel amaçlı işlemciler ve FPGA ler gibi farklı platformlarda hesaplama yapılmasına olanak sağlar. OpenCL AMD, Intel, NVIDIA ve ARM tarafından desteklenmektedir. Ayrıca OpenCL kullanılarak Sony Playstation cihazlarında kullanılan Cell işlemcilerde de hesaplama yapılabilmektedir.

OpenCL C Dili

OpenCL destekli cihazlarda(bundan sonra cihaz olarak geçecektir) çalıştırılacak kodun yazılması için OpenCL C de denilen, C programlama dilinin ISO/IEC 9899:1999 sürümünü baz alan bir programlama dili geliştirilmiştir. OpenCL C dilinde paralelliğin daha iyi kullanılabilmesine olanak sağlamak için C programlama dilinden bazı farklılıklara gidilmiştir. Bu farklılıklardan en çok göze çarpanları:

  • Fonksiyon işaretcileri(function pointers) kaldırılmıştır.
  • Özyineleme(recursion) kaldırılmıştır.
  • Değişken uzunluklu diziler kaldırılmıştır.
  • Vektör veri türleri eklenmiştir
  • Senkronizasyon ve çalışma modeline ilişkin pek çok fonksiyon eklenmiştir .
  • Hafıza yönetimi için __global, __local, __constant ve __private sıfatları eklenmiştir.

OpenCL Çalışma Mantığı

Kernel

Kernel cihaz üzerinde çalıştırılabilen en temel kod dizisine verilen isimdir. Kerneller OpenCL'in ilk versiyonlarında C dilinde yazılıyordu. Artık C++ dilinin güçlü imkânları da kullanılmaktadır. C++14 versiyonu kullanılmaktadır.[1] Kernelları cihaz üzerinde çalışacak C/C++ fonksiyonları gibi düşünebiliriz. Kerneller veri-paralel veya iş-paralel olabilirler, fakat önemli nokta paralel olmalarıdır.

İş-Parçaları, İş-Öbekleri(Work-item,Work-group)

İş-parçaları OpenCL paralel çalıştırma hiyerarşisinde en küçük parçalardır. Bir kernel her bir iş parçası için çalıştırılır. Her bir iş-parçasının kendi hafızası bulunur ve bu hafıza __private sıfatıyla ayrılır. İş-parçaları gruplanarak iş-öbeklerini oluştururlar, aynı iş-öbeğindeki tüm iş-parçalarının paralelde birlikte çalıştırılacağı garanti altına alınmıştır. Her iş-öbeğinin, iş-parçaları arasında paylaşılan bir hafızası vardır ve bu hafıza __local sıfatıyla ayrılır. Farklı iş-öbekleri birbirlerinin __local hafızalarına erişemezler. Çalıştırılacak iş-parçası sayısına genel iş büyüklüğü(global work size) denilir, her bir öbekteki iş parçacığı sayısı ise yerel iş büyüklüğü(local work size) ile belirlenir. Tahmin edilebileceği gibi genel iş büyüklüğü, yerel iş büyüklüğünün tam katı olmalıdır. __global ve __constant hafıza alanları ise tüm iş-parçaları tarafından erişilebilen hafıza alanlarıdır.

OpenCL Paralel İşleme Mantığı

OpenCL çalışma prensibi paralelliği daha etkinleştirebilmek için boyutlu bir yapıdadır. Tek boyutlu bir diziyi işlemek için tek boyutlu bir iş-parçacığı mantığı kullanabiliriz, fakat resim veya 3 boyutlu texture gibi çok boyutlu bir yapıyı işlemek istiyorsak çok boyutlu bir iş-parçacığı mantığı kullanmalıyız. Örneğin 640*480 büyüklüğündeki 5 resmi tek bir kernel üzerinden pixel bazlı olarak işlemek istersek, 1.çalışma boyutunu 640, 2.çalışma boyutunu 480 ve 3.çalışma boyutunu 5 olarak atayabiliriz, bu durumda 640*480*5 = 1536000 adet iş-parçası çalıştırılacaktır, eğer yerel iş büyüklüğünü 64 olarak seçersek, 1536000 / 64 = 24000 adet iş-öbeği çalıştırılacaktır.

OpenCL Çalışma Dizi Toplama Örneği

Standart C dilinde 2 diziyi toplama işlemini aşağıdaki gibi kod ile gerçekleştirebiliriz

void diziTopla(
int n,
const float *a,
const float *b,
float *result

){

  int i;
for(i = 0 ; i < n ; i++)
result[i] = a[i] + b[i];
}

Bu işlemi OpenCL ile yapmak için ise aşağıdaki gibi paralel çalışacak bir kernel yazabiliriz, bu kernel her iş-parçası için 1 kere çalıştırılacak, dolayısıyla iş parçası indisi ile o kernel da işlenecek dizi elemanlarına ulaşıyoruz. Bu durumda tek boyutlu bir iş büyüklüğü kullanabiliriz, genel iş büyüklüğünü dizinin uzunluğuna ayarlarsak her bir dizi elemanı için bir iş parçası çalıştırılmasını sağlayabiliriz.

__kernel void diziTopla(
__global const float *a,
__global const float *b,
__global float *result

){

  int id = get_global_id(0); // iş parçası indisini alıyor
result[id] = a[id] + b[id]; }

Ayrıca bakınız

Dış bağlantılar

Kaynakça

  1. ^ "Arşivlenmiş kopya". 10 Ocak 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Ocak 2017. 

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">JavaScript</span> programlama dili

JavaScript, HTML ve CSS ile birlikte World Wide Web'in temel teknolojilerinden biri olan programlama dilidir. Web sitelerinin %97'sinden fazlası, web sayfası hareketleri için istemci tarafında JavaScript kullanırlar ve kullanılan kodlar genellikle üçüncü taraf kitaplıkları içerir. Tüm büyük web tarayıcılarında, kaynak kodunu kullanıcıların cihazlarında yürütebilmek için özel bir JavaScript motoru bulunur.

<span class="mw-page-title-main">C++</span> bir programlama dili

C++, Bjarne Stroustrup tarafından 1979 yılında Bell Laboratuvarları'nda geliştirilmeye başlanmış, C'yi kapsayan ve çok paradigmalı, yaygın olarak kullanılan, genel amaçlı bir programlama dilidir.

<span class="mw-page-title-main">Yazılım</span> bilgisayarın somut olmayan çalıştırılabilir bileşeni

Yazılım, değişik ve çeşitli görevler yapma amaçlı tasarlanmış elektronik aygıtların birbirleriyle haberleşebilmesini ve uyumunu sağlayarak görevlerini ya da kullanılabilirliklerini geliştirmeye yarayan makine komutlarıdır.

ASP.NET, Microsoft tarafından geliştirilmiş olan bir açık kaynak Web uygulama gelişimi teknolojisidir. Dinamik Web sayfaları, Web uygulamaları ve XML tabanlı Web hizmetleri geliştirilmesine olanak sağlar. Aynı işletme tarafından geliştirilen .NET çatısı'nın yazılım iskeleti parçası ve artık işletmece desteklenmeyen ASP teknolojisinin devamını teşkil etmiştir.

Paralel hesaplama ya da Koşut hesaplama, aynı görevin, sonuçları daha hızlı elde etmek için çoklu işlemcilerde eş zamanlı olarak işletilmesidir. Bu fikir, problemlerin çözümünün ufak görev parçalarına bölünmesi ve bunların eş zamanlı olarak koordine edilmesine dayanır. Paralel hesaplama ile performans artar, büyük sorunlar daha az sürede çözülür ve bilimdeki gelişmeler paralel hesaplamaya gereksinim duyar.

ABAP,İngilizce Advanced Business Application Programming kelimelerinin baş harflerinden oluşan bir kısaltmadır ve Alman yazılım şirketi SAP tarafından geliştirilen üst seviye bir nesne tabanlı programlama dilidir. SAP'nin iş uygulamaları geliştirmek için kullanılan NetWeaver platformunun parçası olan Web Uygulama Sunucusu'nu programlamak amacıyla kullanılır. Sözdizimi COBOL'a benzemektedir.

<span class="mw-page-title-main">Sun Microsystems</span>

Sun Microsystems, merkezi Santa Clara, Kaliforniya'daki Silikon Vadisi olan, 24 Şubat 1982 tarihinde kurulmuştur. Bilgisayar ve bilgisayar parçaları, yazılım ve bilgi teknolojileri de dahil olmak üzere birçok alanda üretim ve satış yapan şirkettir.

Grafik işlemci biriminde genel amaçlı hesaplama ya da sıkça kullanılan İngilizce kısaltmasıyla GPGPU, alışılagelmiş yöntemlerde merkezî işlem birimi (CPU) üzerinde yapılan hesaplamaların, alışılagelmiş yöntemlerde sadece grafik hesaplamalarını yapan bilgisayarın grafik işlemci birimi (GPU) üzerinde yapılmasıdır. Ekrana grafik çizilmesi işleminin doğası gereği, modern grafik işlemcileri çok çekirdeklidir ve yüksek bir paralelliğin açığa çıkartılmasına olanak sağlayabilirler. Grafik işlemcisi üzerinde hesaplama yapılması; paralel doğadaki algoritmalarda çok ciddi performans artışları sağlayabilmektedir. Özellikle heterojen işlem teknikleriyle GPGPU ve diğer platformlar arası işbirliği sağlanıp çok daha etkin programlar yazılabilmektedir.

Standart Performans Ölçüm Kurumu(Standard Performance Evaluation Corporation ) amacı bilgisayarların başarımlarını ölçebilen dürüst, tarafsız ve anlamlı denektaşları üretmek olan; kâr amacı gütmeyen bir şirkettir. Kuruluş yılı 1988’dir. Üyeleri arasında önde gelen bilgisayar ve yazılım şirketleri yer almaktadır. Günümüzde SPEC’in değerlendirmeleri bilgisayar sistemlerinin geliştirilmesinde yaygın olarak kullanılmaktadır. Bu değerlendirmeler kurumun internet sitesinde yayımlanmaktadır. Değerlendirme sonuçları gayri resmi olarak “SPECmarks” veya “SPEC” olarak anılmaktadır.

Denektaşı(sınama programı); Bilgisayar mimarisinde bir bileşenin başarımını, o bileşen üzerinde çeşitli sınamalar yaparak ölçmek için çalıştırılan bir veya bir grup bilgisayar programıdır. Denektaşları ile bilgisayarın bir donanımının karakteristik bir özelliğinin başarımının belirlenmesinde de kullanılır. Örneğin Merkezi İşlem Biriminin (MİB[CPU]) kayan nokta işlemlerindeki başarımını ölçmek için kullanılır. Ayrıca bazı durumlarda bu sınama yazılımların başarımı için de kullanılabilir. Yazılımlar için kullanılan denektaşlarına örnek olarak derleyiciler ya da veritabanı yönetim sistemlerinin başarımlarını ölçen programlar verilebilir.

<span class="mw-page-title-main">Android</span> Mobil işletim sistemi

Android, Google ve Open Handset Alliance tarafından, cep telefonları, tabletler ve televizyonlar için geliştirilmekte olan, Linux tabanlı, özgür ve ücretsiz bir işletim sistemidir. Sistem açık kaynak kodlu olsa da, kodlarının ufak ama çok önemli bir kısmı Google tarafından kapalı tutulmaktadır. Google tarafından ücretsiz sunulmasının sebebi, sistemin daha hızlı ve çabuk gelişmesi, birçok popüler marka tarafından kullanılması ve bu sayede reklamlarının daha fazla kişiye ulaşmasını sağlamaktır. Google, Android sistemi üzerinde çalışan Google Play marketteki oyun ve uygulamalar üzerinde aldığı reklamları yayınlayarak para kazanmaktadır. Android'in desteklenen uygulama uzantısı ".apk"dır.

CUDA, GPU için NVIDIA'nın sunduğu C programlama dili üzerinde eklenti olarak kullanıma sunulan bir mimari ve teknolojidir.

Karesel gölgelendirme anlamına gelen Pixel Shader DirectX 9 ve üzeri oyun grafik kütüphanesinde bulunan grafik işleme komut fonksiyonudur. Yeni nesil olarak tanımlanan birçok oyunda bu özellik şartı aranıldığı için bir önceki nesil ekran görüntü kartları bu özelliği desteklemediği için birçok oyun yazılımı çalışmama durumu yaşanmaktadır.

Khronos Group, Inc., 3D grafikler, sanal gerçeklik, artırılmış gerçeklik, paralel hesaplama, görüntü hızlandırma ve makine öğrenimi için telifsiz birlikte çalışabilirlik standartları geliştiren, yayınlayan ve sürdüren 160 kuruluştan oluşan açık, kar amacı gütmeyen, üye odaklı bir konsorsiyumdur. Açık standartlar ve ilgili uygunluk testleri, yazılım uygulamalarının ve ara katman yazılımının, çok çeşitli platformlarda ve cihazlarda dinamik medyanın yazılmasını ve hızlandırılmasını sağlar. Grubun merkezi Beaverton, Oregon'dadır.

<span class="mw-page-title-main">WebGL</span>

WebGL, kâr amacı gütmeyen teknoloji şirketler birliği Khronos Group tarafından yönetilen, web ortamında 3 boyutlu grafik çizimi sağlanmasını amaçlayan bir web standardıdır. OpenGL ES 2.0 üzerine temellendirilmiştir, otomatik hafıza yönetimli JavaScript gibi dillere uyum sağlaması için küçük değişikliklere uğramış olsa da WebGL OpenGL ES'ten çok da farklı değildir. Uyumlu web tarayıcısında herhangi bir eklenti kurulmasını gerektirmeden, HTML5'in Canvas elementi üzerinde 3 boyutlu grafik çizimi yapılmasını mümkün kılmaktadır.

<span class="mw-page-title-main">OpenMP</span>

OpenMP; Solaris, IBM AIX, HP-UX, GNU/Linux, MAC OS X ve Windows işletim sistemleri üzerinde çoğu işlemci mimarisi üzerinde Fortran, C++, C programlama dillerinde çoklu platform paylaşımlı bellek çoklu işlemeyi destekleyen bir uygulama geliştirme arayüzüdür, yani bir API'dir. OpenMP derleyici yönergelerinin kütüphane rutinlerini ve ortam değişkenlerinin çalışma zamanı davranışını etkileyen bir kümesini içerir.

Vulkan düşük maliyetli ve Çapraz platform 3D grafik ve işlem API-sidir. İlk kez Khronos Group tarafından GDC 2015'te açıklandı. Vulkan API başlangıçta, Khronos tarafından yeni nesil "OpenGL girişimi" veya "OpenGL-in sonrakısı" olarak sevk edildi. Vulkan, AMD'nin Mantle API bileşenleri üzerine türetilmiş ve inşa edilmiştir. Khronos'a, bir vakıf niyetiyle AMD tarafından bağışlanmıştır. OpenGL gibi, Vulkan da yüksek performanslı video oyunu ve interaktif medya gibi, gerçek zamanlı 3D grafik uygulamalara hedeflenir ve Direct3D 12 ve Mantle gibi, daha yüksek performans ve daha düşük CPU kullanımı sunuyor. Vulkanın ayrıca 2D grafik uygulamaları işlemek için yeteneği vardır, ancak genellikle 3D için uygundur. Alt CPU kullanımı yanı sıra, Vulkan da daha Çok çekirdekli işlemciler arasında eser yapabiliyor.

Gömülü yazılım, denetim makineleri ve bilgisayar sayılmayan aygıtlar için yazılmış yazılımlardır. Gömülü yazılımlar genellikle çalıştırılacakları donanıma göre özelleştirilir, zaman ve bellek kısıtlamalarına sahiptir. "Gömülü yazılım" terimi bazen firmware terimi ile beraber kullanılır, fakat firmware bir bilgisayardaki, üstünde bir işletim sisteminin çalıştığı ROM tabanlı koda uygulanabilir. Oysaki, gömülü yazılım genellikle aygıttaki tek yazılım olarak bulunur.

<span class="mw-page-title-main">XNU</span>

XNU, MacOS işletim sisteminde kullanılmak üzere Aralık 1996'dan beri Apple'da geliştirilen ve Darwin işletim sisteminin bir parçası olarak ücretsiz ve açık kaynaklı yazılım olarak piyasaya sürülen bilgisayar işletim sistemi çekirdeğidir. Ayrıca, iOS, tvOS ve watchOS işletim sistemlerinin çekirdeği olarak da kullanılır. XNU, "X Not Unix"'in bir kısaltmasıdır.

Cocoa, masaüstü işletim sistemi macOS için Apple'ın yerel nesne yönelimli programlama ve uygulama programlama arayüzüdür (API).