Ticarette OpenCL

 

OpenCL, CPU'lar, GPU'lar ve diğer özel işlemciler veya donanımsal hızlandırıcılar gibi çeşitli donanım platformlarında çalışabilen programlar yazmaya yönelik açık kaynaklı bir çerçevedir. Bu, yazılım geliştiricilerin, satıcıdan veya mimariden bağımsız olarak birden fazla cihazda çalışabilecek kodlar yazmasına olanak tanır.

OpenCL API ve çalışma zamanı, belirli bir platform bağımsızlığı sunarak, OpenCL özellikli herhangi bir cihazda çalışabilecek kodların oluşturulmasını mümkün kılar. Ayrıca, geliştiricilerin cihaz, bellek ve çekirdek yürütmesini açık bir şekilde denetlemesine ve böylece uygulamaları üzerinde ayrıntılı kontrole sahip olmasına olanak sağlayan bir dizi düşük seviyeli API’ler de sağlanmaktadır.

OpenCL, bilimsel hesaplama, görüntü ve video işleme, makine öğrenimi vb. alanlarda yaygın olarak kullanılmaktadır. Çok sayıda cihazın paralel işlem gücünden yararlanarak uygulamaların daha hızlı ve daha verimli yürütülmesine olanak sağlar.

OpenCL'in en önemli avantajlarından biri, CPU'lardan çok daha hızlı hesaplamalar yapılmasına imkan tanıyan GPU'ların işlem gücünden yararlanabilmesidir. Bu da onu özellikle bilimsel modelleme, görüntü ve video işleme ve makine öğrenimi gibi ağır hesaplamalar gerektiren uygulamalar için kullanışlı hale getirmektedir. 

OpenCL, farklı hesaplama cihazlarının gücünden yararlanabilen uygulamalar geliştirmek adına esnek bir çerçeve sunarak yüksek performanslı hesaplama uygulamaları geliştirenler için değerli bir araç haline gelmektedir.


MQL5, 2012'den beri OpenCL'i desteklemektedir. Daha fazla ayrıntı için lütfen MQL5 Referansından OpenCL ile Çalışma bölümüne bakın. Ayrıca bakınız: OpenCL Programlarıyla Çalışmak için Sınıf.

OpenCL kullanımına ilişkin örnekler MQL5\Scripts\Examples\OpenCL klasöründe bulunmaktadır.

MetaTrader 5'te OpenCL örnekleri

Aşağıda, MQL5'te bir OpenCL Seascape örneği yer almaktadır:




İlgili makaleler:

 

OpenCL'ye Giriş



OpenCL'ye Giriş (1)

