Ticarette OpenCL - sayfa 2

 

OpenCL 1.2: Üst Düzey Genel Bakış



OpenCL 1.2: Üst Düzey Genel Bakış

Ders, OpenCL 1.2'ye, standarda ve içindeki modellere üst düzey bir genel bakış sağlar.

Bu ders size heterojen bilgi işlem, OpenCL C ve OpenCL ile yüksek performanslı yazılım yazmayı öğrenmek için sağlam bir temel sağlar.

OpenCL 1.2: High-Level Overview
OpenCL 1.2: High-Level Overview
  • 2013.11.02
  • www.youtube.com
This is my first YouTube lecture. It provides a high-level overview of OpenCL 1.2, the standard, and the models within it. This lecture provides you with a...
 

OpenCL 1.2: OpenCL C



OpenCL 1.2: OpenCL C

OpenCL 1.2: OpenCL C ile ilgili bu videoda konuşmacı, OpenCL C'yi, sabit tip boyutları ve satır içi işlevler yeteneği gibi bazı önemli farklılıklarla, cihaz programlama için tasarlanmış bir C modifikasyonu olarak tanıtıyor. Bellek bölgelerini, vektörleri, yapıları ve çekirdekleri ve vektörleştirilmiş kodun nasıl elde edileceğini tartışırlar. Yerel ve sabit bellek kullanmanın önemini vurgularlar ve uzantıları kullanırken dikkatli olunmasını önerirler. Konuşmacı, optimum performans için OpenCL C'nin temel yapısını ve işleyişini anlamanın önemini vurgular ve izleyicileri OpenCL ve ilişkili modelleri öğrenmeye devam etmeye teşvik eder.

  • 00:00:00 Bu bölümde video, OpenCL cihaz programlama için ana dil olarak OpenCL C'yi tanıtıyor. OpenCL C, cihazları hedefleyen C programlama dilinin bir modifikasyonudur, ancak geleneksel C99'dan işlev işaretçilerinin ve özyinelemenin olmamasının yanı sıra işlev çağrılarının satır içine alınması olasılığını içeren bazı farklılıklar vardır. Bu farklılıkların bazılarına rağmen OpenCL C, C99'da olmayan bazı özelliklere sahip olduğu için C'nin bir alt kümesi değildir. Bu bölüm bellek bölgeleri, vektör işlemleri, yapılar, işlevler ve çekirdekler gibi bazı önemli temel bilgileri kapsar ve amaç, izleyicilerin OpenCL'yi verimli bir şekilde kullanmaya başlayabilmeleri için yeterli arka plan sağlamaktır.

  • 00:05:00 Bu bölümde OpenCL C ve C arasındaki farklar tartışılmaktadır. OpenCL C, ikinin tamamlayıcısını kullanan işaretli tamsayılar için somut bir temsil sağlarken, C bunu belirtmez. OpenCL C türleri, C'de bulunmayan veya daha az zarif bir şekilde uygulanan vektör ve görüntü türleri dahil olmak üzere sabit boyutlara sahiptir. Ek olarak OpenCL C, char, short, int ve long gibi integral türler için boyutları ve bunların imzalı boyutlarını tanımlar. ve imzasız sürümler. OpenCL C'de host ve cihaz tiplerinin farklılık gösterdiğini ve bunlar arasında doğru veri aktarımını sağlamak için ara yazılım veya kütüphaneler kullanılması gerektiğini unutmamak önemlidir.

  • 00:10:00 Bu bölümde, konuşmacı OpenCL C bellek modelini ve özel, sabit, yerel ve küresel gibi bellek bölgelerini belirtmek için anahtar sözcüklerin nasıl kullanıldığını tartışıyor. OpenCL C'de, bazı türler ana bilgisayar ve cihaz arasında iletişim kuramadığı için belleğin nerede olduğunu bilmek önemlidir. Konuşmacı ayrıca vektör kavramını tanıtıyor ve işlemci içinde gerçekleşen işlemler için iyi vektörleştirilmiş kod elde etmeye yönelik farklı yaklaşımları tartışıyor. İşaretçiyi bir bellek bölgesinden diğerine taşımaya izin verilmez, ancak bir bellek alanından diğerine kopyalamak mümkündür.

  • 00:15:00 Bu bölümde, konuşmacı kodu vektörleştirme için mevcut çeşitli seçenekleri tartışıyor ve OpenCL C'yi vektörleştirmeyi başarmanın doğal ve verimli bir yolu olarak vurguluyor. OpenCL C'deki vektör türleri birinci sınıf vatandaşlardır ve kullanıcılar tarafından doğrudan erişilebilir. Vektörler arasındaki bileşen bazında işlemler, toplama, çıkarma, çarpma veya başka herhangi bir ilişkisel işleç olabilen genel bir işleç kullanmayı içerir. Bununla birlikte, vektörler karşılaştırılırken ilişkisel işleçler kafa karıştırıcı olabilir, çünkü sonuç bileşen bazında yapılan bir boole işlemine sahip bir vektördür, bu nedenle kullanıcıların buna dikkat etmesi gerekir. Son olarak, skalerler ve vektörler arasındaki karıştırma işlemleri tanımsızdır, bu nedenle kullanıcıların bu tür işlemleri gerçekleştirirken dikkatli olmaları gerekir.

  • 00:20:00 Bu bölümde, eğitmen OpenCL C'de vektör işlemlerini ve adreslemeyi tartışır. Vektörler, vektör boyutuna göre genişletilecek olan vektörler veya skalerler üzerinde çalışabilir ve bir vektörün bileşenlerine nokta kullanılarak erişilebilir onaltılık olarak gösterilen belirli bileşen numarasıyla notasyon. Eğitmen, üst düzey sorunun neden OpenCL vektör türlerinin kullanılması gerektiğini not eder ve vektörleri kullanmanın, programcı ile derleyici arasında vektör işlemlerinin net iletişimine izin verdiğini ve derleyici vektör işlemlerini daha iyi optimize edebildiği için daha iyi performansla sonuçlanabileceğini açıklar. . Son olarak eğitmen, OpenCL C'nin verileri birleştirmek için yapıları ve birleşimleri kullanmayı da desteklediğinden bahseder.

  • 00:25:00 Bu bölümde, konuşmacı OpenCL C yapılarının kullanımını ve ana bilgisayar ile cihaz arasındaki veri alışverişinde dikkatli olmanın önemini tartışıyor. Performans sorunlarına neden olabileceğinden ve verileri kopyalarken ikili düzeni düzeltmek zor olduğundan, OpenCL C yapılarının kullanılmasından kaçınılmasını tavsiye ediyorlar. Konuşmacı, işlevlerden ve nasıl sıradan C işlevleri olduklarından, özyinelemenin yasaklanması dışında, onlar hakkında özel hiçbir şey olmaksızın konuşmaya devam eder. Ayrıca özel bellek alanının, farklı bellek bölgelerini aynı şekilde ele alırken sorunlara neden olabilecek argümanlarda örtük olduğundan da bahsederler. Son olarak konuşmacı, çekirdekleri aygıtın yürütülmesi için giriş noktaları olarak tanımlar ve çekirdek bağımsız değişkenlerinin nasıl genel bir şeye veya yalnızca kopyalanan değerlere işaret ettiğini açıklar.

  • 00:30:00 Bu bölümde konuşmacı, iki diziyi birbirine ekleyen ve sonuçları bileşen bazında aynı konumlarda depolayan bir OpenCL C programı sunar. Program, global çalışma boyutuna, çalışma grubu boyutuna ve global ofset'e erişmek için get_global_ID ve diğer ilgili işlevleri kullanır. Konuşmacı, en iyi performansı elde etmek için mümkün olduğunda yerel belleği kullanmanın önemini vurgular ve bağımsız değişken listesinde bir parametre sağlayarak yerel belleği bildirmenin bir yolunu sağlar. Konuşmacı ayrıca programlamayı kolaylaştırmak için "DEP tipi" kullanılmasını önerir.

  • 00:35:00 Bu bölümde konuşmacı, OpenCL C çekirdeklerinde yerel ve sabit belleğin kullanımını tartışıyor. Yerel bellek, bir çalışma grubundaki tüm iş öğeleri arasında paylaşılan verileri depolamak için kullanılırken, sabit bellek, yine tüm iş öğeleri arasında paylaşılan salt okunur bellektir. Çekirdeklerin kendilerinin bellek ayıramayacağını ve birden çok çekirdeğin birbiriyle işbirliği yapamayacağını not etmek önemlidir. Konuşmacı ayrıca OpenCL C'de vektörleştirmeyi optimize etmek ve derleyiciye bilgi iletmek için kullanılabilecek nitelikler olduğundan bahseder.

  • 00:40:00 Bu bölümde konuşmacı, çekirdeklerde performansı optimize etmek için gerekli çalışma grubu boyutunun önemini açıklıyor. Çalışma grubu boyutu sabitlendiğinde derleyici tarafından özel optimizasyonların kullanılmasından bahseder. Konuşmacı, genel amaçlı hesaplamaya odaklandığı için kendisini pek ilgilendirmeyen OpenCL'nin görüntü desteğinden kısaca bahsediyor. Ek olarak, iş öğesi işlevleri, matematik işlevleri, tamsayı işlevleri ve geometrik işlevler dahil olmak üzere standart bir kitaplık gibi yerleşik OpenCL C işlevlerinden bahseder. Senkronizasyon, performans için tasarlandığından OpenCL C programlama modelinde karmaşık bir konudur ve sağlanan atomik işlemler ve paralellik vardır. Son olarak, konuşmacı, OpenCL C'nin temel yapısını ve işleyişini anladıktan sonra yararlanılabilecek OpenCL uzantılarından bahseder.

  • 00:45:00 Bu bölümde konuşmacı, sağladıkları ekstra özelliklere rağmen OpenCL 1.2'de uzantıları kullanırken dikkatli olunmasını tavsiye ediyor. Bunların henüz spesifikasyona tam olarak entegre edilmediği ve kaldırılabileceği veya satıcı kilitlenmesine neden olabileceği konusunda uyarıyor. Ancak, bazı uzantıların yararlı olabileceğini de kabul ediyor ve izleyicileri mevcut uzantıları incelemeye teşvik ediyor. Sonuç olarak, konuşmacı izleyicileri OpenCL ve ilişkili modelleri öğrenmeye davet ediyor ve verimli OpenCL programları tasarlama konusunda tavsiye isteyenler için danışman olarak hizmetlerini sunuyor.
OpenCL 1.2: OpenCL C
OpenCL 1.2: OpenCL C
  • 2013.11.03
  • www.youtube.com
This video builds upon the high-level overview of OpenCL that you saw in the first video, and describes OpenCL C. You aren't going to learn everything about...
 

OpenCL GPU Mimarisi



OpenCL GPU Mimarisi

