OpenCL - Vikipedi
İçeriğe atla
Ana menü
Gezinti
  • Anasayfa
  • Hakkımızda
  • İçindekiler
  • Rastgele madde
  • Seçkin içerik
  • Yakınımdakiler
Katılım
  • Deneme tahtası
  • Köy çeşmesi
  • Son değişiklikler
  • Dosya yükle
  • Topluluk portalı
  • Wikimedia dükkânı
  • Yardım
  • Özel sayfalar
Vikipedi Özgür Ansiklopedi
Ara
  • Bağış yapın
  • Hesap oluştur
  • Oturum aç
  • Bağış yapın
  • Hesap oluştur
  • Oturum aç

İçindekiler

  • Giriş
  • 1 OpenCL C Dili
  • 2 OpenCL Çalışma Mantığı
    • 2.1 Kernel
    • 2.2 İş-Parçaları, İş-Öbekleri(Work-item,Work-group)
    • 2.3 OpenCL Paralel İşleme Mantığı
    • 2.4 OpenCL Çalışma Dizi Toplama Örneği
  • 3 Ayrıca bakınız
  • 4 Dış bağlantılar
  • 5 Kaynakça

OpenCL

  • العربية
  • Български
  • Català
  • Čeština
  • Deutsch
  • English
  • Español
  • Eesti
  • Euskara
  • فارسی
  • Suomi
  • Français
  • İtaliano
  • 日本語
  • 한국어
  • Nederlands
  • Norsk bokmål
  • Polski
  • Português
  • Русский
  • Slovenčina
  • Српски / srpski
  • Svenska
  • ไทย
  • Українська
  • 中文
Bağlantıları değiştir
  • Madde
  • Tartışma
  • Oku
  • Değiştir
  • Kaynağı değiştir
  • Geçmişi gör
Araçlar
Eylemler
  • Oku
  • Değiştir
  • Kaynağı değiştir
  • Geçmişi gör
Genel
  • Sayfaya bağlantılar
  • İlgili değişiklikler
  • Kalıcı bağlantı
  • Sayfa bilgisi
  • Bu sayfayı kaynak göster
  • Kısaltılmış URL'yi al
  • Karekodu indir
Yazdır/dışa aktar
  • Bir kitap oluştur
  • PDF olarak indir
  • Basılmaya uygun görünüm
Diğer projelerde
  • Wikimedia Commons
  • Vikiveri ögesi
Görünüm
Vikipedi, özgür ansiklopedi
Bu maddedeki bilgilerin doğrulanabilmesi için ek kaynaklar gerekli. Lütfen güvenilir kaynaklar ekleyerek maddenin geliştirilmesine yardımcı olun. Kaynaksız içerik itiraz konusu olabilir ve kaldırılabilir.
Kaynak ara: "OpenCL" – haber · gazete · kitap · akademik · JSTOR
(Mart 2020) (Bu şablonun nasıl ve ne zaman kaldırılması gerektiğini öğrenin)
OpenGL ile karıştırılmamalıdır.
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

[değiştir | kaynağı değiştir]

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ığı

[değiştir | kaynağı değiştir]

Kernel

[değiştir | kaynağı değiştir]

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)

[değiştir | kaynağı değiştir]

İş-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ığı

[değiştir | kaynağı değiştir]

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

[değiştir | kaynağı değiştir]

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

[değiştir | kaynağı değiştir]
  • Derin öğrenme yazılımlarının karşılaştırılması

Dış bağlantılar

[değiştir | kaynağı değiştir]
  • http://www.khronos.org/opencl/9 Ağustos 2011 tarihinde Wayback Machine sitesinde arşivlendi.
  • http://www.khronos.org/registry/cl/29 Mayıs 2012 tarihinde Wayback Machine sitesinde arşivlendi.
  • http://www.opencldev.com/24 Haziran 2012 tarihinde Wayback Machine sitesinde arşivlendi.
  • http://developer.nvidia.com/opencl10 Haziran 2012 tarihinde Wayback Machine sitesinde arşivlendi.
  • http://developer.amd.com/zones/OpenCLZone/[ölü/kırık bağlantı]
  • https://developer.apple.com/softwarelicensing/agreements/opencl.html16 Nisan 2012 tarihinde Wayback Machine sitesinde arşivlendi.