OpenCL'ye Giriş videosu, OpenCL'yi CPU'lar, GPU'lar ve FPGA'lar dahil olmak üzere birden çok cihaz türünü destekleyen, yüksek performanslı heterojen veri paralel hesaplama için düşük seviyeli bir dil olarak tartışır. OpenCL 2008'de açık bir standart haline geldi ve Intel, Nvidia ve AMD gibi şirketlerden önemli endüstri desteği aldı. OpenCL genellikle Nvidia'dan daha iyi araçlara, özelliklere ve desteğe sahip olan CUDA ile karşılaştırılırken, OpenCL daha fazla cihazı destekleyerek üreticiler arasında daha yaygın hale getirir. Kişisel projeler için konuşmacı, daha iyi araçları ve optimizasyonu için CUDA'nın kullanılmasını önerirken, farklı GPU'ları desteklemesi gereken profesyonel ürünler için OpenCL önerilir.

  • 00:00:00 Bu bölümde konuşmacı, OpenCL'yi yüksek performanslı heterojen veri-paralel hesaplama için düşük seviyeli bir dil olarak tanıtıyor. OpenCL, CPU'lar, GPU'lar ve FPGA'lar dahil olmak üzere birden çok aygıt türünü destekleyebilir ve aygıtlar arasında taşınabilirliğe izin veren C 99'u temel alır. OpenCL ayrıca vektörleri ifade etmek için tutarlı bir yol sağlar ve paylaşılan matematik kitaplıklarına ve garantili kesinlik sağlayan bir OpenCL sertifika sürecine sahiptir. Konuşmacı, OpenCL'nin 2008'de açık bir standart haline geldiğini ve Intel, Nvidia ve AMD gibi şirketlerin yanı sıra Ericsson, Nokia ve Texas Instruments gibi gömülü cihaz üreticilerinden önemli endüstri desteği aldığını belirtiyor. OpenCL genellikle Nvidia'dan daha iyi araçlara, özelliklere ve desteğe sahip olan CUDA ile karşılaştırılırken, OpenCL daha fazla cihazı destekleyerek üreticiler arasında daha yaygın hale getirir.

  • 00:05:00 Bu bölümde konuşmacı, CUDA ile OpenCL arasındaki farkları ve farklı amaçlar için birini diğerine tercih etmenin ne zaman gerekli olduğunu tartışıyor. Konuşmacı, kişisel projeler için daha iyi araçları, hata ayıklayıcıları ve optimizasyonları için CUDA kullanılmasını önerir. Bununla birlikte, farklı GPU'ları desteklemesi gereken profesyonel ürünler için, konuşmacı, Nvidia olmayan GPU'ları desteklemenin tek yolu olduğu ve aynı zamanda birkaç şirketin desteğiyle gelişen OpenCL kullanılmasını önerir. Kursa gelince, konuşmacı daha iyi araçlar ve kolaylaştırılmış kodlama için CUDA'nın kullanılmasını önerir, ancak OpenCL'nin kullanımı tüm bilgi işlem kaynaklarından yararlanmak için daha kolay olabilir.
Introduction to OpenCL (1)
Introduction to OpenCL (1)
  • 2016.04.06
  • www.youtube.com
Introduction to OpenCL: What is it, what is it good for, how does it compare to CUDA.
 

OpenCL Ne İşe Yarar?



OpenCL Ne İşe Yarar? (2)

Videodaki konuşmacı, paralel veri ve tek duyarlıklı hesaplama açısından yoğun programlar için OpenCL kullanmanın avantajlarından bahsediyor. GPU'lar grafikler için tasarlanmıştır ve matematik işlemlerinin bellek işlemlerine oranının yüksek olması nedeniyle idealdir. Konuşmacı, daha yüksek yoğunluklu döngülerin matematik işlemleri yapmak için daha fazla zaman harcadığını, GPU'ların üstün olduğu yerlerde, düşük yoğunluklu döngülerin ise zamanlarının çoğunu bellek erişimini bekleyerek geçirdiğini açıklıyor. Birçok veri üzerinde aynı bağımsız işlemleri gerçekleştirmeyi içeren veri paralelliği de bu bölümde incelenmektedir. Konuşmacı ayrıca OpenCL'de tek ve çift kesinliğin kullanımını tartışıyor; burada çift kesinlik, tek kesinliğe göre iki kat daha fazla veri gerektirdiği için yürütmenin daha pahalıdır.

  • 00:00:00 Bu bölümde, konuşmacı OpenCL'nin veri paralel ve tek duyarlıklı hesaplama açısından yoğun programlar için iyi olduğunu açıklıyor. GPU'lar grafikler için tasarlanmıştır ve bu tür programlar için iyidir çünkü hesaplama açısından yoğundurlar ve matematik işlemlerinin bellek işlemlerine oranı yüksektir. Matematik hızlıdır ve bellek yavaştır, bu nedenle çok sayıda matematik işlemine sahip olmak makineyi meşgul ederken bellek erişimleri makineyi yavaşlatır. Konuşmacı, düşük yoğunluklu döngülerin zamanlarının çoğunu belleği bekleyerek geçirdiğini, oysa daha yüksek yoğunluklu döngülerin GPU'ların üstün olduğu nokta olan matematik işlemlerini yapmak için daha fazla zaman harcadığını açıklıyor. Birçok veri üzerinde aynı bağımsız işlemleri yapmak anlamına gelen veri paralelliği de bu bölümde incelenmektedir. Örnekler, bir görüntüdeki pikselleri değiştirmeyi veya bir ızgaradaki noktaları güncellemeyi içerir.

  • 00:05:00 Bu bölümde, konuşmacı veri paralel yürütmenin OpenCL'de nasıl çalıştığını açıklıyor. Esasen birçok veri üzerinde bağımsız işlemler içerdiğini ve buna veri paralel yürütme dendiğini belirtir. Konuşmacı, bu tür yürütmenin, farklı renkli pikseller üzerinde işlemler gerçekleştirirken meydana gelebilecekler gibi, veriler üzerinde yapılan hesaplamalardaki farklılıklar nedeniyle performans kaybına neden olabileceğini açıklamaya devam eder. Daha sonra OpenCL'de tek ve çift kesinliğin kullanımını tartışıyor ve çift kesinliğin tek kesinliğe göre iki kat daha fazla veri gerektirdiğini ve bu nedenle yürütmenin daha pahalı olduğunu belirtiyor.