Bu video, OpenCL programlama bağlamında GPU'ların mimarisini inceliyor. Konuşmacı, OpenCL GPU mimarisi ile genel GPU mimarisi arasındaki farkları, bir çalışma grubunun en küçük birimi olarak dalga cepheleri kavramını, bellek G/Ç ve gecikme gizleme sorunlarını ve doluluk ve birleşik bellek erişimlerini etkileyen faktörleri açıklıyor. Birleştirilmiş bellek erişimleri göz önünde bulundurularak algoritmalar ve veri yapıları tasarlamanın önemi ve GPU performansını ölçme ihtiyacı da vurgulanıyor. Konuşmacı, izleyicileri, altta yatan süreçler hakkında derinlemesine bilgiye ihtiyaç duymadan optimum performans için teknolojiden yararlanma konusunda yardım almak için kendisiyle iletişime geçmeye teşvik ediyor.

  • 00:00:00 Bu bölümde, konuşmacı GPU mimarisi konusunu ve OpenCL programlamadaki önemini tanıtıyor. Pek çok kişi OpenCL'nin yalnızca GPU'lar için olduğuna inanırken, konuşmacı CPU'ların da benzer kavramları kullanan SIMD yönergelerine sahip olduğunu vurguluyor. GPU'ları genel amaçlı bilgi işlem için kullanmanın ardındaki motivasyon da tartışılıyor - bu, grafik işlemek için GPU'ların geliştirilmesinden kaynaklanan tesadüfi bir keşifti. Konuşmacı, mimariyi anlamak için pazarlama departmanlarına güvenilmemesi konusunda uyarıda bulunuyor ve OpenCL'nin verimli kullanımı için mimarinin derinlemesine anlaşılması gerektiğinin altını çiziyor.

  • 00:05:00 Bu bölümde, konuşmacı GPU'ları tanıtmak için kullanılan ve genellikle geliştiricilere yararlı veya ilgili bilgiler sağlamayan gösterişli pazarlama teknikleri konusunu tartışıyor. Daha sonra, özellikle OpenCL'nin onu nasıl gördüğüne odaklandığı için genel GPU mimarisinden farklı olan OpenCL GPU mimarisi tanıtılır. Sabit ve genel bellek alanları fiziksel olarak bir GPU'da bulunur ve yerel ve özel bellek donanımda uygulanır ve tüm işleme öğeleriyle paylaşılır. GPU yürütme modeli, işleme öğeleri arasında birbirine kilitlenmiş yönerge işaretçilerine sahip olmasıyla karakterize edilir. Aynı ekleme talimatını yürüten, SIMD talimatı ile dörtlü olarak düşünülebilecek dört işleme elemanı örneği verilmiştir.

  • 00:10:00 Bu bölümde konuşmacı, bir çalışma grubunun birlikte çalışan en küçük birimi olan wavefront kavramını açıklıyor. Dalga cephesi, bir çalışma grubundaki iş öğeleri için talimat işaretçisinin birbirine kilitlenmesiyle oluşturulur ve bir dalga cephesindeki tüm işleme öğeleri, farklı verilerle uğraşırken bile aynı işlemleri gerçekleştirmelidir. Ancak bu, bir wavefront içindeki iş öğelerinin farklı yollar izleyerek ayrışmaya neden olduğu koşullu ifadeleri yürütürken sorunlar yaratır. Bunu çözmek için OpenCL, verimli koşullu yürütme için tek bir işlemci talimatını derleyen "select" adlı yerleşik bir işleve sahiptir.

  • 00:15:00 Bu bölümde konuşmacı bellek G/Ç maliyetinden ve ne kadar yavaş olduğundan bahsediyor. Saniyede bir komut yapan tek bir işleme öğesinin zihinsel bir deneyini ve 32 bit ve 64 bit değerler için küresel erişim için geçen süreyi açıklıyorlar, ikincisi iki kat daha uzun sürüyor. Bununla birlikte, bellek G/Ç sabittir, bu nedenle daha iyi performans elde etmek için, bellek işlemi için ödeme yapmak üzere işlemlerin karmaşıklığı artırılabilir. Bu, bir milyon işlem gerçekleştirme ve %100 ALU verimliliği elde etme örneğiyle gösterilmiştir. Bu pratik olmayabilir, ancak kripto para birimi madenciliği veya kriptografi gibi belirli uygulamalarda kullanışlıdır.

  • 00:20:00 Bu bölümde konuşmacı, bellek gecikmesi konusunu ve bunun GPU'ların performansını nasıl etkilediğini tartışıyor. %100 düşük kullanım elde etme ve işleme öğelerini meşgul tutma hedefiyle, bilgi işlem birimini çalışma gruplarıyla aşırı yüklemektir. Çalışma havuzunu birden fazla çalışma grubuyla doldurarak, CPU bu gruplardan gelen talimatları belirli bir sırayla veya sabit sayıda döngü için veya bir bellek talebine kadar yürütebilir. Amaç, büyük küresel bellek gecikmelerini gizlemek ve bellek gelene kadar işlem elemanlarını çalışma gruplarıyla meşgul tutmaktır.

  • 00:25:00 Bu bölümde konuşmacı, GPU programlamada iyi performans elde etmenin anahtarı olan gecikme gizleme kavramını açıklıyor. Gecikme gizleme, bellek işlemlerinin boş görünmesi için uzun gecikmeli bellek getirme işlemleri arasında yararlı hesaplamalar planlama işlemidir. Bu, yük dengeleme ve dalga cephesi yönetimi aracılığıyla yapılır. Bilgi işlem birimi, talimat işaretçisinin kilitli olduğu hazır ve engellenmiş dalga cephelerinden oluşan bir çalışma havuzuna sahiptir. Havuzdaki dalga cephelerinin sayısı, bilgi işlem biriminin kullanımını etkiler ve daha büyük bir sayı onu her zaman meşgul eder. Genel planlayıcı, sabit bir maksimum dalga cephesi sayısına sahip olan iş planlayıcı ile işlenmemiş çalışma gruplarını hesaplama birimlerine gönderir. Anahtar çıkarım, iyi kod yazılırsa bellek erişiminin tamamen gizlenebilmesidir.

  • 00:30:00 Bu bölümde, çalıştırılabilen dalga cephesi sayısının yürütülebilecek toplam sayıya kıyasla bir ölçüsü olarak doluluk kavramı tanıtılır ve açıklanır. Doluluk hesaplaması gösterilmiş ve daha hızlı çekirdekler tasarlamadaki önemi vurgulanmıştır. Doluluğun sınırlayıcı faktörü, tüm işleme öğeleri arasında paylaşılan özel ve yerel bellek olarak tanımlanır. ALU komutlarını G/Ç komutlarıyla iç içe geçirmenin gecikmeyi gizlemek için çok önemli olduğu ve yeterli ALU yönergesine sahip olmanın doluluğu iyileştirerek çekirdekleri daha hızlı hale getirebileceği açıklanmaktadır.

  • 00:35:00 Bu bölümde, konuşmacı, OpenCL programlamasında iş öğesi başına kaynak kullanımı ile bir hesaplama biriminde bulunabilecek sonuçta ortaya çıkan dalga cephesi sayısı arasındaki değiş tokuşu tartışır. İş öğesi başına ne kadar çok kaynak kullanılırsa, bir bilgi işlem biriminde o kadar az dalga cephesi bulunabilir ve bu da daha az gecikmeli gizleme ile sonuçlanır. Tersine, daha az kaynak kullanmak, daha fazla dalga cephesi ve daha fazla gecikme gizleme ile sonuçlanır. Konuşmacı, özel bellek ve yerel bellek boyutlarına dayalı maksimum dalga cephesi sayısını ve ayrıca dalga cephesi başına sabit çalışma öğesi sayısını belirlemek için örnek bir hesaplama sağlar. Konuşmacı ayrıca bilgi işlem birimlerinin küresel belleğe doğrudan erişimini etkileyen bellek kanalları kavramını da açıklıyor.

  • 00:40:00 Bu bölümde konuşmacı, OpenCL GPU mimarisinde global belleği ve daha iyi performans için fiziksel olarak nasıl çalıştığını tartışıyor. Bellek, her biri belirli bir kanal tarafından erişilen alt kümelere bölünmüştür, böylece tüm bilgi işlem birimleri bir bellek kanalına eriştiğinde bellek istekleri seri hale getirilebilir ve performansı sınırlandırılabilir. Donanım, birleşik bellek erişimleri adı verilen bitişik belleğe erişen bitişik iş öğelerinin verimli erişim kalıpları aracılığıyla bir çözüm sunar; Bilgilendirici kıyaslamalar, gerçek donanımda genellikle neyin hızlı veya yavaş olduğunu bilmenin anahtarıdır. Bitişik değerleri yükleyen iş öğeleri çok hızlıdır, rastgele yükleme çok yavaştır, ancak gecikmeyi gizleme, genel kullanımı iyileştirmeye yardımcı olur.

  • 00:45:00 Bu bölümde konuşmacı, birleşik bellek erişimleri göz önünde bulundurularak algoritmalar ve veri yapıları tasarlamanın önemini açıklıyor. Geliştiriciler, üst düzey gerçekleri ve ödünleşimleri kullanarak, rastgele bellek erişimini sınırlayabilir ve tasarımlarını, gecikmeyi gizlemeye izin vermek için mümkün olduğunca çok ALU talimatına sahip olacak şekilde saptırabilir. Konuşmacı ayrıca bellek kanallarının var olduğunu ve belirli bellek erişimi modellerinin performansı artırabileceğini açıklıyor. Ek olarak, konuşmacı, atomik işlemler ve iş öğesi işbirliği ve GPU performansının ölçülmesi dahil olmak üzere paralel programlama hakkında yakında yapılacak tartışmalara dair ipuçları veriyor. Konuşmacı şu anda gelecekteki OpenCL çalışmaları için sponsorluk arıyor.

  • 00:50:00 Bu bölümde, konuşmacı, OpenCL GPU Mimarisi ile ilgili ekran yayınını, izleyicileri, altta yatan süreçlerin kapsamlı bir şekilde anlaşılmasını gerektirmeden en yüksek performans için teknolojiden yararlanma konusunda yardım almak için kendisiyle iletişime geçmeye teşvik ederek bitirir.
OpenCL GPU Architecture
OpenCL GPU Architecture
  • 2013.11.11
  • www.youtube.com
This lecture demonstrates GPU architecture in a way that should be easily understood by developers. Once you tackle this lecture, you are well on your way t...
 

Bölüm 1 - OpenCL'ye Giriş



Bölüm 1 - OpenCL'ye Giriş