Kaynakça

[değiştir | kaynağı değiştir]
  1. ^ "Arşivlenmiş kopya". 10 Ocak 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Ocak 2017. 
  • g
  • t
  • d
Paralel hesaplama
Genel
Yüksek başarımlı hesaplama · Kümesel hesaplama · Dağıtık hesaplama · Dağıtımlı hesaplama · Bulut bilişim · Grafik işlemci biriminde genel amaçlı hesaplama · Bilgisayar ağı
Koşutluk düzeyleri
Bit · Komut · Veri · Görev
İzlekler
Üst izlekleme · Yüksek izlekleme
Kuram
Amdahl yasası · Gustafson yasası · Karp-Flatt ölçütü · Yavaşlama · Hızlanma
Ögeler
İşlem · İzlek · Lif · PRAM · Buyruk penceresi · Dizi
Eşgüdüm
Çoklu işleme · Çoklu izlekleme · Bellek tutarlılığı · Ön bellek tutarlılığı · Engel · Eşzamanlılaştırma · Aşamalı uygulama denetimi
Programlama
Modeller (Gizli koşutluk · Açık koşutluk · Koşutzamanlılık)
Donanım
Flynn Sınıflandırması (SISD • SIMD • MISD • MIMD) · Boru hattı yöntemi · Çoklu işleme (Bakışımlı · Bakışımsız) · Bellek (NUMA · COMA · Dağıtık · Paylaşımlı · Dağıtık paylaşımlı) · SMT
MPP · Sayılüstü · Dizi işlemcisi · Süper bilgisayar · Beowulf
APIler
POSIX Threads · OpenMP · MPI · OpenCL · UPC · Intel İzlekleme Yapıtaşları · Boost.Thread · Evrensel Diziler · Charm++ · Cilk · CUDA · PVM
Sorunsallar
Olağanüstü koşutluk · Büyük Sorun · Yazılım durağanlığı  · Ölçeklenebilirlik  · Yarışma koşulları  · Deadlock  · Gerekirci algoritma
  • Kategori Kategori
  • Commons sayfası Paralel hesaplama
Otorite kontrolü Bunu Vikiveri'de düzenleyin
  • LCCN: sh2011002885
  • NLI: 987007599892205171
"https://tr.wikipedia.org/w/index.php?title=OpenCL&oldid=34569766" sayfasından alınmıştır
Kategoriler:
  • 2009 yazılımları
  • Uygulama programlama arayüzü
  • Çapraz platform yazılımları
  • Paralel hesaplama
  • Bilgisayar donanımları
  • Bilgisayar grafikleri
  • Ekran kartları
Gizli kategoriler:
  • Ek kaynaklar gereken maddeler Mart 2020
  • Ek kaynaklar gereken tüm maddeler
  • Webarşiv şablonu wayback bağlantıları
  • Ölü dış bağlantıları olan maddeler
  • LCCN tanımlayıcısı olan Vikipedi maddeleri
  • NLI tanımlayıcısı olan Vikipedi maddeleri
  • Sayfa en son 22.11, 31 Aralık 2024 tarihinde değiştirildi.
  • Metin Creative Commons Atıf-AynıLisanslaPaylaş Lisansı altındadır ve ek koşullar uygulanabilir. Bu siteyi kullanarak Kullanım Şartlarını ve Gizlilik Politikasını kabul etmiş olursunuz.
    Vikipedi® (ve Wikipedia®) kâr amacı gütmeyen kuruluş olan Wikimedia Foundation, Inc. tescilli markasıdır.
  • Gizlilik politikası
  • Vikipedi hakkında
  • Sorumluluk reddi
  • Davranış Kuralları
  • Geliştiriciler
  • İstatistikler
  • Çerez politikası
  • Mobil görünüm
  • Wikimedia Foundation
  • Powered by MediaWiki
OpenCL
Konu ekle