What is OpenCL Good for? (2)
What is OpenCL Good for? (2)
  • 2016.04.06
  • www.youtube.com
Overview of the kind of problems OpenCL is good at accelerating: computational intensity, parallelism.
 

OpenCL'de Yerel ve Küresel Boyutlar



OpenCL'de Yerel ve Küresel Boyutlar (3)

Bu video, OpenCL'deki global ve yerel boyutlar kavramını ve bunların kod yürütmede paralelliği belirtmek için nasıl kullanıldığını ele alıyor. Genel boyut, her çekirdek yürütmesi için yürütülecek iş parçacığı veya iş öğelerinin sayısını belirleyen bir 1B, 2B veya 3B dizidir. Örneğin, global boyut bin noktadan oluşan bir 3B diziyse, her noktanın yürütülen bir iş parçacığı veya iş öğesi olacaktır. Bu arada, yerel boyut, küresel boyutu yerel çalışma gruplarına veya birlikte çalışan iş parçacığı gruplarına bölerek senkronizasyonu kolaylaştırır. Senkronizasyona yalnızca aynı çalışma grubu içinde izin verilir, bu da gerekli senkronizasyona izin veren yerel boyutların seçilmesini kritik hale getirir. Özetlemek gerekirse, genel boyut, her bir çekirdek yürütmesi için iş parçacığı veya iş öğelerinin sayısını belirlerken, yerel boyut, küresel boyutu senkronizasyonu etkinleştiren çalışma gruplarına ayırır. Yalnızca aynı çalışma grubu içinde gerçekleşebileceği göz önüne alındığında, uygun yerel boyutların seçilmesi senkronizasyon için çok önemlidir.

Local and Global Dimensions in OpenCL (3)
Local and Global Dimensions in OpenCL (3)
  • 2016.04.06
  • www.youtube.com
How to specify parallelism in OpenCL kernels with global dimensions and local dimensions. How to choose the right dimensions.
 

OpenCL'de yerel boyutlarla ilgili sorunlar



OpenCL'de yerel boyutlarla ilgili sorunlar (4)