OpenCL'ye giriş yapan bu videoda David Gohara, OpenCL'nin farklı cihazlar ve donanımlardaki bilgi işlem kaynaklarına kolay ve verimli erişim sağlayacak şekilde nasıl tasarlandığını ve görüntü ve video işleme, bilimsel bilgi işlem dahil olmak üzere çeşitli uygulamalarla yüksek performanslı bilgi işleme olanak tanıdığını açıklıyor. tıbbi görüntüleme ve finansal amaçlar. OpenCL, veri paralel görevleri için özellikle verimli olan, cihazdan bağımsız, açık standart bir teknolojidir. Konuşmacı, sayısal hesaplamalar için hesaplama süresini azaltmada OpenCL teknolojisinin gücünü gösterir ve bilimsel araştırma ve genel kullanım potansiyelini vurgular. Ayrıca, izleyicilerin Mac'i, Mac araştırma kuruluşunu kullanan bilim adamları için çevrimiçi topluluğa katılmaları ve web sitelerine bağlı Amazon mağazasından öğeler satın alarak topluluğu desteklemeleri teşvik edilir.

  • 00:00:00 Bu bölümde David Gohara, ilk olarak 2008'de Apple tarafından önerilen bir açık bilgi işlem dili olan OpenCL kavramını ve özelliklerini tanıtıyor. OpenCL, çok fazla bilgi işlem gücü gerektiren paralel bilgi işlem görevleri için tasarlanmıştır ve saat hızını artırmak yerine performansı artırmak için birden çok çekirdek kullanmak. Khronos grubu, OpenCL spesifikasyonunu korur; bu, herhangi birinin onu kullanması için biri tarafından uygulanması gerektiği anlamına gelir. Kritik faktör, OpenCL'nin bilgi işlem performansını artırmak için bilgi işlem gücünden yararlanmak üzere tasarlanmış açık standart bir teknoloji olmasıdır.

  • 00:05:00 Bu bölümde, konuşmacı, özel DSP veya yalnızca grafik uygulamalarının aksine genel amaçlı paralel hesaplamaları desteklemek için bir bilgisayarın çeşitli aygıtlarının ve donanımının tüm kaynaklarına erişim sağlayan OpenCL'yi ve tasarımını tanıtıyor. Cihazdan bağımsız olacak şekilde tasarlanmıştır ve uygulamalar arasında kod taşınabilirliği sağlar. CPU'lar, GPU'lar, DSP yongaları ve gömülü işlemciler dahil olmak üzere spesifikasyonun minimum gereksinimlerini karşılayan herhangi bir donanım bir OpenCL cihazı olabilir. OpenCL, görevleri sorunsuz bir şekilde yönetmek için c99 dil desteği, ek veri türleri, yerleşik işlevler ve niteleyiciler ve iş parçacığı yönetimi çerçevesi ile farklı cihazlara erişmek ve yüksek performanslı bilgi işlem gerçekleştirmek için temiz ve basit API'ler sağlar. OpenCL'nin temel amacı, sistem kaynaklarını tüketmeyen verimli, hafif ve kullanımı kolay bir çerçeve olmaktır.

  • 00:10:00 Bu bölümde konuşmacı, OpenCL'nin, insanlar yeni çipler veya donanım parçaları geliştirirken yeni donanım tasarlamak için yönergeler sağlamadaki önemini vurguluyor. OpenCL ayrıca belirli doğruluk değerlerini garanti eder ve bilimsel bilgi işlem, görüntü ve video işleme, tıbbi görüntüleme ve finansal amaçlar dahil olmak üzere çok çeşitli uygulamalara izin verir. Konuşmacı, OpenCL'nin veri paralel hesaplama için tasarlandığını ve ayrı ayrı veri parçalarının mutlak değerini alma ve bir piksel kümesinin toplamını ve ortalamasını hesaplayarak bir kutu filtresi kullanarak görüntüleri bulanıklaştırma gibi veri paralel görevleri için özellikle verimli olduğunu açıklar. bir kutuda.

  • 00:15:00 Bu bölümde, konuşmacı veri paralel hesaplamalarının nasıl çalıştığını, özellikle örnek olarak görüntü işlemeyi açıklamaktadır. Her bir piksel değerleri kutusu görüntüden okunur ve ayrı bir veri arabelleğine yazılır, bu da senkronizasyon endişesi olmadan bağımsız çalışmanın yapılmasına olanak tanır. OpenCL aynı zamanda OpenCL ile veri paylaşabilen bir grafik programlama dili olan OpenGL ile birlikte çalışacak şekilde tasarlanmıştır, bu da karmaşık sayıların işlenmesini mümkün kılar ve çok az performans yüküyle görüntüler. Ancak OpenCL sıralı problemler, sabit senkronizasyon noktaları gerektiren hesaplamalar veya cihaza bağlı sınırlamalar için uygun değildir.

  • 00:20:00 Bu bölümde, konuşmacı OpenCL'yi tanıtıyor ve bilgisayarlardaki bilgi işlem gücünden kolayca ve taşınabilir şekilde yararlanmak için nasıl tasarlandığını açıklıyor. CUDA'dan ve grafik kartlarında hesaplamalar yapmak için nasıl güçlü bir programlama arabirimi olduğundan, ancak cihazdan bağımsız olmadığından ve yalnızca NVIDIA donanımında çalıştığından bahsediyor. Ancak konuşmacı, kullanıcıların hem CUDA'yı hem de OpenCL'yi kullanabileceklerini ve çekirdekler söz konusu olduğunda hemen hemen aynı olduklarını açıklıyor. Ayrıca konuşmacı, OpenCL'nin zaten Mac OS 10 Snow Leopard'da uygulandığını ve bir sistem çerçevesi olarak sağlandığını açıklıyor. Ek olarak, hem Nvidia hem de AMD, diğer işletim sistemlerine ve platformlara erişim sağlayabilecek kendi OpenCL uygulamaları üzerinde çalışıyor.

  • 00:25:00 Bu bölümde konuşmacı, özellikle 24 inç iMac ve bazı MacBook Pro modelleri gibi Apple ürünlerinde, şu anda sevkıyat kartlarında OpenCL özellikli GPU'ların yaygınlığını tartışıyor. Tüm Nvidia kartlarının OpenCL özellikli olduğunu ve haftada tahmini 1 ila 2 milyon kartın gönderildiğini belirtiyor. Konuşmacı, OpenGL ve diğer grafik ve medya teknolojilerine sıkı sıkıya bağlı olduğundan, OpenCL'nin Apple'ın çerçevesine nasıl uyduğunu açıklıyor. Ayrıca, yüksek ölçeklenebilirlik ve veri paralelliği ile övünen GPU'ların sayı hesaplama için neden ideal olduğunu açıklıyor. Buna rağmen, PCI veri yolu grafik kartının kendisindeki bellekten çok daha yavaş olduğundan, bilgisayarın ana bölümünden grafik kartına veri aktarımında sınırlamalar vardır.

  • 00:30:00 Bu bölümde konuşmacı, GPU'ları OpenCL ile kullanırken dikkate alınması gereken, sorunun hesaplama maliyeti, hata işleme ve hata ayıklama ve belirli veri düzenleme gereksinimleri gibi bazı faktörleri tartışıyor. Konuşmacı, cihazlara kolay erişim sağlayan ve işletim sistemleri ve donanım platformları arasında taşınabilir olan açık bir özellik olduğu için OpenCL'yi övüyor. Konuşmacı daha sonra biyolojik moleküllerin elektrostatik özelliklerini değerlendiren programlarından bir örnek kullanarak kodun CPU'da çalışmaktan GPU'da çalışmaya nasıl taşınacağını gösterir.

  • 00:35:00 Bu bölümde, konuşmacı, sayısal hesaplamalarda hesaplama kaynaklarının etkin kullanımına izin veren OpenCL teknolojisinin gücünü tanıtıyor. Demo, tek bir CPU üzerinde tamamlanması yaklaşık 60 saniye süren bir sınır değer problemi hesaplamasını göstermektedir. 16 iş parçacığı üzerinde çalıştırıldığında, hesaplama süresi 4,8 saniyeye düşürüldü. Konuşmacı daha sonra aynı hesaplamayı bir GPU üzerinde gösterir ve hesaplama süresi yaklaşık 180 milisaniyeye düşürülür. GPU'dan elde edilen sonuçlar, CPU'dan elde edilenlerle aynıdır ve her iki hesaplamada kullanılan kod, daha iyi performans için küçük değişikliklerle hemen hemen aynıdır. Gösteri, OpenCL teknolojisinin bilim ve genel kullanım için açtığı heyecan verici olasılıkları vurgulamaktadır.

  • 00:40:00 Videonun bu bölümünde konuşmacı izleyicilere birkaç şey öneriyor. İlk olarak, bilim adamlarının Mac adlı Mac araştırma kuruluşunu kullandığı çevrimiçi topluluktan bahsediyor ve izleyicileri katılmaya teşvik ediyor. İkinci olarak, web sitelerinde de bulunan diğer iki faydalı eğitim serisinden, Bilim Adamları için Kakao ve X Izgara Eğitimlerinden bahsediyor. Son olarak, sunucuların, donanımın ve diğer masrafların bakım maliyetine yardımcı olacağı için izleyicilerden web sitelerine bağlı Amazon mağazasından öğeler satın alarak topluluğa yardım etmelerini istiyor.
Episode 1 - Introduction to OpenCL
Episode 1 - Introduction to OpenCL
  • 2013.06.17
  • www.youtube.com
In this first episode, the Open Computing Language (OpenCL) will be introduced. Background information on what it is, why it's needed and how you can use it ...
 

Bölüm 2 - OpenCL Temelleri



Bölüm 2 - OpenCL Temelleri

Bu video OpenCL programlama dilini tanıtmakta ve nasıl kullanılacağına dair temel bilgileri açıklamaktadır. Bir bilgisayar sisteminde kullanılabilen farklı bellek türleri, kaynakların nasıl tahsis edileceği ve bir çekirdeğin nasıl oluşturulup çalıştırılacağı gibi konuları kapsar.

  • 00:00:00 Bu dizinin ilk podcast'i OpenCL'yi tanıttı ve verileri işlemek için CPU ve GPU kullanmanın temellerini tartıştı. Bu podcast, OpenCL kullanımı için desteklenen grafik kartlarının listesini ve ayrıca CPU'ların bellek gecikmelerini gizlemede neden daha iyi olduğunu açıklıyor.

  • 00:05:00 OpenCL, CPU'lar ve GPU'lar üzerinde hesaplamaları hızlandırmak için bir platformdur. OpenCL'yi oluşturan nesneler, hesaplama cihazlarını, bellek nesnelerini ve yürütülebilir nesneleri içerir. Cihaz grupları, birden fazla bilgi işlem cihazını bir arada gruplamak için ortak bir yapıdır.

  • 00:10:00 Bu video, OpenCL bellek nesnelerine odaklanarak CPU'lar ve GPU'lar arasındaki farkları kapsar. Üç tür OpenCL bellek nesnesi diziler, resimler ve yürütülebilir dosyalardır. Video ayrıca OpenCL çekirdeklerinin nasıl oluşturulacağını ve kullanılacağını da kapsar.

  • 00:15:00 OpenCL, grafikler ve paralel bilgi işlem için kullanılan güçlü bir programlama dilidir. OpenCL, kodun çalışma zamanında derlenmesine veya önceden derlenmesine izin verir ve çalışma öğeleri, çalışma grupları halinde gruplandırılır.

  • 00:20:00 OpenCL, GPU bilgi işlem için güçlü, platformlar arası bir API'dir. OpenCL Fundamentals videosu, ND aralıkları ve çalışma grubu boyutları kavramlarını ve bunların 2 ve 3 boyutta nasıl ilişkili olduğunu tartışır.

  • 00:25:00 Bu video, mevcut farklı görüntü türleri, çekirdek yürütme, bellek yönetimi ve adres alanları dahil olmak üzere OpenCL'nin temellerini kapsar.

  • 00:30:00 Bu videoda yazar, bir bilgisayar sisteminde kullanılabilen, genel bellek, sabit bellek, yerel bellek ve özel bellek dahil olmak üzere farklı bellek türlerini açıklıyor. Genel bellek en büyük ve en önemli bellek türüdür, özel bellek ise çekirdek düzeyindeki veriler içindir.

  • 00:35:00 Bu videoda, OpenCL'nin başlatılması, kaynakların tahsis edilmesi ve bir çekirdeğin oluşturulması ve çalıştırılması dahil olmak üzere OpenCL kullanımının temel adımları açıklanmaktadır.

  • 00:40:00 Bu videoda OpenCL'in temelleri tartışılıyor. İlk adım tahsistir ve ardından verileri grafik kartına iletmek için kod yazılır. Bir sonraki adım, OpenCL'nin bir program ve belirli bir çekirdek oluşturmak için kullanıldığı program ve çekirdek oluşturmadır. Son olarak program yürütülür.

  • 00:45:00 Bu videoda yazar OpenCL'de kernel oluşturmak için gerekli adımları anlatıyor. Boyutlar ve iş öğeleri gibi OpenCL'nin temel kavramlarını kapsar ve bir çekirdeğin nasıl kuyruğa alınacağını ve çalıştırılacağını açıklar. Ayrıca Khronos OpenCL spesifikasyonu ve şiddetle tavsiye edilen Barbara videosu hakkında kısa bir genel bakış sunuyor.|

  • 00:50:00 Bu bölümde sunucu, basit bir programın nasıl oluşturulacağı ve OpenCL çalışma zamanı kitaplığının nasıl kullanılacağı da dahil olmak üzere OpenCL temellerini ele alıyor.