Video, senkronizasyon sınırlamaları ve cihaz kullanımı dahil olmak üzere OpenCL'deki yerel boyutlarla ilgili çeşitli sorunları araştırıyor. Senkronizasyon, GPU'daki aynı çalışma grubuyla sınırlıdır ve genel senkronizasyon pahalıdır ve yalnızca çekirdek yürütmesinin sonunda kullanılabilir. Doğru yerel çalışma grubu boyutunu seçmek, donanım israfını önlemek için çok önemlidir ve konuşmacı, fiziksel donanım boyutunun güzel katları olan boyutların seçilmesini önerir. Video, optimum performans için en iyi boyutları bulmaya yönelik bir deneme yanılma yaklaşımı önererek sona eriyor.

  • 00:00:00 Bu bölümde video, OpenCL'de yerel boyutları seçerken senkronizasyon ve cihaz kullanımıyla ilgili iki konuyu araştırıyor. Yerel çalışma grubu boyutu, kod karmaşıklığına bağlı olarak 1024'e kadar olmak üzere 512 iş parçacığı ile sınırlıdır ve senkronizasyon yalnızca aynı çalışma grubu içinde gerçekleşebilir. Video, senkronizasyonun nasıl çalıştığını ve çalışma grubu boyutlarının getirdiği sınırlamaları göstermek için bir küçültme uygulaması kullanıyor. Video, sınırlı senkronizasyon kabiliyetini GPU ölçeklenebilirlik gereksinimlerine ve çipin herhangi bir yerinde keyfi senkronizasyonu destekleme maliyetine bağlar.

  • 00:05:00 Bu bölümde video, OpenCL'deki yerel boyutlarla ilgili sorunları araştırıyor. İlk örnek, dönüş kilitlerinin kullanılmasının, programlayıcının ileriye doğru ilerleme garantilerinin olmaması nedeniyle nasıl bir kilitlenmeye neden olabileceğini gösterir. Video ayrıca, küresel senkronizasyonun yalnızca çekirdek yürütmenin sonunda yapılabileceğini, bunun pahalı hale geldiğini ve programcıları algoritmalarını dikkatli bir şekilde planlamaya zorladığını açıklıyor. Başka bir sorun, yerel çalışma grubu boyutları bilgi işlem birimlerinin boyutuyla eşleşmediğinde cihaz kullanımıdır. Bu, donanım parçalarının boşa harcanmasına neden olur ve bu sorunu önlemek için programcıların sorun için iyi çalışan ve donanım boyutuyla güzel bir şekilde eşleşen boyutları seçmesi gerekir.

  • 00:10:00 Bu bölümde, konuşmacı OpenCL'de yerel boyutların seçimini etkileyen faktörleri tartışıyor. Bir GPU'da, video 64 ve AMD için 16 veya 3.200 gibi, fiziksel donanım boyutunun güzel katlarında 2.000'den fazla iş öğesine sahip olmanın en iyisi olduğunu açıklıyorlar. CPU'lar için iki kat daha fazla CPU çekirdeğine sahip olmak en iyisidir, ancak bu, kullanılan algoritmalara bağlı olarak değişebilir. Konuşmacı, en iyi performans elde edilene kadar deneme yanılma önerir.
Issues with local dimensions in OpenCL (4)
Issues with local dimensions in OpenCL (4)
  • 2016.04.06
  • www.youtube.com
Handling reductions with local dimensions and problems with spin locks and device utilization on GPUs.
 

OpenCL Bilgi İşlem Çekirdekleri



OpenCL Bilgi İşlem Çekirdekleri (5)

Eğitmen, OpenCL çekirdeklerinin paralel hesaplama için kullanılan C99 kodu olduğunu açıklar. Çekirdekler binlerce kez paralel olarak yürütülür ve hesaplamanın iç döngüsüdür. Vektörler, hassas yuvarlama ve dönüştürmeler ve içsel işlevler gibi OpenCL özellikleri doğruluğu garanti eder. OpenCL'nin yardımcı işlevleri, kimlik, boyutlar ve grup kimlikleri gibi iş öğeleri hakkında bilgi sağlayarak, ayarlanabilen esnek çekirdeklerin oluşturulmasına olanak tanır. Bununla birlikte, OpenCL kitaplık işlevlerinin kullanılması, tercih ve kesinliğin değiş tokuş edilmesi anlamına gelir çünkü paralel kod işlemi yeniden sıralaması, yürütme sırasını etkileyebilir ve sonuçları değiştirebilir, bu da tüm cihazlarda deterministik yürütmeyi imkansız hale getirir.

  • 00:00:00 Bu bölümde eğitmen, OpenCL çekirdeklerinin temelde sadece C99 kodu olduğunu ve paralel olarak yapılacak hesaplamaları belirtmek için kullanıldığını açıklar. Kod binlerce kez paralel olarak yürütülür ve hesaplamanın iç döngüsüdür. Eğitmen daha sonra bir C işlevi örneği ve bunun OpenCL çekirdekleri kullanılarak paralel olarak nasıl çalıştırılabileceğini verir. Ayrıca OpenCL'nin vektörler, yuvarlama ve dönüştürmeleri kontrol etme açık yeteneği ve garantili doğrulukla gelen içsel işlevler gibi bazı özelliklerinden de bahsediyor. OpenCL'nin yardımcı işlevleri ayrıca, iş öğesi kimliği, boyutlar, belirli bir boyuttaki maksimum sayı ve grup kimlikleri gibi her iş öğesi hakkında bilgi verir; bu, hangi işi yapmaları gerektiğini anlama konusunda akıllı olabilecek esnek çekirdekler yazmaya yardımcı olur. . Genel olarak OpenCL, garantili kullanılabilirlik ve hassasiyet sağlayarak taşınabilir ve performanslı kod oluşturma yeteneğini geliştirir.

  • 00:05:00 Bu bölümde konuşmacı, OpenCL uyumlu kitaplık işlevlerini kullanırken tercih ve kesinlik arasındaki ödünleşimi açıklıyor. Bu işlevler test edildiğinde kesinliği garanti etse de, uygulamaların tüm OpenCL makinelerinde mutlaka aynı sonuçları üreteceği anlamına gelmez. Bunun nedeni, derleyicinin işlemleri paralel kodda yeniden sıralayabilmesi, yürütme sırasını etkilemesi ve muhtemelen nihai sonuçları değiştirmesidir. Bu nedenle, bu kitaplık işlevleri üzerinde kod oluşturma tercih edilirken, tüm cihazlarda deterministik yürütme garanti edilemez.
OpenCL Compute Kernels (5)
OpenCL Compute Kernels (5)
  • 2016.04.06
  • www.youtube.com
How to write compute kernels in OpenCL for parallelism, OpenCL utility functions and intrinsics.
 

OpenCL Çalışma Zamanı Mimarisi



OpenCL Çalışma Zamanı Mimarisi (6)

Video, bir bellek veri yolu üzerinden bağlanan GPU'lar ve CPU'lar gibi aygıtlar dahil olmak üzere OpenCL platformunun mimarisini tartışıyor. OpenCL bağlamları, bir platform içindeki cihazların gruplandırılması olarak da açıklanır ve bunlar arasında optimize edilmiş veri aktarımına izin verir. Komut kuyrukları, farklı cihazlara iş göndermek için bir araç olarak tanıtıldı, ancak otomatik dağıtım olmadığı için işin cihazlar arasında dağılımının manuel olarak yapılması gerekiyor.

OpenCL Runtime Architecture (6)
OpenCL Runtime Architecture (6)
  • 2016.04.06
  • www.youtube.com
OpenCL architecture: devices, queues, contexts, compute units, data transfer and utilizing multiple devices.
 

OpenCL'de Veri Taşıma



OpenCL'de Veri Taşıma (7)