Episode 2 - OpenCL Fundamentals
Episode 2 - OpenCL Fundamentals
  • 2013.06.18
  • www.youtube.com
In this episode, we'll go over the fundamentals of OpenCL. Discussing concepts that once understood, will make implementing and using OpenCL much easier. Thi...
 

3. Bölüm - Bir OpenCL Projesi Oluşturmak



3. Bölüm - Bir OpenCL Projesi Oluşturmak

Bu video, OpenCL ile ilgili sık sorulan sorulara ve endişelere kapsamlı bir genel bakış sunar. İşlenen konular arasında çift duyarlıklı aritmetik, nesne yönelimli programlama, genel ve çalışma grubu boyutları ve OpenCL ile çözülebilen bilimsel problemler yer alır. Konuşmacı, küresel ve yerel çalışma grubu boyutlarını dikkatli bir şekilde seçmenin yanı sıra algoritmaları ve veri yapılarını GPU'nun veri düzeni tercihlerine uyacak şekilde değiştirmenin önemini vurguluyor. Konuşmacı ayrıca OpenCL'de temel bir kodlama örneği sağlar ve çekirdeklerin bir programa nasıl yüklenip yürütülebileceğini açıklar. Dahil edilen diğer konular, büyük sayıların işlenmesi, bellek tahsisi ve komut sırası yönetimidir. Video, seyrek matris vektör çarpımı ve karışık duyarlıklı aritmetik ile ilgilenen kullanıcılar için ek kaynaklara referanslarla sona eriyor.

  • 00:00:00 Bu bölümde, çift duyarlıklı aritmetik, nesne yönelimli programlama, genel ve çalışma grubu boyutları ve OpenCL ile çözebileceğiniz bilimsel problemler dahil olmak üzere OpenCL hakkında bazı yaygın soruları ele alacağız. OpenCL spesifikasyonunda çifte kesinlik isteğe bağlıdır ve bunun için destek, hem donanımınıza hem de uygulamanıza bağlıdır. Çift kesinliği destekleyen bir donanıma sahipseniz, çift kesinlikli hesaplamalar için ifadeler yayınlamadan önce bir pragma kullanabilirsiniz, ancak kullanmazsanız, davranış tanımsızdır ve çeşitli sorunlara yol açabilir. Nesne yönelimli programlama, OpenCL ile birlikte kullanılabilir, ancak OpenCL'nin C tabanlı programlama modelinin sınırlamalarını akılda tutmak önemlidir. Genel ve çalışma grubu boyutlarını seçerken, algoritmanızın özelliklerini ve
    çalıştırdığınız belirli bir cihaz. Son olarak, OpenCL ile çözebileceğiniz bilimsel problem türlerini ve ihtiyaçlarınız için ne zaman uygun bir seçim olabileceğini tartışacağız.

  • 00:05:00 Bu bölümde, konuşmacı çift duyarlıklı aritmetiği ve bunun GPU'lardaki performansını tartışıyor. Tek duyarlıklı kayan nokta işlemleri saniyede yaklaşık 1.000 gigaflop verebilirken, çift duyarlıklı kayan nokta işlemleri GPU'larda yalnızca saniyede yaklaşık 90 gigaflop verebilir ve bu da büyük bir performans düşüşüyle sonuçlanır. Konuşmacı, çifte kesinlik gerekiyorsa karma duyarlıklı aritmetik kullanmayı ve bunu desteklemeyen cihazlarda daha yüksek duyarlıklı aritmetik öykünmeyi önerir. Ek olarak, konuşmacı, OpenCL'nin karmaşık nesnelerin çekirdeğe geçirilmesini desteklemediğini ve bu nedenle, C++ ve Objective C gibi dillerde yöntemlerin OpenCL yordamlarını çağırabileceğini ancak herhangi bir örneklenmiş nesneyi çekirdeğe geçiremeyeceğini not eder. C dilindeki içsel türlerden veya OpenCL'nin desteklediği herhangi bir uzantıdan oluşturulan yapılar kullanılabilir, ancak OpenCL'de herhangi bir üst düzey nesne yönelimi desteklenmez.

  • 00:10:00 Bu bölümde, konuşmacı çalışma grubu boyutlarını ve özellikle bir GPU'da yerel çalışma grubu boyutunun nasıl belirlenmesi gerektiğini tartışır. Yerel çalışma grubu boyutu, genel çalışma grubu boyutundan küçük olmalı ve ona eşit olarak bölünmelidir. Bununla birlikte, bir CPU'da yerel çalışma grubu boyutu her zaman bir olmalıdır çünkü bir CPU'da çalışma grubu iletişimini uygulamak için senkronizasyon noktaları son derece pahalıdır. Konuşmacı, küresel ve yerel çalışma grubu boyutlarının asla NVIDIA donanımında bir warp boyutundan veya ATI donanımında bir wavefront boyutundan küçük olmamasını önerir. Ek olarak, 2'nin veya çift sayıların kuvvetleri tercih edilir ve bazen 2 yerel çalışma grubu büyüklüğünde bir kuvvet elde etmek için hesaplamaları fazladan sıfırlarla doldurmak gibi biraz fazladan çalışmaya değer olabilir. Snow Leopard OpenCL uygulamasında, maksimum yerel çalışma grubu boyutu tipik olarak 512 civarındadır ve NVIDIA donanımında tek bir SM'de çalıştırılabilecek maksimum iş parçacığı sayısı 780-784 civarındadır.

  • 00:15:00 Videonun bu bölümünde, konuşmacı çalışma grubu boyutlarını ve çok fazla başlık kullanmanın nasıl ek bir fayda sağlayamayacağını tartışıyor. Ayrıca problemlerin bir, iki veya üç boyuta boyutlandırılması kavramına ve bunun bazı bilimsel problemler için nasıl yardımcı olduğuna değinirler. Bazı bilimsel problemlerin GPU'larda çözülebilirliğinden bahsediliyor ve belirli uygulamalara ve veri yapılarına bağlı olsa da FFT'ler, Monte Carlo simülasyonları ve kısmi diferansiyel denklemler gibi şeyleri GPU'lar üzerinde çok verimli bir şekilde yapmak mümkün. Son olarak video, algoritmaları ve veri yapılarını GPU'nun veri düzeni tercihlerine uyacak şekilde değiştirme ihtiyacını ele alıyor ve hesaplamaların tek bir çekirdekte veya sıra çağrısında çalıştırılmasına gerek olmadığını vurguluyor.

  • 00:20:00 Bu bölümde, konuşmacı bir hesaplamayı birden fazla çekirdeğe bölme veya OpenCL'deki kuyruk çağrılarını ele alma olasılığını tartışıyor, ancak bu küçük bir performans düşüşüne neden olabilir. Bunu eşlenik gradyan algoritması örneğini kullanarak açıklıyor ve bir CPU üzerinde çalışırken algoritmadaki ardışık adımları birleştirmek mümkün olsa da bir GPU ile uğraşırken bunun biraz farklı olduğunun altını çiziyor. Konuşmacı, GPU işlemlerinin her bir adım için açıkça çağrılması gerektiğini vurgular. Önce birden fazla eşlenik gradyan minimizasyonu döngüsü gerçekleştirmeyi, ardından istenen yakınsamaya ulaşılıp ulaşılmadığını belirlemek için bir kontrol yapılmasını önerir. Mümkün olduğu kadar çok işi kesintiye uğratmadan yürütmenin önemini vurguluyor ve benzer değerlendirmeler gerektiren diğer problemler olarak moleküler dinamik ve elektrostatik örneklerini gündeme getiriyor. Son olarak, bir OpenCL örneğine geçiyor ve bunun izleyiciyi OpenCL aracına ve gerçek koda alıştırmak için basit bir örnek olduğunu belirtiyor.

  • 00:25:00 Bu bölümde, konuşmacı önceki bölümlerde kısaca bahsedilen OpenCL projesindeki bazı temel işlevleri tartışıyor. İlk işlev, CPU, GPU, FPGA gibi hızlandırıcı aygıtlar ve daha fazlası dahil olmak üzere aradığınız aygıt türünü tanımlayan CL alma aygıtı kimlikleridir. Cihazlar tanımlandıktan sonra satıcı, genel bellek boyutu, maksimum çalışma öğeleri ve çift kesinlik gibi desteklenen uzantılar gibi özelliklerini anlamak için CL device get info'yu kullanabilirsiniz. Programınızı oluşturduktan sonra, çekirdekleri OpenCL dışında derleyemeyeceğiniz için derleme günlüğünü kontrol etmek isteyebilirsiniz. Derleme günlüğü size sözdizimi hatası veya yanlış veri türü gibi neyin yanlış gittiğini söyleyebilir ve derleme seçeneklerini ve durumunu kontrol edebilir.

  • 00:30:00 Bu bölümde, konuşmacı OpenCL'deki salt okunur ve okuma/yazma dahil olmak üzere farklı türde bellek arabelleklerini ve ana bilgisayardaki referans belleğini açıklar. Engelleyen veya engellemeyen CL ve Q yazma arabelleği işlevini kullanarak yazma işlemlerinin daha iyi verimlilik için sıraya alınmasının faydalı olabileceğini öne sürüyor. Konuşmacı ayrıca çekirdeklerin çalıştırılmasına, çekirdek argümanlarının ayarlanmasına ve global ve yerel çalışma boyutlarının kullanılmasına kısaca değinir. OpenCL uygulaması, yerel bir çalışma boyutuna otomatik olarak karar verebilir ve konuşmacı, bu sürecin önceki deneylerinde en iyi şekilde çalıştığını not eder.

  • 00:35:00 Bu bölümde konuşmacı, paylaşılan bellek kullanımı gibi belirli çekirdek işlevlerine bağlı olarak değerini deneyerek GPU'daki yerel çalışmanın boyutunu ayarlamanın bazı yönlerini tartışıyor. Sonuçların okunması ile ilgili olarak, CL true veya CL false, bunun ya bir engelleme okuması olduğu ya da programın sonuçların gelmesini beklemediği anlamına gelir. amaçlar. Konuşmacı daha sonra Xcode'a geçerek projeyi Open CL'nin gerekli tek çerçeve olduğu standart bir Xcode projesi olarak tanımlıyor. Kaynak kodunu ve OpenCL çekirdeğini parçalara ayırarak nihai netlik için açıklama ekliyor. Çekirdek, basit olan bir ADD çekirdeğidir; ancak, yalnızca açıklayıcı bir amaç olarak hizmet eder. Konuşmacı daha sonra cihaz bilgileri ve bağlamı ve komut sırası kurulumu gibi işlevlere dalar.

  • 00:40:00 Bu bölümde video, OpenCL çekirdeklerinin bir programa harici bir dosya veya bir C dizisi olarak nasıl yüklenebileceğini tartışıyor. Çekirdekleri harici dosyalar olarak yüklemek daha temiz olsa da, herhangi bir hata oluşması durumunda kodda hata ayıklamak daha zor olabilir. Öte yandan, çekirdekleri C dizeleri olarak yüklemek, kullanıcıların kodu görüntülemesini zorlaştırır ve çekirdek kodunu korumak için bazı seçenekler vardır. Ek olarak, video, programları önceden derlemeye karşı tam zamanında derlemenin avantajlarını ve dezavantajlarını araştırıyor. Ön derleme, çekirdek kodunu gizleyebilirken, bir programı farklı donanımlarda çalıştırmak, ön derleme yoluyla mümkün olmayan farklı optimizasyonlar gerektirebilir. Genel olarak video, her iki seçeneğin de artıları ve eksileri olduğunu ve programcıların bir yöntem seçerken ihtiyaçlarını dikkatlice değerlendirmeleri gerektiğini vurguluyor.

  • 00:45:00 Bu bölümde, konuşmacı Saxby veya ADD çekirdeği gibi çekirdekleri çağırmak ve geri çağırmak için kodu CL çekirdeğine bağlama sürecini açıklıyor. Giriş ve içerik arabelleklerinin oluşturulmasıyla bellek tahsisi de kapsanır; bu sayede birincisi yalnızca okuma amaçlı olurken, ikincisi sonuçları saklar ve okuma-yazma erişimine sahip olur. Çekirdek bağımsız değişkenleri ayarlandıktan sonra, genel çalışma boyutu, kontrol ana programa geri döndürüldüğünde bir ekranda görüntülenen işlenecek öğelerin sayısına ayarlı olarak yürütme başlar. Dikkatli komut sırası yönetimine duyulan ihtiyaç çok önemlidir; sunum yapan kişi, belleği serbest bırakmaya devam etmeden önce kuyruğu bitirmenin önemini açıklar. Genel olarak, sunulan işlev işe yaradı ve kart genelinde 32'lik bir beklenen giriş değeri verdi.

  • 00:50:00 Bu bölümde, konuşmacı OpenCL projesinde büyük sayıların nasıl ele alınacağını tartışır ve kullanıcılara kullanılabilir belleğe dikkat etmelerini ve çıktının aşırı yüklenmesini önlemek için büyük dizilerde yineleme yaparken baskıları kapatmalarını hatırlatır. Konuşmacı ayrıca kullanıcıları GPU'larda seyrek matris vektör çarpımı üzerine bir makaleye ve karma kesinlikli aritmetik üzerine başka bir sunuma göz atmaya teşvik eder. Daha sonra soruları davet ederek ve bir sonraki bölümün muhtemelen veri düzenini, çözgüleri ve bellek erişimini kapsayacağını vurgulayarak podcast'i bitirir.