Video, OpenCL'deki veri hareketini tartışıyor; burada konuşmacı, ana bilgisayar belleği ile GPU arasında verileri kopyalamak için gereken manuel adımları ve genel ve yerel bellek arasındaki hız farkını açıklıyor. GPU'daki genel bellek daha hızlı erişime sahiptir, ancak ana bilgisayar belleğinden GPU'ya veri almak yavaştır. OpenCL'deki yerel bellek, büyük bant genişliğiyle gelişmiş performans sağlayabilir, ancak manuel ayırma gerektirdiğinden kullanımı önbelleklerden daha zordur. Modern Nvidia GPU'ları, yerel veri hareketi için optimize etmeden önce bir önbellekle başlamak için önerilen yaklaşımla, yerel belleği manuel olarak yönetme veya bunun yerine önbellek olarak kullanma arasında seçim yapma seçeneği sunar.

  • 00:00:00 Bu bölümde, konuşmacı OpenCL'de veri hareketinin nasıl çalıştığını ve verileri ana bilgisayar belleğinden GPU'ya ve geri kopyalamak için gereken manuel adımları tartışıyor. GPU, ana bilgisayar belleğinden çok daha hızlı erişime sahip genel belleğe sahiptir, ancak ana bilgisayar belleğinden GPU'ya veri almak, PCIe veri yolu nedeniyle yavaştır. GPU'nun ayrıca muazzam bant genişliğine sahip yerel belleği vardır ve bunu kullanmak performansı önemli ölçüde artırabilir. Ancak, verilerin yerel belleğe tahsis edilmesi ve kopyalanmasının her bir bilgi işlem biriminde manuel olarak yapılması gerekir, bu da onu külfetli bir görev haline getirir.

  • 00:05:00 Bu bölümde konuşmacı, OpenCL'de 16 ila 48 kilobayt arasında değişebilen yerel bellekten ve nasıl saniyede binlerce gigabaytlık daha yüksek bant genişliği sağlayabileceğinden bahsediyor. Bununla birlikte, yerel belleği kullanmak önbelleklerden daha zordur çünkü önbellekler, belleğin farklı bölümlerini farklı veriler için ayırmaya gerek kalmadan en son kullanılan verileri otomatik olarak yerleştirirken, yerel bellek manuel ayırma gerektirir. Modern Nvidia GPU'ları, yerel veri hareketi için optimize etmeden önce bir önbellekle başlamak için önerilen yaklaşımla, yerel belleği manuel olarak yönetme veya önbellek olarak kullanma arasında seçim yapılmasına izin verir.
Data Movement in OpenCL (7)
Data Movement in OpenCL (7)
  • 2016.04.06
  • www.youtube.com
Host to device transfer speeds, local memory.
 

OpenCL Merhaba Dünya



OpenCL Merhaba Dünya (8)

Bu videoda OpenCL kullanarak program oluşturma ve GPU cihazına gönderme işlemi anlatılmaktadır. Konuşmacı, programı oluşturma, çekirdekler ve bellek nesneleri oluşturma ve CPU ile GPU arasında veri kopyalama adımlarını anlatır. Ayrıca, çekirdek bağımsız değişkenlerini ve boyutlarını belirleme, çekirdeği yürütme ve sonuçları GPU'dan alma sürecini de açıklarlar. Konuşmacı, karmaşık çekirdeklerin hem CPU hem de GPU'da optimum performansı vermeyebileceğini ve performansı artırmak için düzeltilmesi gerekebileceğini belirtiyor. OpenCL'deki programlama sürecini, istenen sonuca ulaşılana kadar işlemlerin tekrarlandığı bir matematik problemini çözmeye benzetiyorlar.

  • 00:00:00 Bu bölümde, konuşmacı OpenCL'yi kurmak ve onu kullanarak bir program oluşturmak için gerekli adımları açıklıyor. İlk olarak, cihazların ve platformların ayarlanması ve komutların yürütülmesi için bir bağlamın oluşturulması gerekir. Ardından, işi farklı cihazlara göndermek için komut kuyrukları oluşturulur. Kod daha sonra kuyruklara gönderilebilecek çekirdek nesneleri elde etmek için derlenir. Aygıtlar arasında veri alışverişi yapmak için bellek nesneleri oluşturulur ve çekirdek için argümanlar ayarlanır. Çekirdek daha sonra yürütme için kuyruğa alınır ve veriler cihazdan CPU'ya geri kopyalanır. Son olarak, tüm komutların tamamlanması gerekir ve verilerin beklendiği gibi döndürüldüğünden emin olmak için bir bekleme uygulanır. Konuşmacı ayrıca cihazları kullanarak sinüs x'i paralel olarak hesaplayan örnek bir OpenCL Hello World programını da anlatıyor.

  • 00:05:00 Videonun bu bölümünde konuşmacı, OpenCL kullanarak bir program oluşturma ve onu bir GPU cihazına gönderme sürecini açıklıyor. İlk seferinde daha uzun süren ancak sonraki seferler sürmeyen programı oluşturarak başlarlar. Daha sonra CL create kernel'ı çağırarak programdaki belirli bir çekirdeğe bir çekirdek nesnesi oluştururlar. Bundan sonra, bir bellek nesnesi oluştururlar, cihazda bir alan tahsis ederler ve ardından kuyruk yazma arabelleğinde CL'yi kullanarak verileri CPU'dan GPU'ya kopyalarlar. Konuşmacı daha sonra çekirdek bağımsız değişkenlerini ve boyutlarını ayarlar ve Q. aralık çekirdeğinde CL'yi kullanarak çekirdeği çalıştırır. Son olarak, konuşmacı GPU'dan sonuçları alır ve CL finish'i çağırarak her şeyin bitmesini bekler. Konuşmacı, karmaşık çekirdeklerin hem CPU hem de GPU'da optimum performansı vermeyebileceğini ve performansı artırmak için düzeltilmesi gerekebileceğini belirterek bitiriyor.

  • 00:10:00 Bu bölümde konuşmacı, programlamanın genellikle istenen nihai çıktıya ulaşılana kadar belirli komutları tekrarlamayı içerdiğini açıklar. Bunu, doğru cevaba ulaşana kadar bir dizi işlemin tekrar tekrar yapılacağı bir matematik problemini çözmeye benzetiyor. Bu sürecin, programlama komutlarının istenen sonuca ulaşılana kadar birçok kez tekrarlandığı OpenCL kullanırken benzer olduğunu belirtiyor.
OpenCL Hello World (8)
OpenCL Hello World (8)
  • 2016.04.06
  • www.youtube.com
Writing a simple Hello World parallel program in OpenCL for GPUs: device setup, kernel compilation, copying data.
 

Daha Fazla OpenCL Özelliği



Daha Fazla OpenCL Özelliği (9)

Video, cihaz sorgulama, görüntü işleme ve olaylar gibi OpenCL'nin ek özelliklerini tartışıyor. Kullanıcılar, cihazlarıyla ilgili ayrıntıları öğrenmek için cl_get_device_info komutunu kullanabilir, ancak bu değerler her zaman tam olarak kesin olmayabilir. OpenCL'nin yerel 2B ve 3B görüntü türleri desteği, CPU'larda donanım desteği olmadan yavaş olabilir, ancak GPU'larda donanımla hızlandırılır. Eşzamansız komut yürütme ve birden çok aygıtla çalışırken, aralarında senkronizasyon gerektiren farklı aygıtlar için ipuçları görevi gören olaylar çok önemlidir. Konuşmacı, çekirdekleri ilgili olaylarla sıkıştırarak, çıktıyı kopyalayarak ve senkronizasyon sağlamak için olayları bekleyerek, Çekirdek B'nin çalışmadan önce Çekirdek A'nın bitmesini beklemesini sağlamak için olayların kullanımına ilişkin bir örnek sağlar.

  • 00:00:00 Bu bölümde konuşmacı, cihazları sorgulama, görüntüleri işleme ve OpenCL olayları dahil olmak üzere OpenCL'nin ek özelliklerini tartışır. Kullanıcılar, cl_get_device_info komutunu kullanarak cihazları sorgulayarak cihazları hakkında bilgi işlem birimi sayısı, saat frekansı, genel bellek boyutu ve daha fazlası gibi bilgileri öğrenebilir. Ancak konuşmacı, bu değerlerin istenildiği kadar kesin olmayabileceği konusunda uyarıyor. OpenCL, doğrusal olarak enterpolasyon yapılabilen, kenarların etrafına sarılabilen veya kenarlardan kenetlenebilen 2B ve 3B görüntü türlerini doğal olarak destekler. Bu özellikler GPU'larda donanım hızlandırmalıyken, donanım desteği olmayan CPU'larda yavaştır. Son olarak, eşzamansız komut yürütme ve birden çok aygıtla çalışırken olaylar önemlidir, çünkü farklı aygıtlar için işaretler birbirine göre eşzamansızdır ve bunlar arasında eşitleme gerektirir.

  • 00:05:00 Bu bölümde konuşmacı olayları ve bunların OpenCL'deki kullanımını açıklıyor. Her kuyruğa alma komutunun sonunda listedeki olay sayısı, bekleme listesi ve döndürülen olaylar olmak üzere üç şey bulunur. Kullanıcıların, çekirdeğin yapılıp yapılmadığını takip etmek ve öğrenmek için bir olay döndürmesine, başka şeylerin çekirdeğin bitmesini beklemesine ve hatta profil oluşturma bilgileri almasına izin verirler. Konuşmacı, GPU'daki B çekirdeğinin, çalıştırmadan önce CPU'daki A çekirdeğinin bitmesini ve çıktısını GPU'ya kopyalamasını beklediğinden emin olmak için olayların kullanılmasına ilişkin bir örnek sağlar. Çekirdeği bir olayla sıkıştırmayı, bir kopya yapmayı, bu olayı beklemeyi ve senkronizasyonu sağlamak için ikinci çekirdeğin kopya üzerinde beklemesini içerir.