Episode 3 - Building an OpenCL Project
Episode 3 - Building an OpenCL Project
  • 2013.06.18
  • www.youtube.com
In this episode we cover some questions that were asked on the forums about double-precision arithmetic, object oriented programming, clarification on global...
 

Bölüm 4 - Bellek Düzeni ve Erişim



Bölüm 4 - Bellek Düzeni ve Erişim

Eğitimin bu bölümü, GPU performansını en üst düzeye çıkarmak için gerekli olan bellek düzenine ve erişimine odaklanmaktadır. Podcast, GPU kullanımının nasıl optimize edileceğini ve paralel hesaplamaların verimli bir şekilde nasıl yürütüleceğini açıklayan GPU mimarisini, iş parçacığı işleme kümelerini ve bellek birleştirmeyi kapsar. Konuşmacı ayrıca, çakışmalara neden olabilecek veri erişimi ve indeksleme konularını ele alarak, performansı artırmak için paylaşılan bellek ve birleştirilmiş okumaların kullanılmasını öneriyor. Genel olarak video, garantili uyumluluk için OpenCL tarafından belirtilen işlevleri ve içsel veri türlerini anlamanın önemini vurgular ve daha fazla öğrenme için kaynaklar sunar.

  • 00:00:00 Öğreticinin bu bölümünde, bellek düzeni ve erişime odaklanılmaktadır. Bu kavramları anlamak, verilerin belirli bir şekilde düzenlenmesini ve erişilmesini gerektiren GPU'larda performansı en üst düzeye çıkarmak için çok önemlidir. CPU'lar veri erişiminde daha bağışlayıcı olduğundan podcast, GPU'nun bakış açısına odaklanır, ancak GPU'lar için kodu optimize etmek CPU performansına da fayda sağlayabilir. Ek olarak, podcast bazı genel düzenlemeleri kapsar ve çekirdekler içindeki işlev çağrıları ve önceki kaynak kodu örneklerinde CL bitişinin kullanımı hakkındaki soruları ele alır. Podcast, uyumluluğu garanti etmek için yalnızca OpenCL tarafından belirtilen işlevleri ve içsel veri türlerini kullanmanın önemini vurgular.

  • 00:05:00 Bu bölümde, konuşmacı Rand veya print in kernel fonksiyonlarının CPU üzerindeki kullanımını tartışıyor. Bu işlevleri hata ayıklama amacıyla kullanmak mümkün olsa da, farklı uygulamalarda çalışacakları garanti edilmez ve taşınabilir olmayabilirler. Çekirdekler, tüm çekirdekleri içeren program kaynağının bir parçası olarak çalışma zamanında derlenebildikleri sürece işlevleri çağırabilir. Konuşmacı ayrıca, komut sırasındaki tüm işlevler geri dönene kadar CPU'nun yürütmesini bloke etmesini sağlayan bir yöntem olan CL bitirmeyi açıklar. Zamanlama kodu için yararlı olsa da, tüm görevler tamamlanana kadar uygulamanın durmasına neden olur, bu nedenle yalnızca kesinlikle gerekli olduğunda kullanılmalıdır.

  • 00:10:00 Bu bölümde konuşmacı, özellikle NVIDIA donanımına odaklanarak GPU mimarisini ve hesaplamayı yürütmek için iş parçacığı işleme kümelerini nasıl kullandığını tartışıyor. Her grafik kartında bu kümelerden 10 tane bulunur ve her biri sırayla sekiz akış işlemcisi, iki özel işlevsel birim, bir çift duyarlıklı birim ve paylaşılan yerel bellek içeren 30 akışlı çoklu işlemci içerir. Geliştiriciler, bu gruplandırmaları anlayarak GPU kullanımlarını optimize edebilir ve paralel hesaplamaları verimli bir şekilde yürütebilir. Konuşmacı, NVIDIA terminolojisini kullanır ve dinleyicileri, tümü OpenCL programlamanın önemli yönleri olan iş parçacıkları, çalışma öğeleri, iş parçacığı blokları ve çalışma grupları arasındaki ilişkiyi akılda tutmaya teşvik eder.

  • 00:15:00 Bu bölümde konuşmacı, akış işlemcileri için kullanılan skaler işlemciler, gölgeleme işlemcileri veya çekirdekler gibi farklı terminolojileri tartışıyor. Bir grafik kartındaki çekirdek sayısı, akışlı çoklu işlemci başına akış işlemcisi sayısını ifade eder. Konuşmacı, GPU üzerindeki bir çekirdeğin CPU üzerindeki bir çekirdeğe eşdeğer olmadığını ve Nvidia'nın bunları ayrı düşündüğünün altını çiziyor. Tartışma ayrıca transandantal işlevleri işlemek için özel işlev birimlerini, çift duyarlıklı kayan noktalı aritmetiği gerçekleştirmek için çift duyarlıklı birimi ve akış işlemcileri ile GPU'da yürütülen iş parçacığı blokları arasında veri paylaşmak için kullanılan yerel bellek paylaşımlı belleği kapsar. İş parçacığı işleme kümesi, üç farklı SM'ye hizmet veren 10 denetleyiciye bölünmüştür ve her SM, sekiz iş parçacığı bloğunu aynı anda yürütebilen sekiz akış işlemcisi içerir.

  • 00:20:00 Bu bölümde, birbiriyle uyumlu çalışan 32 iş parçacığından oluşan organizasyon birimleri olan GPU programlamadaki çözgü kavramı tanıtılmaktadır. Yalnızca aynı iş parçacığı bloğundaki iş parçacıkları, paylaşılan yerel belleği kullanarak birbirleriyle veri paylaşabilir. Çözgüler, donanım gereksinimleri nedeniyle 16 iplikten oluşan yarım çözgülere daha da bölünür. GPU'lar çok sayıda iş parçacığını yönetme yeteneğine sahiptir ve bellek gecikmesini ve diğer gecikmeleri gizlemek için aynı anda çalışan ek iş parçacıklarına sahip olmak önemlidir. GPU'lar, iş parçacığı yönetimi için hızlı bağlam geçişine izin veren özel donanıma sahiptir. Ne kadar çok iplik o kadar iyi ve iplik grubu boyutlarını biraz daha büyük yapmak, bir çözgüdeki tüm iplikleri kullanmak ve performansı artırmak için tavsiye edilir.

  • 00:25:00 Bu bölümde eğitmen, yerel belleğe veri yüklemenin 64 bayta eşit olan 16 öğe yüklemeyi içerdiğini ve her iş parçacığının dört bayt yüklemekten sorumlu olduğunu açıklar. Eğitmen ayrıca, komut dizilerinin yarısının bir kod bloğu girdiği ve diğer yarısının kendi kodlarını yürütmeden önce ilk yarının bitmesini beklediği yönerge programlamayı ve sapma kavramını açıklar. Bu, aynı anda çalışabilen iş parçacığı sayısının serileştirilmesine ve bölümlenmesine neden olabilir. Yerel bellek, her giriş 16 bankadan birine adreslenmiş olarak 4 baytlık girişlere bölünmüştür. 16 iş parçacığından oluşan bir yarım warp bireysel bankalara erişirse, banka çakışmalarını önleyebilir ve paylaşılan belleğe kayıt dosyası kadar hızlı erişebilir.

  • 00:30:00 Bu bölümde video, bellek birleştirme ve bir çalışma grubundaki iş parçacıklarının, bellek birleştirme aracılığıyla paylaşılan belleğe işbirliği içinde nasıl veri yükleyebileceğini ve paylaşılan bellek konumlarının dosyaları etkili bir şekilde kaydetmesini sağlar. Tartışma daha sonra genel belleğe göre bellek hizalaması ve verileri yerel belleğe çekme kavramına geçer. Yanlış hizalanmış yükler, değiştirilen yükler ve kısmi yüklerin tümü, donanımın birleştirilmiş bir yükü algılamasını engellediği ve bireysel yüklerin kayıtlara seri hale getirilmesiyle sonuçlandığı için sorunludur. Bundan kaçınmak için, hizalanmış birleşik bir yük elde etmek için gerekli olmasa bile tüm verilerin paylaşılan belleğe yüklenmesi önerilir.

  • 00:35:00 Bu bölümde, konuşmacı bellek düzenini ve CUDA programlamaya erişimi tartışıyor. Hizalanmış yüklerin, özellikle birleştirilmiş yüklerin, genel bellekten yerel belleğe veya kayıtlara veri almanın en hızlı yolu olduğunu açıklıyorlar. Ayrıca, birden fazla iş parçacığının aynı anda erişmesine izin vermek için belleğin bankalara bölündüğünü, ancak aynı bankaya erişmenin veri serileştirmesine ve düşük performansa yol açan bir banka çakışmasına neden olabileceğini açıklıyorlar. Ek olarak, konuşmacı banka çakışmalarının bir istisnasının, tüm iş parçacıklarının tek bir bankaya erişmesi olduğunu ve bunun verilerin yayınlanmasıyla sonuçlandığını ve çakışma veya serileştirme olmadığını belirtiyor.

  • 00:40:00 Videonun bu bölümünde eğitmen çok iş parçacıklı uygulamalarda bellek düzeni ve erişim hakkında konuşuyor. Çatışmaların, aynı bilgi parçası için birden çok iş parçacığının aynı bankaya eriştiğinde ortaya çıktığını ve bunun sonucunda bir performans isabeti elde edildiğini açıklıyor. Performans için paylaşılan belleği kullanmanın faydalarını ve performans cezalarından kaçınmak için birleşik bir şekilde belleğe okuma ve yazmanın önemini göstermek için matris devriğini örnek olarak kullanır. Eğitmen, tipik olarak bir yarım çözgü kullanıldığını açıklar ve optimum performans için çakışmaları önleyen bellek düzeni kalıplarının kullanılmasını önerir.

  • 00:45:00 Bu bölümde konuşmacı, GPU belleğinde indekslerin ters çevrilmesi veya indekslerin takas edilmesi sorununu ve bunun iki seçenekten biriyle nasıl sonuçlandığını ele alıyor: birleştirilmemiş bellek erişimi veya ikisinden birinin unco olması gerekiyor. Bu sorunun üstesinden gelmek için, veriler birleştirilmiş bir okuma kullanılarak genel bellekten okunur ve birleştirilmiş bir şekilde paylaşılan belleğe depolanır. Paylaşılan bellek hızlıdır ve veriler orada olduğunda ve iki iş parçacığının aynı bilgi parçasına erişmediğini varsayarsak, her iş parçacığı benzersiz veri parçasına hızlı bir şekilde erişebilir. İş parçacıkları, işbirliği içinde transpoze etmek için ihtiyaç duydukları verileri yükler ve bu veri parçasının sahipliğini alırken, onu küresel belleğe büyük bir yığına yazar ve bu da GPU'ya giren ve çıkan veri erişimi için performans kazanımları sağlar.

  • 00:50:00 Bu bölümde video, GPU'da matris devriğinin kullanımını ve paylaşılan belleği bellek birleştirme ve veri hizalama ile birleştirmenin önemini tartışıyor. Optimize edilmiş sürüm, Apple web sitesinde matris devrik adı verilen bir Xcode projesi olarak mevcuttur. Video, adım 16 ise ve 16 banka varsa, 0, 16, 32 vb. her öğenin banka 0 tarafından hizmet verebileceğini ve potansiyel banka çakışmalarına yol açacağını açıklıyor. Bu sorunu çözmek ve yüksek performanslı matris devriğini elde etmek için, yerel bellek bir öğe ile doldurulmalı ve 17 yüklenmiş değer elde edilmelidir. Video, bu kavramların temel kavramlar olduğunu öne sürüyor ve bir kez anlaşıldığında, izleyici GPU performans optimizasyonunda yolun %95'ini almış olacak.

  • 00:55:00 Bu bölümde, konuşmacı Mac Research web sitesini ve öğreticilerden uzman öğreticilerine ve topluluk tartışmalarına kadar mevcut kaynakları tanıtıyor. Web sitesine erişim ücretsizdir ve OpenCL ve diğer geliştirici kaynakları hakkında bilgiler içerir. Konuşmacı ayrıca web sitesiyle ilişkili bir Amazon mağazası olduğundan da bahsediyor ve kullanıcıları Mac Research'ü desteklemek için bu mağaza aracılığıyla ürün satın almaya teşvik ediyor. Konuşmacı, bir sonraki videonun kod ve çekirdek optimizasyonları ile gerçek dünyadan bir örneğe odaklanacağını belirterek sözlerini bitiriyor.
Episode 4 - Memory Layout and Access
Episode 4 - Memory Layout and Access
  • 2013.06.18
  • www.youtube.com
In this episode we cover some questions regarding function calls from kernels and the use of clFinish. Also, we'll discuss basic GPU architecture, memory lay...
 

Bölüm 5 - Sorular ve Cevaplar



Bölüm 5 - Sorular ve Cevaplar

Bu videoda sunucu, GPU'lar ve OpenCL programlama hakkındaki soruları yanıtlıyor. Çekirdekler, akışlı çoklu işlemciler ve diğer birimler dahil olmak üzere GPU'ların organizasyon yapısını açıklarlar. Banka çatışmaları ve yerel hafıza kavramı da, banka çatışmalarının nasıl meydana gelebileceğini göstermek için kullanılan bir matris devrik örneği ile ayrıntılı olarak ele alınmıştır. Konuşmacı, yerel veri dizisini doldurmak ve farklı bankalar tarafından hizmet verilen farklı öğeleri okumak da dahil olmak üzere banka çakışmalarını önlemek için çözümler sunar. Son olarak, konuşmacı Mac araştırma web sitesinde kaynakları tanıtıyor ve bir sonraki oturumda optimizasyon teknikleriyle gerçek dünyadan bir örnek sunmayı vaat ediyor.

  • 00:00:00 Bu bölümde OpenCL video serisinin sunucusu bazı soruları ele aldı ve yanıtladı. İlk soru, GPU terminolojisi ve düzeni hakkındaydı ve sunucu, on iş parçacığı işleme kümesi ve iş parçacığı işleme kümesi başına üç akış çoklu işlemci dahil olmak üzere GPU'nun organizasyon yapısını göstermek için bir Nvidia slaytı kullandı. İkinci soru, bir önceki bölümde kısaca değinilen banka çatışmalarıyla ilgiliydi. Sunucu, belirli bir matris devrik örneğine ve banka çatışmalarına yol açabilecek koşullara odaklanarak daha ayrıntılı bir açıklama yaptı. Bölüm, harika hizmetlerinden dolayı barındırma sağlayıcısı Matias'a bir teşekkürle sona erdi.|

  • 00:05:00 Bu bölümde video, GPU'larda çekirdek veya skaler işlemci kavramını açıklıyor. Bu çekirdekler öncelikle ALU ve FPU işlemlerini gerçekleştirir, ancak işlevleri CPU'larda bulunan çekirdeklerden farklıdır. 10 serisi mimarideki her akışlı çoklu işlemci, sekiz çekirdeğe veya akış işlemcisine sahiptir ve GPU'nun işlem gücünü oluşturan toplam 240 çekirdek vardır. GPU'lar, diğerlerinin yanı sıra çift duyarlıklı birimler ve özel işlev birimleri gibi diğer birimlere sahiptir. Video ayrıca banka çakışmalarını ve yerel belleği ve bunların yerel bellekte bellek erişimini nasıl etkileyerek banka çakışmalarına yol açtığını da kapsar. Açıklama, CPU'lar ve GPU'lar için kullanılan farklı terminolojiyle ilgili kafa karışıklığının giderilmesine yardımcı olur.

  • 00:10:00 Bu bölümde konuşmacı, her biri bir kilobayt uzunluğunda 16 kümeye bölünmüş mevcut donanım üzerindeki yerel bellek kavramını açıklıyor. Konuşmacı, ardışık 32 bitlik sözcüklerin ardışık bankalara atandığını ve aynı bankaya iki veya daha fazla eşzamanlı erişimin, bir banka çakışması olarak adlandırılan bellek erişiminin serileştirilmesiyle sonuçlandığını açıklar. Bununla birlikte, konuşmacı, yarım çözgüdeki tüm iş parçacıklarının tam olarak aynı bankaya veya girişe erişmesi durumunda, bunun bir banka çakışmasına yol açmayacağını ve bu durum için özel bir işlem olduğunu not eder. Konuşmacı daha sonra, daha önce sunulan matris devrik örneğinde banka çatışmalarının neden meydana geldiğini ele alarak köşegen boyunca permütasyonu ve birleşik yükleri tartışarak devam eder.

  • 00:15:00 Bu bölümde, konuşmacı, iki yarıya bölünmüş 32 iş parçacığından oluşan bir çözgü örneği aracılığıyla bir matris devrik gerçekleştirildiğinde ortaya çıkabilecek banka çatışması konusunu tartışıyor. Yarım çözgüdeki her iplik bir bankaya atanır ve ideal olarak her iplik belirli bir bankadan okumalı ve bu bankaya yazmalıdır. Bununla birlikte, bir matris devrik gerçekleştirildiğinde, çözgünün farklı yarılarındaki iplikler aynı bankadan okuyacak ve bu da banka çakışmalarına neden olacaktır. Konuşmacı bu konuyu bir diyagram aracılığıyla açıklar ve elemanların kümelere atanması örneği ile ayrıntılı bir açıklama sağlar.

  • 00:20:00 Bu bölümde konuşmacı, CUDA'da diziler ve paylaşılan bellekle uğraşırken banka çakışmalarının nasıl aşılacağını tartışıyor. Yerel veri dizisini hiçbir zaman kullanılmayan ekstra bir değerle doldurarak etkin bir şekilde paylaşılan bellek artar ve bu banka çakışmalarını önler. Artık tüm veri öğeleri, birleştirilmiş ve hizalanmış küresel bellekten okuyor, ancak herhangi bir ceza gerektirmeyen hizalanmamış yerel belleğe yazıyor. Bu işlem, her bir iş parçacığının birer birer ofsetlenmesine ve aynı kümede tüm serileştirme olmadan ardışık öğeleri okumasına izin verir, bu da performansı artırır. Diziler aynı verileri okumaya çalışıyorsa yayına izin verilir, ancak farklı öğeler okunurken serileştirme gerçekleşir.

  • 00:25:00 Bu bölümde, konuşmacı banka ihtilaflarının çözümünün aynı bankalar yerine farklı bankalar tarafından hizmet verilen farklı unsurları okumayı içerdiğini tartışıyor. Belirli bir matris devrik örneğinde sıra çakışmalarına neden olan ana sorun, aynı zamanda çözgü boyutunun yarısına eşit olan sıra boyutuna eşit bir ofset'e erişmektir. Konuşmacı ayrıca, Alman Cormac'ın Kakao uygulamaları yazmaya ilişkin dizisi ve Nvidia'nın GPU programlama için CUDA ve OpenCL kullanımına ilişkin çevrimiçi seminer dizisi de dahil olmak üzere Mac araştırma web sitesinde bulunan çeşitli kaynakları vurgular. Konuşmacı, bir sonraki oturumda, yerel ve paylaşılan bellek pedi kullanmak gibi optimizasyon teknikleri de dahil olmak üzere her şeyi bir araya getirecek gerçek dünyadan bir örnek sunmayı vaat ediyor.
Episode 5 - Questions and Answers
Episode 5 - Questions and Answers
  • 2013.06.18
  • www.youtube.com
This episode covers questions hthat were generated from the previous podcast. We'll discuss GPU layout/terminology and bank conflicts resulting from shared m...
 

Bölüm 6 - Paylaşılan Bellek Çekirdeği Optimizasyonu



Bölüm 6 - Paylaşılan Bellek Çekirdeği Optimizasyonu