More OpenCL Features (9)
More OpenCL Features (9)
  • 2016.04.06
  • www.youtube.com
System information, Image types, events.
 

OpenCL Performans İpuçları ve Özeti



OpenCL Performans İpuçları ve Özeti (10)

Video, veri aktarımlarını en aza indirmeyi, bellek erişimini optimize etmeyi, üretici-tüketici çekirdeklerini kullanmayı ve vektörleri ve hızlı matematik fonksiyonlarını kullanmayı içeren OpenCL performansını optimize etmeye yönelik ipuçlarını tartışıyor. Konuşmacı, GPU'lara uygun uygulamaların veri paralel olması, hesaplama açısından yoğun olması, küresel senkronizasyondan kaçınması, tek hassasiyetle rahat olması ve küçük önbelleklerle yönetilebilir olması gerektiğini vurguluyor. OpenCL ile performans düşüklüğü yaşanıyorsa, algoritmayı yeniden gözden geçirmek ve bellek yerini, paylaşılan veya yerel belleği optimize etmek ve iş öğeleri arasında gereksiz senkronizasyondan kaçınmak gerekli olabilir.

  • 00:00:00 Bu bölümde konuşmacı, verileri cihazda mümkün olduğu kadar uzun süre tutarak ve üretici-tüketici çekirdek zincirlerini kullanarak CPU ve GPU arasındaki veri aktarımlarını en aza indirme dahil olmak üzere OpenCL performansını optimize etmeye yönelik ipuçlarını tartışıyor. Konuşmacı ayrıca GPU'larda bellek birleştirme ve yerel belleği yönetme için optimize ederek bellek erişimini optimize etmenin önemini vurguluyor. Ek olarak konuşmacı, vektörlerin kullanımının belirli donanımlarda performansı artırabileceğini ve belirli matematik işlevlerinin hızlı veya yerel varyantlarını kullanmanın önemli bir hız artışıyla sonuçlanabileceğini belirtiyor. Son olarak konuşmacı, veri paralelliği, hesaplama açısından yoğun olma, küresel senkronizasyon gerektirmeme, tek hassasiyetle rahat ve küçük önbelleklerle yönetilebilirlik dahil olmak üzere GPU'lar için iyi bir eşleşme olan uygulamaların özelliklerini tartışır.

  • 00:05:00 Bu bölümde konuşmacı, OpenCL ile düşük performans yaşıyorsanız, algoritmanızı yeniden gözden geçirmeniz ve paralel işleme düzenine daha uygun olanı seçmeniz gerekebileceğini öneriyor. Bu, bellek konumunu optimize etmek, paylaşılan bellek veya yerel belleği kullanmak ve iş öğeleri arasında gereksiz senkronizasyondan kaçınmak için kodunuzun sırasını veya yapısını değiştirmeyi içerebilir.
OpenCL Performance Tips and Summary (10)
OpenCL Performance Tips and Summary (10)
  • 2016.04.06
  • www.youtube.com
OpenCL kernel and runtime performance optimizations, checklist for using OpenCL.