Video, özellikle biyolojik moleküllerin elektrostatik özelliklerini anlamak için kullanılan bir kod bağlamında, paylaşılan bellek çekirdeği optimizasyonunu tartışıyor. Bir çalışma grubundaki iş öğeleri arasındaki senkronizasyon noktalarının ve iletişimin kullanılması, programın etkili bir şekilde çalışması için karmaşık hesaplamalar gerçekleştirmenin anahtarıdır. Ayrıca, işbirliği içinde çalışan ve çok miktarda veri getiren paylaşılan bellek, salt okunur verilere daha hızlı erişim sağlar ve daha yüksek erişim hızlarını destekleyerek hesaplamaların performansını artırır. Konuşmacı ayrıca bir ızgaranın sınırında verimsiz işlem hesaplamasından kaçınmanın önemini ve senkronizasyon noktalarının, engellerin ve paylaşılan belleğin doğru kullanımının önemini vurgular. Son olarak, OpenCL çalıştırmanın nüanslarını vurguluyor ve bir Mac'te gerçekleştirilen gösterimle GPU kullanımı için sistem optimizasyonu konusunda tavsiyelerde bulunuyor.

  • 00:00:00 Bu bölümde, konuşmacı paylaşılan bellek çekirdek optimizasyonunu tartışıyor ve gerçek dünya kodunda paylaşılan bellekten nasıl yararlanılacağına dair bir örnek sunuyor. Paylaşılan belleğin salt okunur verilere daha hızlı erişim sağladığını ve bunun da hesaplamaların performansını hızlandırabileceğini açıklıyor. Biyolojik moleküllerin elektrostatik özelliklerini anlamak için kullanılan bir programdan türetilen örnek kod, karmaşık hesaplamalar yapmak için bir çalışma grubundaki iş öğeleri arasındaki senkronizasyon noktalarının ve iletişimin kullanımını vurgular. Genel amaç, performansı ve verimliliği artırmak için donanım özelliklerinden nasıl yararlanılacağını göstermektir.

  • 00:05:00 Bu bölümde konuşmacı, kavramsal olarak her türlü soruna uygulanabilen bir ızgaranın sınırındaki hesaplamayı verimli bir şekilde ele almanın önemini tartışıyor. Hesaplama, modeldeki tüm atomların ızgara merkezli veya atom merkezli bir yaklaşım kullanılarak yapılabilen her bir ızgara noktasına katkısının hesaplanmasını içerir. Atom merkezli yaklaşım, seri hesaplamada iyi sonuç verirken, paralel bir ortamda değerlerin üzerine yazılmasından dolayı verimsiz olabilir. Bu nedenle, ızgara merkezli yaklaşım daha iyi bir yaklaşımdır, çünkü her ızgara noktası yalnızca verileri okuyacaktır, bu da kilitlere ve azaltmalara erişimleri olmadığı için GPU'lar için optimize etmeyi kolaylaştırır. Konuşmacı ayrıca bu hesaplamada CPU ve GPU arasındaki performans farklarını göstereceklerinden bahsediyor.

  • 00:10:00 Bu bölümde paylaşımlı bellek ve ızgara merkezli yaklaşım tartışılmaktadır. Hesaplama sırasında, ızgara noktası değerinin değiştirildiğinden bahsedilir, ancak tüm bu ızgara noktaları için yalnızca bir anlık görüntüye veya değerlerin bir kopyasına sahip olması gerekir. GPU'yu kullanarak, ızgara noktaları, veri erişim hızının performansını artıran çok fazla veri getirmek için işbirliği içinde çalışabilir. Bu yaklaşım kilit gerektirmez ve hesaplama tamamlandığında tüm ızgara noktaları tamamen güncellenir, bu da diğer değerlere adım atan ızgara noktalarını önler. Kodun çekirdek kısmı etkin bir şekilde aynıdır ve ızgara yinelemesi, ızgara noktalarının sayısına eşit olan nd aralık haline gelir. Paylaşımlı bellek kavramı da tanıtıldı, bu da iş parçacıklarının verileri daha büyük alanlarda getirmesine izin vererek hepsinin verilere mümkün olan en kısa sürede erişmesine izin veriyor.

  • 00:15:00 Bu bölümde, konuşmacı paylaşılan hafızayı tanıtıyor ve nasıl çalıştığını açıklıyor. Paylaşılan belleğin, skaler işlemcilerin paylaşması gereken SM başına 16 kilobayt kullanılabilir alan sınırı vardır. Tipik olarak, sorun bayt bayt düzeyinde ele alınmaz, ancak değişkenler veya int'ler kullanılır, bu da paylaşılan bellekte genellikle daha az kullanılabilir öğe olduğu anlamına gelir. Konuşmacı, yerel boyutun (64 öğe) beş katı bir paylaşılan bellek bloğu ayırdıklarını açıklıyor ve onlara, her çalışma grubu 64 öğe genişliğinde olacak şekilde, çalışma grubu başına kullanılacak 1280 baytlık bir blok veriyor. Bu bloğu beş gruba ayırdıklarını ve ofsetleri kullanarak bu verilere nasıl endeksleneceklerine dair talimatlar sağladıklarını detaylandırıyorlar.

  • 00:20:00 Videonun bu bölümünde, konuşmacı paylaşılan bellek çekirdeklerini optimize etmenin bir yöntemini açıklıyor. Toplam atom sayısı yerel boyutun katı değilse, kodun atomların yerel boyutunu ayarlamak için bir güvenlik önlemi olduğunu açıklıyor. Konuşmacı, kodda bir performans hatası olduğuna dikkat çekiyor ve izleyicileri bu hatayı bulmaya davet ediyor. Kod, iki gruba ayrılmıştır; burada birincisi, her şeyin yolunda olduğundan emin olmak için tümünü yakalama ve ikincisi, paylaşılan belleği kullanan bir kopyalama işlemidir. Donanım, tüm iş parçacıklarının sıralı adreslerle genel bellekten gelen verilere eriştiğini algılar ve belleğe tam birleşik bir yükleme yaparak ilk engeli aşar. Konuşmacı daha sonra bir bariyer ihtiyacını tartışır ve yarım çözgülerin paylaşılan bellekten gelen yüke hizmet verdiği süreci gösteren bir slayt gösterir.

  • 00:25:00 Bu bölümde kernel optimizasyonunda bariyer kullanmanın önemi tartışılmaktadır. Bir çalışma grubundaki herhangi bir iş öğesinin bir sonraki aşamaya geçebilmesi için gerekli tüm verilerin paylaşılan belleğe yüklenmesini sağlamak için bir bariyere ihtiyaç vardır. Engeller olmadan elde edilen değerler yanlış olacaktır. Hesaplama kodu kilit adımında yürütülür, ancak bir çalışma grubundaki tüm iş parçacıkları paylaşılan bellekteki aynı öğeye eriştiğinde yayına izin vererek banka çakışmalarını önler. Bariyer ayrıca, paylaşılan belleğe yeni veriler yazılmadan önce tüm çözgülerin hesaplamalarını tamamlamasını sağlayarak paylaşılan bellekteki verilerin üzerine yazılmasını önlemeye yardımcı olur. Xcode projesinin gösterimi ve nasıl çalıştığı da tartışılan kavramların daha iyi anlaşılmasını sağlamak için gösterilmiştir.

  • 00:30:00 Videonun bu bölümünde sunum yapan kişi, çekirdek performansını optimize etmek için gerekli araçları ve yapılandırmaları tartışıyor. Sunucu, LLVM GCC 4.2 clang 1.0'ı OpenMP for OpenMP desteği ile kullanmaktan ve düzenli optimizasyonların açık olduğundan bahsetmektedir. Video daha sonra bellek oluşturma ve doldurma, skaler hesaplama ve CPU'nun skaler hesaplamasını OpenMP ile paralel olarak çalıştırma dahil olmak üzere ana hesaplamalara geçer. Son olarak, bir temizleme işlemiyle birlikte optimize edilmiş GPU hesaplaması sunulur. Video ayrıca, aygıt bilgilerinin yazdırılması ve çekirdek dosyası sorunlarının sorgulanması hakkında bilgiler gibi yardımcı program rutinleri için kod parçacıkları içerir.

  • 00:35:00 Bu bölümde, konuşmacı mdh programı için çekirdeğin ayarlanmasıyla ilgili adımları açıklar; bu, paylaşılan bellek ve veri yazacak bellek için bellek ayırmayı içerir. Küresel çalışma boyutu, ayarlanan ızgara noktalarının sayısına eşittir ve yerel çalışma boyutu 64'tür. Konuşmacı, çalışma grubu boyutunun bir deneme yanılma meselesi olduğunu ve OpenCL'nin iyi bir çalışma olduğunu düşündüğü bir öneride bulunabileceğini belirtir. grup boyutu. Ancak, farklı çalışma grubu boyutlarıyla oynayarak, konuşmacı 64'ün en iyi sonucu verdiğini gördü. Konuşmacı, OpenCL kurulumunun OpenMP'ye kıyasla daha fazla çalışma gerektirebileceğini, ancak optimize edilmiş GPU kodundaki performans iyileştirmelerinin GPU'ları kullanmaya değer olduğunu belirtiyor.

  • 00:40:00 Bu bölümde, konuşmacı CPU üzerinde skaler hesaplamalar yapar ve bunun 32 saniye sürdüğünü gösterir, ancak 16 CPU'da yaklaşık 25 saniye sürer ve 10x hızlanma gösterir. GPU üzerinde çalıştırıldığında, tek bir CPU'dan 20 kat daha hızlı olan 1,2 saniye sürer. Ek olarak, hem CPU hem de GPU hesaplamalarından elde edilen sayıların aynı olması, GPU için kodu optimize etmenin faydalı olduğunu gösteriyor. Hoparlör, grafik kartında önleyici kesinti olmaması nedeniyle donmuş gibi görünebileceğinden, yalnızca bir grafik kartı olan bir sistemde örnekler çalıştırırken dikkatli olmaları konusunda kullanıcıları uyarır.

  • 00:45:00 Bu bölümde konuşmacı, OpenCL çalıştırılırken oluşabilecek bazı olası sorunları tartışıyor ve kullanıcılara dikkatli olmalarını tavsiye ediyor. Mümkünse iki grafik kartına sahip olmanızı ve birini görüntülemeye, diğerini OpenCL'yi işlemeye atamanızı önerir. Konuşmacı ayrıca, sistem tıkanırsa, kullanıcıların kontrolü yeniden kazanmak için SSH'ye girip süreci sonlandırabileceğini de not eder. Kullanıcılara, tüm bilgilerin podcast'e abone olabilecekleri ve bir Amazon mağazası aracılığıyla kar amacı gütmeyen kuruluşu destekleyebilecekleri Mac araştırma web sitesinde mevcut olduğunu hatırlatır. Son olarak dinleyicileri, OpenCL spesifikasyonu hakkında değerli kaynaklar sağlayan Chronos grup web sitesini ziyaret etmeye teşvik ediyor.
Episode 6 - Shared Memory Kernel Optimization
Episode 6 - Shared Memory Kernel Optimization
  • 2013.06.18
  • www.youtube.com
In this episode we'll go over an example of real-world code that has been parallelized by porting to the GPU. The use of shared memory to improve performance...
 

AMD Developer Central: OpenCL Programlama Web Semineri Serisi. 1. Paralel ve Heterojen Hesaplamaya Giriş


1-Paralel ve Heterojen Hesaplamaya Giriş

Bu YouTube videosundaki konuşmacı, CPU'lar ve GPU'lar gibi birden çok işlem bileşenini tek bir sistemde birleştirmeyi içeren paralel ve heterojen hesaplamaya genel bir bakış sunar. Paralel ve heterojen bilgi işlem için programlama modelini basitleştiren ve karmaşıklığı azaltırken yüksek performans sağlayan bir çip üzerindeki füzyonla ilgili sistemlerin faydaları tartışılmaktadır. Konuşmacı ayrıca veri paralelliği ve görev paralelliği, paralel programlama modelleri için programlama dilleri ve MDS GPU'lar ile Intel CPU'lar arasındaki dengeler gibi farklı yaklaşımları tartışır.

Video, Intel'in Sandy Bridge'i gibi yeni mimarilere odaklanarak paralel ve heterojen bilgi işlemdeki son gelişmeleri anlatıyor. Ancak, programlama modeli sorusuna şu anda net bir çözüm yoktur. AMD ve Intel ilerlemelere öncülük ediyor, ancak bu alanın zaman içinde ilerlemeye devam etmesi bekleniyor.

  • 00:00:00 Videonun bu bölümünde, AMD'de programlama tarafında mimar olan Benedict Gaster, heterojen hesaplamaya ve bunun paralel programlamadaki önemine genel bir bakış sunuyor. Heterojen bilgi işlemin donanım ve yazılım yönlerini tartışmadan önce paralel hesaplamada kullanılan paralellik ve eşzamanlılık gibi terminolojiyi açıklıyor. AMD'nin, GPU ve CPU'nun aynı silikon üzerinde olduğu füzyon tabanlı mimarilere doğru ilerlediğini belirtiyor ve paralel programlama vizyonları hakkında bazı bilgiler veriyor. Ek olarak, OpenCL'nin CUDA'ya benzer olduğunu ve GPU'larda verimli bir şekilde çalışmak üzere tasarlanmış bir veri paralel dili olduğunu belirtiyor.

  • 00:05:00 Bu bölümde konuşmacı, hesaplamanın bölümlerinin bağımsız olduğu ve performansı artırmak için eşzamanlı olarak yürütülebildiği hesaplamada paralellik kavramını tartışıyor. Bu, potansiyel olarak paralelliği etkinleştirebilecek süreçler veya iş parçacıkları arasındaki iletişime izin veren bir programlama soyutlaması olan eşzamanlılığın tersidir, ancak bu bir gereklilik değildir. Heterojen bilgi işlem, önemli yapısal farklılıklara sahip iki veya daha fazla bilgi işlem motorundan oluşan bir sistem olarak da tanıtılmaktadır. Konuşmacı, GPU'ların bu tür motorlara bir örnek olduğunu ve büyük önbelleklerin olmamasının CPU'lardan önemli bir fark olduğunu belirtiyor.

  • 00:10:00 Bu bölümde konuşmacı, CPU'lar ve GPU'lar gibi birden çok işlem bileşenini tek bir birleşik sistemde birleştirmeyi içeren paralel ve heterojen bilgi işlem fikrini tanıtıyor. CPU'lar düşük gecikme süresinde iyiyken, GPU veri paralel işlemleri için idealdir. Zorluk, özellikle geleneksel PCIe veriyolu aralarında bir darboğaz oluşturduğundan, bu bileşenlerin maliyet ve performansını birlikte yönetmektir. Çözüm, bileşenleri ortak belleğe sahip tek bir silikon kalıba entegre etmektir. Derleyiciler bir miktar paralelliği kolaylaştırabilirken, konuşmacı bunu tam olarak başarmak için açık paralel programlama modellerini savunur.

  • 00:15:00 Bu bölümde konuşmacı, bilgi işlem mimarilerinin tek çekirdekli işlemcilerden çok çekirdekli işlemcilere ve şimdi de GPU'larla heterojen çağa geçişini açıklıyor. SMP tarzı mimariler, güç ve ölçeklenebilirlik sorunları nedeniyle zorlayıcı hale gelirken, GPU'lar, yüksek performanslı bilgi işlem için uygun hale getirerek, bol miktarda veri paralelliği ile güç açısından verimli ve geniş veri paralelliği sunar. Bununla birlikte, programlama modelleri ve iletişim ek yükleri hala zorluklar içermektedir ve optimum uygulama performansı için CPU ve GPU işlemenin bir kombinasyonu gereklidir.

  • 00:20:00 Bu bölümde konuşmacı, bellek bant genişliğinin arttığını ancak floplarla aynı hızda olmadığını kabul ederek GPU cihazlarında bant genişliği ve belleğin gelişimini tartışıyor. GPU, bir CPU'nun başarabileceğinin çoğunu başarabilirken, yazılım evreninin sahibi x86 CPU olduğundan ve tüm uygulamaların birdenbire paralel uygulamalar olarak ortaya çıkmayacağından, dengeli bir yaklaşıma ihtiyaç olduğunu savunuyor. GPU hala oyunun kurallarını değiştiriyor, ancak birbirinden ödün vermeden temel avantajları elde etmek için iki cihazı bir araya getirmeye ihtiyaç var.

  • 00:25:00 Bu bölümde konuşmacı, bir çip üzerinde füzyonla ilgili sistemlerin (SoC) faydalarını ve bunların farklı türde cihazları tek bir çipe nasıl entegre ederek her iki dünyanın da en iyisini sağladığını tartışıyor. Füzyon GPU'nun tek bir kalıbın içine taşındığı ve CPU ile GPU arasındaki bellek bant genişliğinde önemli bir artışa izin verdiği füzyon APU tabanlı PC de tanıtıldı. Füzyon GPU ve CPU, iki cihazı birleştirerek aynı sistem belleğini paylaşır. Konuşmacı ayrıca saf işlevsel programlama dilleri, bunların mevcut diller üzerindeki etkileri ve CPU görevlerini yerine getirmek için GPU'ları kullanma hakkındaki soruları da ele alıyor.

  • 00:30:00 Bu bölümde konuşmacı, paralel ve heterojen bilgi işlem için programlama modelini basitleştirme ve karmaşıklığı azaltırken yüksek performans sağlama konusunda geleceğin füzyon GPU'larının potansiyelini tartışıyor. Bellek bant genişliği ve gecikme açısından tavizler olsa da, füzyon GPU'ları, CPU ve GPU için paylaşılan bellekle mobil form faktörlerinde işleme yetenekleri sunarak birden fazla kopya ihtiyacını ortadan kaldırır ve performansı artırır. Mimarinin ölçeklenebilirliği, onu mobilden veri merkezine kadar çeşitli platformlar için uygun hale getirir ve ilk nesil APU'lar, bellek bant genişliği başına gigaflops sorununu tamamen çözemese de, programlamayı basitleştirme ve yüksek performans elde etme konusunda gelecekteki potansiyel devam etmektedir. umut verici.

  • 00:35:00 Bu bölümde konuşmacı, heterojen bir dünyada yazılımın programlamayı nasıl etkilediğinden bahsediyor. Gelecek paraleldir, yani programlama çok sayıda farklı cevabı olan paralelliğe uyum sağlamak zorunda kalacaktır. Paralel programlama modelleri için, kaba taneli iş parçacığı api'leri kullananlar veya soyutlamalara odaklananlar gibi çeşitli diller vardır. Konuşmacı ayrıca, programlamadaki paralelliğin görevlerin ayrıştırılmasından ve veri ayrıştırmalarından kaynaklandığını ve görev tabanlı modellerin ve çalıştırma sürelerinin, görevler arasında bağımlılıklar oluşturmak, aralarında iletişim kurmak ve hız sağlamak için yük dengeleme gerçekleştirmek için bu özelliklere sahip olması gerekeceğini belirtiyor. yukarı hesaplama. Günümüzde bunların çoğu örneği, Intel ve Apple gibi şirketler tarafından sunulan CPU'ya yönelikken, çalışma zamanı için Microsoft'un en son net'i, yönetilen dil perspektifleri için en belirgin olanıdır.

  • 00:40:00 Bu bölümde, konuşmacı özellikle veri paralelliği ve görev paralelliğine odaklanarak paralel hesaplamaya yönelik farklı yaklaşımları tartışıyor. Veri paralelliği, bir oyundaki parçacık sistemleri gibi bağımsız öğeler üzerinde paralel olarak çalışmayı içerirken, görev paralelliği, birbiriyle iletişim kurması gereken bağımsız iş parçalarını içerir. Konuşmacı, bu yaklaşımlar için OpenCL, CUDA ve OpenMP gibi popüler dillerden bahseder. Konuşmacı ayrıca örgülü paralellik olarak bilinen bu iki yaklaşımın bir kombinasyonunun geleceğin gelişmekte olan programlama modeli olabileceğini öne sürüyor. Konuşmacı, ana akım programlamaya paralellik getirmek için bu farklı modelleri birleştirme ihtiyacını vurguluyor.

  • 00:45:00 Bu bölümde, konuşmacı OpenCL'nin CPU'ları programlamak için kullanılıp kullanılamayacağını tartışıyor ve kaynak dil taşınabilirliğine sahip olmak mümkün olsa da performans taşınabilirliği bir sorun. Örneğin, bir GPU'da çok sayıda iş parçacığı olması, bir CPU'da mantıklıdır, bir çekirdek üzerinde çalışan yalnızca bir iş parçacığına sahip olmak daha etkilidir. Ek olarak, GPU'lar için hata ayıklama araçları gelişiyor ancak yine de karmaşık olabiliyor ve bir APU'daki GPU çekirdeğinin tüm GPGPU görevlerini yerine getirmesi oldukça olası olsa da, ayrık GPU grafikleri yönetiyor, tam dağılımı tahmin etmek zor.

  • 00:50:00 Bu bölümde konuşmacı, paralel ve heterojen bilgi işlemle ilgili birkaç soruyu yanıtlıyor. Sorulardan biri OpenCL'nin Nvidia GPU'larda kullanılıp kullanılamayacağıdır. Konuşmacı, Nvidia'nın OpenCL'yi desteklediğini ve CUDA ile aynı ailedeki tüm GPU'larında çalışabileceğini onaylıyor. Diğer bir soru ise füzyon GPU'nun ayrık GPU'dan ne kadar farklı olduğu ve cevabı da çok benzer oldukları ancak işlemci ve silikon tasarımına bağlı olarak ufak tefek farklılıklar olduğu. Konuşmacı ayrıca, paylaşılan bellek CPU ve GPU için ikisi arasında sıfır kopyaya izin veren bir OpenCL uzantısı olduğundan bahseder. Mobil alanda OpenCL'nin ortaya çıkışı hakkında soru sorulduğunda, konuşmacı tüm büyük satıcıların mobil alan için OpenCL'nin geliştirilmesine dahil olduğunu ve uygulamanın yakında hazır olacağını onaylıyor. Son olarak, konuşmacı Fusion'ı Intel Sandy Bridge ile karşılaştırıyor ve SOC tasarımlarının ve güçlü heterojen sistemlerinin benzer olduğunu belirtiyor.

  • 00:55:00 Bu bölümde konuşmacı, MDS GPU'lar ile Intel CPU'lar arasındaki dengeyi tartışıyor ve her ikisinin de avantajları olduğundan bahsediyor. Ayrıca programlama modellerine ve hem CUDA hem de OpenCL'nin nasıl CPU desteğine sahip olduğuna değinirler. Konuşmacı, veri madenciliği, görüntü işleme ve hızlanan yapay zeka ve fizik tabanlı sistemler gibi bu teknolojiden yararlanabilecek uygulamalardan bahsetmeye devam ediyor. Ayrıca geleneksel süper bilgi işlem uygulamalarının matris çarpımı gibi hızlandırıcı işlemlerden faydalanabileceğinden de bahsediyorlar. Konuşmacı, bu heterojen sistemlerin ortaya çıkışına ve bunların bilgi işlemin geleceğini nasıl şekillendireceğine olan inançlarını belirterek sözlerini bitiriyor.

  • 01:00:00 Bu bölümde, konuşmacı özellikle Intel'in Sandy Bridge'i gibi yeni mimariler açısından paralel ve heterojen bilgi işlemde kaydedilen gelişmeleri tartışıyor. Bununla birlikte, programlama modeli sorusuna hala tam bir cevap yoktur. AMD ve Intel gibi şirketler öncülük ediyor, ancak ilerlemelerin zaman içinde yapılmaya devam etmesi bekleniyor.