Ticarette OpenCL - sayfa 3

 

AMD Developer Central: OpenCL Programlama Web Semineri Serisi.2. OpenCL'ye Giriş



2- OpenCL'e Giriş

Bu video, hesaplamaları hızlandırmak için CPU'ları ve GPU'ları kullanabilen bir paralel bilgi işlem platformu olan OpenCL'ye ayrıntılı bir giriş sağlar. OpenCL'de yazılan programlar, farklı platformlarda taşınabilir koda izin vererek farklı cihazlarda ve mimarilerde yürütülebilir. Video, veri paralelliği ve görev paralelliği dahil olmak üzere OpenCL'deki farklı yürütme modellerini tartışır ve ayrıca bellek nesneleri, komut sıraları ve çekirdek nesneleri gibi OpenCL'de kullanılan farklı nesneleri ve komutları kapsar. Video ayrıca, açık bellek yönetimi ihtiyacı ve paralel programlarda önemli performans iyileştirme potansiyeli gibi OpenCL kullanmanın avantajlarına ve sınırlamalarına da değiniyor.

  • 00:00:00 Bu bölümde, konuşmacı OpenCL'yi ve paralel hesaplamaları hızlandırmak için önemli hız artışları sağlayan CPU'ları ve GPU'ları kullanma becerisini tanıtıyor. Bazen 100X veya 1000X gibi rakamlar alıntılansa da, gerçekçi olarak optimize edilmiş programlar için yaklaşık 10-20X hızlanmaları beklenir. OpenCL, farklı cihazlar ve mimariler arasında taşınabilir kod yazabilir; bu nedenle, AMD GPU'ları için yazılan programlar tipik olarak NVIDIA GPU'larında da çalışabilir. AMD uygulamasıyla, diğer bazı rakiplerin uygulamalarından farklı olarak, OpenCL'nin hem CPU hem de GPU uygulaması sağlanır. Bu bölüm, heterojen hesaplamaya genel bir bakış ve OpenCL'nin buna nasıl uyduğu ile sona ermektedir.

  • 00:05:00 Bu bölümde konuşmacı, uygulama doğru özelliklere sahipse performans açısından ödüllendirici olabilecek, düşük seviyeli ve ayrıntılı bir platform olan OpenCL'ye giriş sağlar. OpenCL, bir ana bilgisayar API'sinden, bağlı cihazların bir modelinden ve bir bellek modelinden oluşan platform tabanlı bir modeldir. Cihazlar, bilgi işlem birimlerinin bir koleksiyonu olarak görülür ve her işlem birimi, SIMD'de yürütülen işleme öğelerine bölünür. Yürütme modeli, birden çok veri üzerinde paralel olarak yürütülebilen yürütülebilir kod birimi olan çekirdek kavramına dayanır. Ek olarak OpenCL, sıralı veya sıra dışı olabilen okuma ve yazma işlemlerinin eşzamansız yürütülmesine ve çekirdek yürütülmesine izin veren bir dizi kuyruk sağlar.

  • 00:10:00 Bu bölümde, konuşmacı OpenCL'deki iki ana yürütme modelini tartışıyor: veri paralelliği ve görev paralelliği. Veri paralel modeli, GPU'larda yürütme için en verimli olanıdır ve her bir öğenin potansiyel olarak paralel olarak yürütülebilen bir iş öğesi olarak adlandırıldığı N boyutlu bir hesaplama alanı içerir. İş öğelerinin yürütülmesi, mevcut bilgi işlem birimlerinden birinde yürütülen iş grupları adı verilen yerel boyutlarda gruplandırılabilir. Konuşmacı ayrıca OpenCL'nin veri paralel dünyasında döngünün nasıl örtülü olduğunu ve get global tanımlayıcı rutininin a ve b'yi indekslemek için nasıl kullanıldığını açıklar.

  • 00:15:00 Bu bölümde konuşmacı, önbelleğe benzeyen ve kullanıcı tarafından yönetilen, düşük gecikmeli ve global bellekten daha hızlı olan yerel belleği tartışır. Senkronizasyon işlevi, iş öğelerinin bir bellek konumuna yazılmasına, tamamlanmasını beklemesine ve ardından başka bir iş öğesinin bu bellek konumunu okumasına ve önceki iş öğesi tarafından yazılan değeri almasına olanak tanır. Senkronizasyon yalnızca çalışma grubu içinde yapılabilir. OpenCL ayrıca, tek bir iş öğesi tarafından yürütülen görev paralelliğini destekler ve yerel olarak derlenmiş koda olanak tanıyan OpenCL kuyruk modeli ve ana bilgisayar API'sinin senkronizasyon özelliklerinin kullanılmasından yararlanır. OpenCL, belirli GPU'ların bellek hiyerarşisinin açıkça ortaya çıkması ve programcının bariyer işlemleri ve senkronizasyon kullanımı yoluyla verilerin sıralanmasını ve tutarlılığını tetikleyebilmesi bakımından C'den farklıdır.

  • 00:20:00 Bu bölümde konuşmacı, güçlü performans yetenekleri gibi OpenCL'nin avantajlarını tartışıyor. Bununla birlikte, OpenCL'deki bellek yönetiminin, karmaşık olabilen ve algoritmanın dikkatli bir şekilde değerlendirilmesini gerektiren açık işlemler gerektirdiğine dikkat çekiyorlar. Derleme modeli OpenGL'ye dayalıdır ve çevrimiçi derleme için OpenCL kaynak kodunun akışlarını veya dizelerini geçirmeye izin veren bir çevrimiçi derleme modeline sahiptir. OpenCL bağlam etrafında inşa edilmiştir, bir aygıt koleksiyonu ve bellek nesneleri ve bağlamla ilişkili belirli bir aygıta iş göndermek için kuyruklar kullanılır. Bellek nesneleri, diziler olarak düşünülebilecek tek boyutlu bellek blokları olan arabelleklerdir.

  • 00:25:00 Bu bölümde konuşmacı, bellek nesneleri, resimler, programlar ve çekirdekler dahil olmak üzere farklı OpenCL nesnelerini açıklar. Bellek nesneleri, arabellekler veya görüntülerin erişimi optimize etmek için bir donanım uygulamasına sahip olduğu görüntü türleri olabilir. Yürütme için çekirdekleri tanımlayan programlar oluşturulabilir ve ayıklanabilir ve çekirdek bağımsız değişken değerleri, çekirdek nesneleri kullanılarak ayarlanabilir. Komut kuyrukları, yürütme için çekirdekleri ve diğer komutları kuyruğa almak için kullanılır. Ek olarak, OpenCL olayları, komutlar arasında bağımlılıklar oluşturmak ve komutların durumunu sorgulamak için kullanışlıdır. Konuşmacı ayrıca cihazların ve kimliklerinin nasıl sorgulanacağına dair örnekler verir.

  • 00:30:00 Bu bölümde konuşmacı, OpenCL'nin hata kodlarını ve nesneleri nasıl döndürdüğünü açıklar. Bir işlev bir CL nesnesi döndürürse, sonuç olarak o nesneyi döndürür. Ancak bir CL nesnesi döndürmüyorsa, sonuç olarak hata kodunu döndürür. Bağlam tartışılır ve bağlam düzeyinde belleğin nasıl tahsis edildiği, yani arabelleklerin ve görüntülerin cihazlar arasında paylaşıldığı anlamına gelir. Konuşmacı ayrıca CL get X info işlevinden, özellikle de geliştiricilerin algoritma için hangi cihazın en uygun olduğunu belirlemek için cihaz yeteneklerini sorgulamasına olanak tanıyan CL get device info işlevinden bahseder. Son olarak, konuşmacı, arabellekleri ve görüntüleri ve çekirdeklerin bunlara nasıl erişebileceğini ve görüntü erişimi üzerindeki kısıtlamaları tartışır.

  • 00:35:00 Bu bölümde, konuşmacı arabelleklere nasıl erişileceğini ve görüntüleri kullanmanın faydalarını açıklayarak OpenCL'de arabelleklerin ve görüntülerin nasıl tahsis edileceğini tartışır. Konuşmacı ayrıca, açık komutlar kullanarak bellek nesnesi verilerine nasıl erişileceğini ve sıradaki komutların bir kuyruğa nasıl girileceğini de açıklar. Ek olarak video, bir bölgenin nasıl haritalanacağını ve arabellekler arasında veri aktarımının yanı sıra DMA birimlerini kullanmanın avantajlarını ve dezavantajlarını açıklıyor. Bölüm, program ve çekirdek nesneleri tartışılarak ve bağımsız değişken değerleri ayarlanarak sona erer.

  • 00:40:00 Bu bölümde, konuşmacı OpenCL'deki dağıtım ve bağımlılıkları tartışıyor. Gönderinin etki alanına veya yürütme ızgarasına göre nasıl yürütüleceğini ve işlerin birbirini geçmemesini sağlamak için bağımlılıkların nasıl ayarlanabileceğini açıklarlar. Konuşmacı ayrıca, bekleme listesindeki olay sayısını ve komutla ilişkili olayı dikkate alan NQ komutu için argümanları da açıklar. Son olarak, konuşmacı, C'ye dayanan ve vektör türleri ve senkronizasyon ilkelleri gibi belirli kısıtlamalara ve eklemelere sahip olan OpenCL C dili hakkında genel bir bakış sunar. Dil, iş öğeleri ve çalışma gruplarının yanı sıra adres alanı niteleyicileri ve yerleşik işlevlere izin verir.

  • 00:45:00 Bu bölümde, konuşmacı OpenCL'ye ve programlama çekirdeklerinde kullanılabilecek farklı adres alanları, vektör türleri ve skaler türler gibi özelliklerine kısa bir genel bakış sunar. Ayrıca bellek nesnelerinin nasıl oluşturulacağını ve OpenCL API kullanılarak programların nasıl oluşturulacağını ve yürütüleceğini tartışırlar. Konuşmacı daha sonra OpenCL'deki veri paralelliğinin derleyicilerdeki döngü açmadan nasıl farklı olduğu hakkında bir soruyu ele alır.

  • 00:50:00 Bu bölümde konuşmacı, veri paralel yürütme kavramını ve bunu verimli bir şekilde yapan bileşenlerin zorluklarını açıklıyor. Ayrıca, programları OpenCL veya başka bir model için açıkça paralel hale getirme ihtiyacını vurgulamaktadır. inq_marker, ele alınan başka bir konudur ve sıra dışı ipuçlarında nasıl yararlıdır. Konuşmacı, sabit belleğin değerlerin sabit olduğu anlamına geldiğini ve özel GPU'larda salt okunur olan çok hızlı sabit belleğe yüklemek için kullanıldığını yineler. OpenCL ve paralel programlama hakkında daha fazla bilgi için MD web sitesindeki OpenCL Zone'a göz atmanızı önerir. Son olarak, get_global_ID(0)'ın çekirdeğin her çağrısı için nasıl aynı değeri döndüreceğinden bahsediyor.

  • 00:55:00 Bu bölümde konuşmacı, iki farklı uygulamanın aynı makinede hem OpenCL'yi çalıştırıp hem de kullanmaya çalıştığında, günümüzdeki tüm uygulamaların donanımı paylaşacağını ve işletim sisteminin uygulamaları çoğaltacağını açıklıyor. OpenCL için Visual Studio eklentisi veya id Donanımı hakkında bilgi sorgulamaya izin veren Linux komut satırı sürümü gibi görsel profil oluşturucuların kullanılmasını önerirler. Görüntü nesnesine veya ara belleğe veri yüklemenin ek yükü, aygıtın PCIe veri yolu aracılığıyla aktarılmasının daha fazla gecikmeye sahip olacağı aygıta bağlı olacaktır. Son olarak konuşmacı, yeni AMD 680 yüz GPU serisinin ve onlar için en iyi programlama uygulamalarının, temel aldıkları Evergreen mimarisine benzediğinden bahsetti.
 

AMD Developer Central: OpenCL Programlama Web Semineri Serisi. 3. GPU Mimarisi



3 - GPU Mimarisi

Bu video, GPU'ların kökenlerini ve grafik işlemciler olarak birincil kullanımını dikkate alarak GPU mimarisine genel bir bakış sağlar. GPU'lar, düşük gecikmeli ardışık düzenlerle skaler işleme için tasarlanan CPU'ların aksine, pikselleri yüksek derecede paralellik ile işlemek için tasarlanmıştır. GPU'ların mimarisi, genel amaçlı hesaplama için uygun olmayabilecek, grafiğe özgü görevler için optimize edilmiştir. Konuşmacı, GPU'nun tek bir iş parçacığının yürütme gecikmesini en aza indirmek yerine bir dizi iş parçacığının verimini nasıl en üst düzeye çıkardığını açıklıyor. Yerel veri paylaşımları, dalga cepheleri ve çalışma grupları dahil olmak üzere GPU motor bloğunun mimarisi de tartışılmaktadır. Video, bağımlı işlemleri tek bir pakette yayınlama ve bağımlı sayaçları küresel beta paylaşımıyla destekleme dahil olmak üzere, derleyicinin yapabileceği paketleme miktarını artırmaya yardımcı olan çeşitli GPU mimarisi özelliklerini araştırıyor. GPU ve CPU çekirdek tasarımları benzer olabilse de, benzer tasarımlara sahip olmaları için iş yüklerinin yakınsaması gerekecektir.

GPU mimarisi hakkındaki bu videoda, konuşmacı bariyer kavramını ve işlevlerini derinlemesine inceliyor. Bir çalışma grubu, bir GPU'da birden fazla dalga cephesi içerdiğinde, bu dalga cephelerini senkronize etmek için bariyerler kullanılır. Bununla birlikte, bir grupta yalnızca bir iş dalga cephesi varsa, engeller anlamsız hale gelir ve işlem dışı kalır.

  • 00:00:00 Bu bölümde sunum yapan kişiler, düşük seviyeli mimariyi veya optimizasyonları açıklayan geleneksel yaklaşıma kıyasla GPU mimarisine farklı bir bakış açısıyla genel bir bakış sağlamak olan web seminerinin amacını tanıtıyor. Sunum yapan kişiler, GPU mimarisini, kökenlerini ve grafik işlemciler olarak birincil kullanım durumunu tartışarak bağlama oturtmayı amaçlıyor. GPU'ların, düşük gecikmeli ardışık düzenlerle skaler işleme için tasarlanan CPU'lardan farklı olarak, pikselleri yüksek derecede paralellik ile işlemek için nasıl tasarlandığını açıklarlar. Sunum yapan kişiler ayrıca, grafiklere özgü görevleri hızlandırmak için tasarlanmış optimize edilmiş donanım blokları nedeniyle GPU'ların mimarisinin genel amaçlı hesaplama için nasıl uygun olmayabileceğine de değiniyor.

  • 00:05:00 Bu bölümde, GLSL veya HLSL'de yazılmış, bağımsız ve tek bir pikselle ilgili olan parçalı programların yürütülmesini ve bu programlama modelinin bağımlılık analizi veya pikseller arası iletişim olmadan verimli paralelliğe nasıl izin verdiğini öğreniyoruz. Donanım, dalga cephesi olarak bilinen, ancak blok kodu ve dallanma sorunuyla birlikte gölgelendirici kodunu aynı anda birden çok pikselde yürütmek üzere tasarlanmıştır. Sorun, tüm dallar aynı yöne gittiğinde bir soruna neden olduğunda ortaya çıkar, ancak donanım, tüm piksellerin aynı talimatı yürütmesini sağlamak için bir maske oluşturur.

  • 00:10:00 Bu bölümde, konuşmacı Cindy uygulamasının nasıl basit talimatlar ve vektör talimatlarının kullanımını gerektirdiğini tartışıyor. Vektör yönergeleri donanım veya derleyici tarafından üretilebilirken, farklı işlemlerin manuel olarak paketlenmesi, dal maskeleme ve dikkatli elle kodlama ihtiyacı nedeniyle geliştirmeyi zahmetli ve zor hale getirebilir. Öte yandan, vektör komutlarını kullanarak Cindy yürütmesini programlamak, geliştiricinin şeritlerin bağımsız olarak dallandığını düşünmesine neden olabilir ki bu doğru değildir. Buna rağmen programcılar için düşünmek daha kolay ve mevcut AMD GPU'lar için maskeleme donanım tarafından kontrol ediliyor. Özellikle daha geniş Waveland'de dal farklılığı söz konusu olduğunda performansı etkileyebileceğinden, konuşmanın amacı olan bilgi işlem için bunun dikkate alınması önemlidir.

  • 00:15:00 Bu bölümde konuşmacı, verimli hesaplamaya dayalı GPU mimarilerinin görünür yönlerini tartışıyor; bu, bir GPU'da bir komut vektörünün durması durumunda kayan nokta toplamanın bazı döngüler alması durumunda gerçekleşebileceği anlamına gelir. tamamlandığında, aynı komut bir sonraki vektördeki duraklama süresini kapsamak için kullanılabilir, bu da komut kod çözme işleminin daha verimli olmasını sağlar. Konuşmacı, ALU'ların kullanımını azaltabilen vektör genişliğini artırmak yerine, birden çok dalga cephesinin diğer çalışan iş parçacığından talimatlara gizlice girebileceğini ve doku birimlerinin bellek verilerini döndürmesini beklerken basitçe durmama olasılığını verdiğini açıklıyor. Ancak, mimarinin çalışma şeklinden dolayı tek bir dalga cephesinin bu şekilde yürütülmesi daha uzun sürer.

  • 00:20:00 Bu bölümde video, GPU'nun tek bir iş parçacığının yürütme gecikmesini en aza indirmek yerine bir dizi iş parçacığının verimini nasıl en üst düzeye çıkardığını açıklıyor. Bu, GPU'nun ilk iş parçacığının yürütmeyi tamamlamasını bekleyip sonraki dalga cephesini besleyerek iş parçacıklarının kullanımını artırmaya çalıştığı ve ilk piksel kümesinin sonuçlarının iş hattını tam doluluğa olabildiğince yakın tutmak için yeniden kullanıldığı anlamına gelir. . GPU, hareket halindeki her iş parçacığı için vektörün tüm genişliğini kapsayacak şekilde büyük bir kayıt havuzu tutar ve cihazda durum sayısı ve vektörün genişliği ile ölçeklenen yer kaplar. GPU, gecikmeyi kapsayacak şekilde tasarlanmıştır ve bu nedenle gecikmeyi en aza indirmek yerine, GPU, iş öğeleri arasında verilerin yeniden kullanımı için doku önbelleklerini ve yerel belleği kullanarak tüm paralelliği karşılayabilmesi için mevcut bellek bant genişliğini en üst düzeye çıkarır.

  • 00:25:00 Bu bölümde konuşmacı, önbelleklerin ve program kontrollü paylaşılan bellek bölgelerinin, verilerin ana bellek arayüzünden yalnızca bir kez kopyalanmasına ve ardından farklı iş öğeleri tarafından farklı yollarda yeniden kullanılmasına izin vererek veri aktarımını nasıl azaltabileceğini tartışıyor. Doku önbelleğinin, dörtlüler tarafından 2B erişimleri yakalamak için verileri üzerinde 2B yapıyı otomatik olarak uygulamak için nasıl tasarlandığını açıklıyorlar. Yerel veri bölgeleri önemli ölçüde daha fazla kontrol sağlar, ancak bu belleği kullanmak ve küresel bellek gereksinimlerini azaltmak için verileri paylaşmak için yükleri verimli bir şekilde yapılandırmak geliştiricinin sorumluluğundadır. Bu bölüm ayrıca, GPU'nun ardışık düzen gecikmesini karşılamak için 4, 8 veya 16 iş parçacığını serpiştiren birden çok program durumuna sahip kablolu Cindy çekirdeklerinin bir koleksiyonu olarak nasıl görülebileceğini araştırıyor. Çekirdek sayısı ile ALU yoğunluğu arasındaki ödünleşim, iş yüküne bağlı olarak artan kullanım avantajıyla tartışılmıştır.

  • 00:30:00 Bu bölümde konuşmacı Andy Phenom 2 X6 6 ve Intel i7 gibi örnekler kullanarak CPU ve GPU çekirdek tasarımları arasındaki benzerlikleri ve farklılıkları tartışıyor. Pentium 4 ve ultraSPARC T2'nin benimsediği yaklaşım, yönerge düzeyi paralelliğini artırmak için çoklu durum kümeleriyle daha büyük çekirdek boyutlarını içerse de, GPU'lar yüksek derecede veri dengelemeyle yelpazenin en uç noktasında yer alıyor. AMD Radeon HD 5870'in yüksek bant genişliğine ve her bir dalga cephesi tarafından kullanılan yazmaç sayısına bağlı olarak mevcut eşzamanlı dalga biçimlerinin sayısına işaret edilerek teknik ayrıntıları da tartışıldı. Konuşmacı, CPU ve GPU dokuzları arasında tasarım alanında benzerlikler olsa da, benzer tasarımlara sahip olmaları için iş yüklerinin birleşmesi gerekeceği sonucuna varıyor.

  • 00:35:00 Bu bölümde, yerel veri paylaşımları, dalga cepheleri ve bölündüğü çalışma grupları dahil olmak üzere GPU'nun tasarım öğelerini öğreniyoruz. GPU'nun tasarımı, alana sığacak kadar kaynağa sahip mevcut bir SIMD birimine atanan dalga cepheleri oluşturan bir Albay'ın gönderme komut işlemcisini içerir. Çipin tamamı, çapraz çubuklar ve önbellekler için 8 GDDR5 bellek bankasına sahip 20 Cindy motoruna sahiptir. Buna ek olarak, Cindy motorlarının ve sabit birimlerin, güç performansı ek yükü olmadan mümkün olduğunca yüksek derecede paralel veri yürütmesini sürdürmesine olanak tanıyan, görünürlük haklarını sağlamak için çit talimatları gerektiren rahat bir küresel bellek tutarlılık modeline sahiptir. GPU, yan tümce tabanlı bir yürütme modeli kullanır ve birçok kontrol akışı programını en basit motorda aynı anda yürütmesini sağlar.

  • 00:40:00 Bu bölümde GPU motor bloğunun mimarisi ele alınmıştır. Motor bloğunun iki ana bileşeni vardır: bir çalışma grubundaki iş öğeleri ile test sonrası öğeler arasında veri paylaşımına izin veren yerel veri paylaşımı veya çekirdekteki ALU yan tümcelerinden yönergeleri yürüten akış çekirdekleri. Yerel veri paylaşımında 32 banka vardır, motordaki 16 işleme öğesinin her biri, rastgele adreslerdeki her döngüde LDS'den 32 bitlik sözcükleri okuma veya yazma talebinde bulunabilir ve çakışmalar birim tarafından algılanır. Atomik işlemler, yalnızca tamsayı ALU'lar kullanılarak gerçekleştirilir ve kayan noktalı atomların gerçekleştirilmesi daha karmaşık olacaktır. 5870 mimarisinin işleme öğesi, bazı kendi bağımlılıkları olan ve çoğu temel işlemin yürütülebildiği, derleyici tarafından paketlenen beş işlemden oluşan çok uzun bir talimat kelime paketi üzerinde çalışan beş özdeş ALU'dan oluşan bir kümedir.

  • 00:45:00 Bu bölümde konuşmacı, bağımlı işlemleri tek bir pakette yayınlama ve bağımlı sayaçları küresel beta paylaşımıyla destekleme dahil olmak üzere, derleyicinin yapabileceği paketleme miktarını artırmaya yardımcı olan çeşitli GPU mimarisi özelliklerini açıklar. Küresel beta paylaşımı, cihazdaki tüm bilgi işlem motorları setine bağlı ve diğer anılara erişimden çok daha düşük gecikme süresine sahip, daha az bilinen bir özelliktir. Konuşmacı ayrıca, doku önbelleğindeki rasgele piksellere erişmenin performans sorunlarına neden olabileceği konusunda da uyarıda bulunuyor çünkü bu, yalnızca veriler birlikte kümelenmişse genel bellek erişimi yapmaktan daha hızlı olacaktır.

  • 00:50:00 Bu bölümde konuşmacı, GPU mimarisinde tam doluluğa ulaşma ile ilgili soruları yanıtlıyor. Verilen örnek, çalışma gruplarının tam doluluk elde etmek için 64 iş öğesinin katlarından oluşması gerektiğidir. Dalga cepheleri ve her bir çekirdeğe sığabilen dalga cephelerinin sayısı da tam doluluğu etkiler. Konuşmacı ayrıca, kodun ihtiyaçlarına bağlı olarak yeterince iyi olabilecek veya olmayabilecek hızlı yaklaşımlar olan 5. Şerit tarafından üretilen transandantal fonksiyonların tam kesinlikli versiyonlarının bulunmadığından bahseder. Wavefront boyutunu tüm cihazlarda sorgulamanın bir yolu var mı diye sorulduğunda, böyle bir yol olmadığı şeklinde cevap verilir.

  • 00:55:00 Bu bölümde, konuşmacı bir GPU mimarisinde küresel bellek erişimleri açısından tamamen birleştirmenin ne anlama geldiğini açıklıyor. Temel olarak, bu, çeyrek dalga cephesinin, her şeridin hesaplama birimi boyunca giden hizalanmış adreslerden art arda 128 bite erişeceği bir bellek talebi yayınlayacağı anlamına gelir. Ancak, erişim türüne, bağlı veya bağımsız olmasına ve rastgele bir toplama olup olmadığına bağlı olarak verimlilik seviyeleri vardır. Konuşmacı ayrıca wavefront'un tek bir komutla birlikte yürütülen 64 iş öğesinden oluşan bir iş birimi olduğunu ve bir iş öğeleri kümesi olan bir çalışma grubuyla aynı şey olmadığını da açıklıyor.

  • 01:00:00 Bu bölümde konuşmacı, GPU mimarisindeki bariyer kavramını açıklıyor. Bir çalışma grubunun birden fazla dalga cephesi varsa, bir bariyer talimatı vermek bu dalga cephelerini senkronize edecektir. Bununla birlikte, bir grupta yalnızca bir dalga cephesi varsa, engeller işlem yapılmamasına indirgenecek ve hiçbir anlam ifade etmeyecektir.
 

AMD Developer Central: OpenCL Programlama Web Semineri Serisi. 4 Ayrıntılı OpenCL Programlama



4 - Ayrıntılı OpenCL Programlama

Bu videoda konuşmacı OpenCL programlamaya genel bir bakış sunarak dilini, platformunu ve çalışma zamanı API'lerini tartışıyor. İnce taneli paralelleştirme, iş öğeleri ve grupları veya iş parçacıkları, senkronizasyon ve bellek yönetimi gerektiren programlama modelini detaylandırırlar. Konuşmacı daha sonra n-cisim algoritmasını ve onun sayısal olarak sıralı n-kare doğasını tartışır. OpenCL çekirdek kodunun Newton mekaniğinde parçacıkların konumunu ve hızını nasıl güncellediğini, bir parçacık konumunu depolamak için önbelleği nasıl tanıttığını ve çekirdeğin kayan vektör veri türlerini kullanarak parçacık konumunu ve hızını nasıl güncellediğini açıklıyorlar. Konuşmacı ayrıca, parametreleri ve bağımsız değişkenleri açıkça ayarlayarak, ana bilgisayar ile GPU arasında veri aktararak ve senkronizasyon için çekirdek yürütmesini kuyruğa alarak ana bilgisayar kodunun OpenCL çekirdekleriyle nasıl etkileşime girdiğini araştırır. Son olarak video, birden fazla cihazı desteklemek, GPU'lar arasında verileri senkronize etmek ve bunları temsil eden yarım boyutlu diziler için cihaz kimliklerini ayarlamak için OpenCL kodunun nasıl değiştirileceğini araştırıyor.

İkinci bölüm, OpenCL programlamanın çeşitli yönlerini tartışıyor. Güncellenmiş parçacık konumunu iki dizi arasında senkronize etmek için çift arabellek şeması, OpenCL sınırlamaları ve bellek tahsisinde global ve yerel işaretçiler arasındaki fark gibi konuları kapsar. Ek olarak, profil oluşturma araçları gibi OpenCL uygulamasını analiz etmek için mevcut araçların yanı sıra vektör işlemleri, kontrollü bellek erişimi ve döngü açma dahil olmak üzere OpenCL programlama için optimizasyon tekniklerini vurgular. Sunucu, OpenCL programcıları için bir kaynak olarak OpenCL standardını önerir ve standart ve ATI Stream SDK için URL'ler sağlar. Video ayrıca bellek paylaşımı, kod optimizasyonu, bellek tahsisi ve hesaplama birimi kullanımı gibi konulardaki soruları da ele alıyor.

  • 00:00:00 Bu bölümde, konuşmacı OpenCL kavramlarını tanıtarak hibrit CPU-GPU mimarilerinin ortaya çıkışını ve bunların programlama için ortaya koyduğu zorlukları tartışıyor. OpenCL, sektör çapında destekle platformdan ve cihazdan bağımsız bir API sağlar ve konuşmacı, OpenCL API'nin üç bölümünü ana hatlarıyla belirtir: dil belirtimi, platform API'si ve çalışma zamanı API'si. Yürütme modeli iki bölüme ayrılmıştır: OpenCL aygıtında çalışacak yürütülebilir kodu temsil eden çekirdek ve bellek yönetimini gerçekleştiren ve komut sırasını kullanarak bir veya daha fazla aygıtta çekirdek yürütmeyi yöneten ana bilgisayar programı. Çekirdek programlama için kullanılan C dili uzantısı, paralelliği desteklemek için bazı kısıtlamalar ve eklemelerle birlikte ISO C99'a dayanmaktadır.

  • 00:05:00 Bu bölümde konuşmacı, iş parçacıkları arasında ayrıntılı paralelleştirme ve senkronizasyon gerektiren OpenCL'nin programlama modelini açıklıyor. Çalışma öğeleri ve çalışma grupları iş parçacığı olarak tanıtılır ve senkronizasyon ve paylaşılan belleğe erişim açısından özel özelliklere sahip çalışma grupları halinde gruplandırılır. Konuşmacı ayrıca ana bilgisayar tarafındaki yürütme modelini de ele alarak her şeyin bir aygıt koleksiyonu, program nesneleri, çekirdekler, bellek nesneleri ve çekirdekleri ve belleği veya veri aktarım işlemlerini sıraya koymak için komut kuyruğunu içeren bir bağlamda bir araya toplandığını açıklar. . OpenCL ayrıca, dağıtılmış belleğe sahip hibrit bir sistemdeki belleğin doğasını yansıtmak için farklı bellek türlerinin hiyerarşisini destekler.

  • 00:10:00 Bu bölümde, konuşmacı OpenCL programlamayı kullanırken bellek yönetiminin ve senkronizasyonun önemini tartışıyor. OpenCL'nin rahat bir bellek tutarlılık modeli vardır, bu da veri aktarımlarını yönetme ve verilerin bir cihazdan diğerine ne zaman taşındığını kontrol etme sorumluluğunu programcıya verir. Senkronizasyon, birden fazla cihaz kullanıldığında zorunlu hale gelir ve çekirdek yürütme ve veri aktarımları dahil olmak üzere olayların doğru şekilde senkronize edildiğinden emin olmak programcının sorumluluğundadır. Konuşmacı, OpenCL için basitleştirilmiş bir arayüz olan ve kullanıma hazır, tüm cihazları içeren ve tam OpenCL işlevselliğinden kesintisiz bir varsayılan bağlam sağlayan Standart CL'nin kullanımını tanıtır. Ek olarak, Standart CL, OpenCL cihazları arasında paylaşılabilen belleği tahsis eden CL Maylock aracılığıyla bellek yönetimini basitleştirir.

  • 00:15:00 Bu bölümde konuşmacı, bir tür parçacık-parçacık etkileşimine tabi olan nparçacıkların hareketini modelleyen temel n-cisim algoritmasını tartışıyor. Algoritma, sistemdeki diğer tüm parçacıklarla etkileşimin katkılarını toplayarak her parçacık üzerindeki kuvveti hesaplamayı içerir. Her parçacığın üzerindeki kuvvet bilindiğinde, parçacığın konumu ve hızı küçük bir zaman adımında güncellenir. Bu işlem her parçacık için tekrarlanır ve etkileşim kuvvetlerine bağlı olarak hareket eden bu parçacıkların bir simülasyonu ile sonuçlanır. Algoritma, bellek aktarım bant genişliğinde sınırlamalar olan yardımcı işlemcileri kullanarak iyi bir hızlanmaya izin veren hesaplamalı olarak n-kare düzenindedir. Algoritmanın tamamı, C'de yalnızca birkaç düzine kod satırında yazılabilir.

  • 00:20:00 Bu bölümde konuşmacı, parçacıklar arasındaki etkileşimi biriktiren bir döngü aracılığıyla n-cisim algoritmasının uygulanmasını açıklıyor. Çekirdek kodu, OpenCL perspektifinden iyi uygulamaları kullanarak makul ölçüde standart bir uygulama sağlamak üzere tasarlanmıştır, ancak belirli bir mimari için en uygun olmayabilir. Çekirdek, her iş parçacığının tek bir parçacığın konumunu ve hızını güncellemekten sorumlu olduğu bir dizin alanı içindeki her iş öğesi için yürütülecektir. Uygulama, sistemdeki parçacıkların sayısına eşit iş öğelerinin sayısı ile basit bir tek boyutlu dizin tabanına sahiptir. Ana bilgisayar kodu, OpenCL cihazlarında başlatma, bellek yönetimi ve koordinasyon işlemleri için de gereklidir.

  • 00:25:00 Bu bölümde, konuşmacı Newton mekaniğinde parçacıkların konumunu ve hızını güncellemek için çekirdek kodunu tanıtıyor. Çekirdek kodunun prototipi, bir C işlevininkine benzer, ancak adres alanını ve bir engelleme düzeninin kullanımını nitelendiren bazı niteleyicilerle. Çekirdek kodu ayrı bir dosyada saklanır ve program çalışırken tam zamanında derlemede kullanılır. Konuşmacı daha sonra gerçek fizik hesaplamasına geçmeden önce çekirdek kodunun boyut ve dizin belirlemesini nasıl yaptığını açıklar. Genel ve yerel iş parçacığı kimlikleri de ayrıntılı olarak açıklanır ve konuşmacı, çekirdek sistemdeki her parçacık için otomatik olarak yürütüleceğinden, çekirdek kodunda bir dış döngünün örtük olduğunu not eder.

  • 00:30:00 Bu bölümde, konuşmacı bir önbellek kullanarak ikili kuvvet hesaplaması için OpenCL çekirdeğinin uygulanmasını açıklıyor. Çekirdek, bir parçacık konumunu önbelleğe alır ve önbelleği doldurmak için çalışma grubundaki diğer iş öğelerine de güvenir. 64 parçacık konumu önbelleğe alındıktan sonra, çekirdek, önbelleğe alınmış parçacık konumları üzerinde döner ve OpenCL'ye özgü dikkate değer farklılıklarla C kodunda gösterilen aynı kuvvet hesaplamasını uygular. Bunlar arasında parçacık konumu için bir kayan nokta vektörü, karekök için yerleşik bir OpenCL işlevi ve kolaylık sağlamak için kütlenin kayan nokta vektörünün kullanılmayan dördüncü bileşeninde saklanması yer alır. Çekirdek, kayan vektör veri tipini kullanarak tek bir saatte parçacığın konumunu ve hızını günceller. Son olarak konuşmacı, önbellek doldurma ve döngü işlemleri sırasında senkronizasyon için bariyerlere duyulan ihtiyacı açıklar.

  • 00:35:00 Bu bölümde, diğer iş parçacıkları tarafından hala gerekli olan verilerin üzerine yazılmasını önlemek için yeni konumun ve yeni hızın yeni bir dizide küresel belleğe nasıl geri yazıldığını öğreniyoruz. Bu çift arabelleğe alma şeması, herhangi bir iş parçacığı eşzamanlılığı sorunuyla karşılaşmadan parçacık konumunu güvenli bir şekilde güncellemek için sonraki aşamalarda kullanılır. Çekirdeğin ana bilgisayar kodu uygulamasına geçerek, programın parametreleri nasıl ayarladığını, belleği nasıl tahsis ettiğini, konumları ve hızları nasıl başlattığını, OpenCL çekirdeğini nasıl oluşturduğunu ve derlediğini, gerekli mevcut n-gövde çekirdeğini adıyla sorguladığını, bir tane oluşturduğunu öğreniyoruz. -boyutlu çekirdek hesaplama alanı ve çekirdek bağımsız değişkenlerini açıkça ayarlar. Genel olarak, kod, OpenCL'nin temel C programlarından ne kadar farklı olduğunu, ana bilgisayarın çekirdeği proxy ile yürütmesi ve çekirdek argümanlarının doğrudan nasıl ayarlanması gerektiğini gösterir.

  • 00:40:00 Bu bölümde konuşmacı, bir clm sink çağrısı kullanarak ana bilgisayardan GPU'ya veri aktarma ve çağrıları engellemek için işaretler kullanarak cihazdaki dizileri (GPU) senkronize etme sürecini açıklar. Ardından, tanılama amaçları için kullanılacak değer ve çoğuşmayı tanıtarak ve çift ara belleğe alma için iki ve üç çekirdek bağımsız değişkenlerini ayarlamayı geciktirerek döngü adımlarını tartışırlar. Konuşmacı, çekirdek yürütmenin kuyruğa alındığını ve devam etmeden önce tüm çekirdek yürütmelerinin tamamlandığından emin olmak için CL bekleme eşitleme çağrısının kullanıldığını not eder. Son olarak, CL enqueue okuma arabelleğini kullanarak verileri GPU'dan ana bilgisayara geri getirirler.

  • 00:45:00 Bu bölümde video, kodu birden fazla cihazı destekleyecek şekilde değiştirmeyi, özellikle kodu iki GPU'da çalıştırmayı tartışıyor. Yaklaşım, parçacıkların yarısından bir GPU sorumlu olacak şekilde kuvvet hesaplaması ve parçacık konumunun güncellenmesi işini iki GPU arasında bölmeyi içerir. Çekirdek kodu, belirli bir GPU'nun güncellemeden sorumlu olmadığı, ancak yine de toplam kuvveti hesaplamak için ihtiyaç duyduğu parçacıkların parçacık konumlarına işaret eden "uzak konum" adlı prototipe eklenen ek bir argümanla çok az değişim görüyor. . Ana bilgisayar tarafında, iki cihazın kullanılması nedeniyle ortaya çıkan bellek yönetimi ve senkronizasyon sorunlarını içeren dikkate değer değişiklikler var.

  • 00:50:00 Bu bölümde ders, parçacık simülasyonunu iki GPU'da gerçekleştirmek için çekirdek kodunda yapılması gereken değişiklikleri açıklar. Önbellek parçacığı konumları üzerindeki döngü, öncekiyle aynı kalır, ancak 21. satırdan önce, döngü artık GPU'nun sahip olduğu yerel parçacık konumları üzerindedir. Kod daha sonra diğer GPU'nun güncellemekten sorumlu olduğu uzak parçacıklar için tekrarlanır. Parçacık konumunu ve hızını güncelleme kodu aynı kalır. İki GPU'nun ana bilgisayar kodunu değiştirmek için başlatma aynı kalır, ancak parçacıkların yarısını tutan parçacık konumları ve hızları için diziler de tahsis edilir; A ve B, iki GPU'yu temsil eder. Orijinal boyutun yalnızca yarısı kadar bir indeks uzayına sahip bir hesaplama alanı yaratılır ve argüman işaretçisini hız dizisine statik olarak ayarlamak için kullanılan kod kaldırılır.

  • 00:55:00 Bu bölümde, yarım boyutlu diziler üzerinden ilgili GPU'lara kopyalanırken verilerin hangi GPU'ya yazılacağını belirlemek için cihaz kimliğinin nasıl ayarlanacağını öğreniyoruz. Birden çok GPU arasında veri alışverişi yapmak için, onları temsil eden yarım boyutlu parçacık dizilerini değiştirerek güncellenmiş parçacık konumlarını GPU'lara geri senkronize etmemiz gerektiğini de görüyoruz. Ayrıca OpenCL'nin bazı uygulamaları için, gerçek uyum için bir CL floş çağrısı yapılması gerekebileceğini öğreniyoruz, ancak bu standardın bir parçası değil.

  • 01:00:00 Bu bölümde sunum yapan kişi, eski ve yeni parçacık konumlarını iki dizi arasında değiştirmek için çift arabellek şemasını uygulayan kodu gözden geçirir. Bu şema, güncellenen parçacık konumlarının A veya B dizisine geri konmasını sağlar. Parçacıklar ana bilgisayarla senkronize edildikten sonra, yardımcı işlevlerin bazılarını yeniden kullanmak için daha büyük diziye geri kopyalanmaları gerekir. Sunucu, OpenCL programcıları için gerekli bir kaynak olarak OpenCL standardını önerir ve standart ve ATI Stream SDK için URL'ler sağlar. Sunum yapan kişi ayrıca, OpenCL'nin tekil değer ayrıştırma veya negatif olmayan matris çarpanlara ayırma gibi algoritmalar için kullanılıp kullanılamayacağına ilişkin soruları yanıtlar ve GPU'daki genel bellekteki verilerin, daha karmaşık algoritmalar için çok önemli olan çekirdek yürütmeleri arasında aynı kaldığını onaylar.

  • 01:05:00 Bu bölümde video, yalnızca Unix/Linux sistemlerini destekleyen ve bir Windows portu için üzerinde çalışılan OpenCL API'nin mevcut sınırlamalarını tartışıyor. Video ayrıca bir GPU ile ana bilgisayar arasında bellek paylaşımı sorununa da değiniyor ve bunun mümkün olsa da performans cezaları olduğunu ve bunun grafik kartına ayrılan genel belleğin kullanılmasını tipik hale getirdiğini açıklıyor. OpenCL API aracılığıyla bellek ayırırken, bunun nasıl ele alınacağını kontrol etmenin yolları vardır, ancak bunun bir kısmı uygulama düzeyinde otomatik olarak yapılır. Ek olarak, video, bellek tahsisinde genel ve yerel işaretçiler arasındaki farkı ve en uygun çekirdek sayısını seçmenin yürütülen algoritmaya nasıl bağlı olduğunu açıklar.

  • 01:10:00 Bu bölümde konuşmacı, FTL FGL RX modülünün yüklenip çalıştırılmayacağı, Lib standart CL'nin C++ bağlamaları ile uyumluluğu, performans iyileştirme için OpenCL çekirdeklerinin optimizasyonu ve CL mem'in salt okunur kullanımı veya bellek arabelleklerini tahsis ederken bunları okuma/yazma içinde mühürleme. Konuşmacı ayrıca, OpenCL çekirdeklerini düzenlemek ve AMD GPU'ları için optimizasyon yapmak için özel araçların mevcut olabileceğine işaret ederken, optimizasyon tekniklerinin çok incelikli olabileceğini ve çok fazla ayar gerektirebileceğini de belirtiyor.

  • 01:15:00 Bu bölümde, konuşmacı, vektör işlemlerinden yararlanmak için verileri düzenlemek, daha iyi performans için bellek erişimini dikkatli bir şekilde kontrol etmek ve optimizasyon için döngüleri manuel olarak açmak da dahil olmak üzere OpenCL programlama için optimizasyon tekniklerini tartışıyor. Ek olarak, karmaşık veri türlerinin kullanımı ve ana bilgisayara geri dönmeden GPU'lar arasında veri aktarma yeteneği uygulamaya özeldir ve derleyiciye bağlı olarak değişebilir. Konuşmacı ayrıca, sistemdeki OpenCL cihazları arasında kullanılabilir belleğe bağlı olacak bellek arabellekleri için boyut sınırlamaları olduğundan bahseder. Daha iyi performans için daha basit değişken parametreleri sabit bellekte saklamak mümkün olabilir.

  • 01:20:00 Bu bölümde, konuşmacı, çeşitli SDK'larda OpenCL uygulamasını analiz etmek için mevcut araçların olduğunu açıklıyor; bunlara hesaplama birimi kullanımını veya bellek aktarımı kullanımını ölçmek için profil oluşturma araçları dahildir. Konuşmacı ayrıca, GPU tarafında bellek parçalanmasını yönetmenin uygulamaya özel olduğunu ve uygulamanın bunu düzgün bir şekilde yönetmesi gerektiğini açıklıyor. Çift kesinlik kullanılırken, kullanılan mimariye bağlı olduğundan, yerel çalışma grubu boyutunun 32'ye mi yoksa 16'ya mı düşürüleceğine dair açık bir yanıt yoktur. Konuşmacı ayrıca, standart GPU bağlamındaki tüm cihazlar hakkında kolayca bilgi almak için yardımcı çağrıların varlığından da bahseder.
 

AMD Developer Central: OpenCL Programlama Web Semineri Serisi. 5. Gerçek Dünya OpenCL Uygulamaları



5 - Gerçek Dünya OpenCL Uygulamaları

Bu videoda Joachim Deguara, üzerinde çalıştığı ve temel olarak performans optimizasyonuna odaklanan bir çok akışlı video işleme uygulamasından bahsediyor. Video, video formatlarının kodunu çözme, CPU ve GPU arasında bellek aktarmak için DMA kullanma, çift ara belleğe alma, çekirdek çalıştırma, senkronizasyon ve profil işlemleri için olay nesnelerini kullanma, OpenCL-OpenGL birlikte çalışma, videolarda kaydırma işlemlerini işleme ve aralarında seçim yapma gibi çeşitli konuları kapsar. Algoritmaları işlerken OpenCL ve OpenGL. Joachim ayrıca OpenCL uygulamaları için kullanılabilen çeşitli örnekleme ve SDK'lardan da bahsediyor, ancak şu anda videoda tartışılan belirli bir uygulama için örnek kod bulunmadığını belirtiyor.

  • 00:00:00 Bu bölümde Joachim Deguara, üzerinde çalıştığı bir çok akışlı video işleme uygulamasını açıklıyor. Uygulama, birden fazla video akışını açmayı, bunların kodunu çözmeyi, bunlara video efektleri uygulamayı, birleştirmeyi ve son olarak, sonunda tekrar tekrar işlenen bir video akışını sunmayı içerir. Joachim Deguara, performansın bu uygulama için temel odak noktası olduğundan bahsediyor ve gerçek zamanlı sunum elde etmek için kod çözme, işleme ve görüntülemeyi saniyede 30 kez veya giriş videosunun kare hızında meydana gelen bir döngü yapısına sığdırmanın çok önemli olduğunu belirtiyor. .

  • 00:05:00 Bu bölümde, video formatlarının kodunun çözülmesi ve çerçevenin GPU'ya taşınmasına odaklanılmaktadır. Video formatının kodunu çözmek için, performansı etkilememesi için bunun olabildiğince hızlı yapılmasını sağlamak gerekir. Bunu yapmanın bir yolu, kod çözme işlevinin ana döngüden ayrı olarak çalışmasını ve çağrıldığında en son çerçeveyi döndürmesini sağlamaktır. Bu, ana döngü kesintisiz devam ederken kod çözmenin arka planda yapılmasını sağlar. Çerçeveyi GPU'ya taşımak için, üzerine yazılacak görüntüyü ve yazmanın eşzamanlı mı yoksa eşzamansız mı gerçekleşeceğini belirlemeyi içeren API çağrıları kullanılır.

  • 00:10:00 Bu bölümde, konuşmacı DMA'yı (doğrudan bellek erişimi) ve CPU'nun kopyalaması gerekmeden sistemin ana belleği ile GPU'nun belleği arasında bellek aktarmak için nasıl kullanılabileceğini tartışıyor. DMA motoru, CPU ve GPU için kaynakları serbest bırakarak bu işlemi paralel olarak gerçekleştirir. Tamponların ve görüntülerin aktarımı eşzamansız olarak yapılabilir ve özel işaretler gerektirir. Ancak, veriler kopyalandıktan hemen sonra kullanılamaz, bu nedenle DMA'dan yararlanmak için programın buna göre yeniden yapılandırılması gerekir. Konuşmacı, halihazırda işlenen veya görüntülenen verilerin bozulmasını önlemek için çift ara belleğe alma ve döngü süreçlerinin yeniden yapılandırılmasını önerir. Genel olarak DMA, CPU ve GPU döngülerini boşaltarak uygulama performansını büyük ölçüde artırabilir.

  • 00:15:00 Bu bölümde, konuşmacı bir videonun karelerini işlemek ve görüntülemek için OpenCL'de kullanılan çift ara belleğe alma yaklaşımını tartışıyor. Bu yaklaşım, A ve B olmak üzere iki çerçevenin sürekli arabelleğe alınmasını ve birinin karşıya yüklenirken diğerinin işlenmesini içerir. Bu, işleme süresi ile yükleme süresinin birbirine eklenmesi ihtiyacını ortadan kaldırır ve bunun yerine yalnızca her iki işlem için gereken maksimum süreyi alır. Konuşmacı ayrıca, yalnızca bir kez yapılması gereken ve parametrelerin değiştirilmesi gerekmiyorsa sonraki tüm işleme yürütmeleri için kullanılabilen çekirdek için argümanların ayarlanmasını tartışır.

  • 00:20:00 Bu bölümde, konuşmacı çekirdeğin nasıl yürütüleceğini tartışır ve işlemeyi çağırmanın engelleme ve engellememe yöntemleri dahil olmak üzere iki yolundan bahseder. Engelleme, daha kolay hata ayıklama sağlarken, performans için ideal değildir, bu nedenle konuşmacı, işlemleri beklemek veya birden çok işlem için bağımlılık grafikleri ayarlamak için olayları ve olay vektörlerini kullanma seçeneği sunar. Belirli iş öğelerinin tamamlandığını işaret etmek için olay nesnelerini kullanarak, aşağı akış işleminin yalnızca bunlar bittiğinde başlamasını sağlayarak daha verimli işlemeye olanak tanır.

  • 00:25:00 Bu bölümde konuşmacı, işlemleri senkronize etmek için OpenCL olay nesnelerinin nasıl kullanılacağını ve performans testi için olay profili oluşturmanın nasıl kullanılacağını açıklar. Filtreler için bağımlılık grafiği oluşturulurken, Sıraya Al İşlemi için son bağımsız değişken olarak bir olay işaretçisi iletilir, ancak olay nesnesi InQ içinde oluşturulur. Bu, karışıklığa neden olabilir, ancak filtreler ve yükleme işlemleri arasında bağımlılıkların ayarlanmasına izin verir. Konuşmacı, olay profili oluşturma ile, olayın yaşam döngüsünde belirli olayların ne zaman meydana geldiği, örneğin olay referanslarının ne zaman kuyruğa alındığı, gönderildiği, çalışmaya başladığı, ve koşuyu tamamladı. Bu, tüm işlemleri eşzamansız tutarken profil oluşturmaya olanak tanır.

  • 00:30:00 Videonun bu bölümünde konuşmacı, OpenCL kullanırken bir olayın geçtiği farklı durumları (sıraya alındı, gönderildi, çalışıyor ve tamamlandı gibi) ve performansı ölçmek için olay profili verilerinin ve zaman damgalarının nasıl kullanılacağını açıklıyor. ve işlemler veya veri yüklemeleri için uzun yürütme süreleri gibi olası sorunları belirleyin. Konuşmacı ayrıca video akışlarının çeşitli filtreler ve efektlerle doğru şekilde görüntülenmesini sağlamak için olayların tamamlanmasının nasıl bekleneceğini tartışır.

  • 00:35:00 Bu bölümde, konuşmacı, ikisi arasında belirli bilgilerin paylaşılmasına izin veren OpenCL ve OpenGL birlikte çalışmasını tartışıyor. Bu işlevsellik isteğe bağlıdır ve bu nedenle tüm uygulamaların bunu desteklemesi gerekmez. Konuşmacı, OpenCL-OpenGL birlikte çalışmasını etkinleştirmek için uzantıyı kontrol etmenin ve OpenCL'de belirli bayraklarla bir bağlam oluşturmanın önemini vurguluyor. Bunun çalışma şekli, önceden oluşturulmuş bir OpenGL dokusundan bir OpenCL görüntüsü oluşturmaktır, böylece veriler gereksiz yere ileri geri kopyalanmaz.

  • 00:40:00 Bu bölümde, konuşmacı OpenCL ve OpenGL'nin Interop aracılığıyla görüntü verilerini nasıl paylaşabileceğini açıklıyor. Open GL dokusuna başvurmak için gereken hedefi, NIP seviyesini ve doku nesnesini kapsarlar. OpenCl görüntüsü oluşturulduktan sonra normal bir OpenCl görüntüsü olarak kullanılabilir, ancak iki programın birbirini etkilemediğinden emin olmak için biraz el sıkışması gerekir. Konuşmacı ayrıca video işlemede geçişlerin nasıl oluşturulacağıyla ilgili bir soruyu da yanıtlıyor. Kaydırmanın konumunu filtreye giriş olarak kullanarak yapılabileceğini söylüyor. Nihayetinde nihai sonuç, tüm adımları tamamlayan görüntüleme amacıyla OpenGL'ye aktarılır.

  • 00:45:00 Bu bölümde konuşmacı, her karenin zaman işaretçisine bakarak ve kaydırmanın konumunu enterpolasyon yapmak için bir anahtar kare kullanarak bir videodaki kaydırma hareketlerini nasıl işlediklerini açıklıyor. Ayrıca, zaman damgalarının harici bir yüksek çözünürlüklü zamanlayıcıya bağlı olduğunu ancak CL bitirme çağrısına bağlı olmadığını belirterek OpenCL'de profil oluşturma hakkında bir soruyu yanıtlıyorlar. Ek olarak, konuşmacı OpenCL cihazlarında ve çalışma zamanlarında yürütme sırasını tartışır ve işlemlerin çoğu cihaz için sırayla yapıldığını onaylar.

  • 00:50:00 Bu bölümde konuşmacı, algoritmaları işlerken OpenCL ve OpenGL arasındaki farkları araştırıyor. Hangi platformun kullanılacağı bireysel tercihlere bağlıdır, ancak kapsamlı dil yapısı nedeniyle OpenCL'nin programlanması daha kolay olabilir. Performans açısından OpenCL, daha karmaşık donanım gerektiren uygulamaların işlenmesine izin verebilir; ancak, OpenGL gölgeleme kullanmanın daha iyi performansa yol açabileceği durumlar vardır. Ayrıca, konuşmacı belirli bir uygulama için mevcut herhangi bir örnek kod sağlayamasa da, AMD'nin OpenCL SDK'sında kullanıcıların öğrenebileceği çeşitli kod örnekleri vardır.

  • 00:55:00 Bu bölümde konuşmacı, OpenCL uygulamaları için geliştiricilerin kullanabileceği çeşitli örnekleri ve SDK'ları tartışıyor. Örnekler, uzantıları almak için cihazların nasıl sorgulanacağını ve zamanın nasıl çalıştırılacağını göstermenin yanı sıra OpenCL OpenGL birlikte çalışmasına ilişkin örnekler sağlar. Ancak, videoda tartışılan belirli bir uygulama için şu anda mevcut örnek kod yoktur, ancak bu gelecekte değişebilir. Web semineri şimdi sona erdi ve katılımcılara bir kayıt sunulacak.
 

AMD Developer Central: OpenCL Programlama Web Semineri Serisi. 6. OpenCL için Cihaz Fisyon Uzantıları



6 - OpenCL için Cihaz Fisyon Uzantıları

Bu videoda konuşmacı, OpenCL için cihaz bölme uzantılarıyla ilgili çeşitli konuları ele alıyor. Farklı uzantı türlerini ve aygıt bölünmesinin büyük aygıtların daha küçük aygıtlara bölünmesine nasıl olanak tanıdığını açıklar; bu, bir çekirdeği yüksek öncelikli görevler için ayırmak veya belirli çekirdeklere belirli çalışma gruplarının atanmasını sağlamak için yararlıdır. Vektör geri itme işlemlerini paralelleştirirken, süreci optimize etmek için paralel kalıpları kullanırken ve OpenCL'de yerel çekirdekler oluştururken sıralı semantiği korumanın önemini tartışıyorlar. Konuşmacı ayrıca OpenCL için cihaz bölünmesini kullanan bir uygulamayı gösterir ve bellek yakınlığını ve diğer cihazlarda cihaz bölünmesinin geleceğini tartışır.

  • 00:00:00 Bu bölümde, konuşmacı OpenCL'deki uzantıları, özellikle de üç farklı uzantı türünü tartışıyor: KHR uzantıları, EXT uzantıları ve satıcı uzantıları. KHR uzantıları, OpenCL çalışma grubu tarafından onaylanır ve bir dizi uyumluluk testiyle birlikte gelir. EXT uzantıları, en az iki çalışma grubu üyesi tarafından geliştirilir ve uyumluluk testleri gerektirmez. CL_AMD_printf gibi satıcı uzantıları, tek bir satıcı tarafından geliştirilmiştir ve yalnızca o satıcı tarafından desteklenebilir. Tüm uzantıların belgeleri Chronos OpenCL kayıt web sitesinde mevcuttur ve satıcılar arasında şeffaflık ve erişilebilirlik sağlar.

  • 00:05:00 Bu bölümde konuşmacı, OpenCL için cihaz görü denilen cihaz fizyon uzantısından bahseder. Bu uzantı, kullanıcının birçok bilgi işlem birimine sahip büyük cihazları ada veya bellek yakınlığına göre daha küçük OpenCL cihazlarına bölmesine olanak tanır. Bu bölümleme, bir çekirdeği öncelikli bir görev için ayırmaya veya SMP tabanlı bir sistemde olduğu gibi, belirli çalışma gruplarının belirli çekirdeklere atanmasını sağlamaya yardımcı olabilir. Konuşmacı, OpenCL üzerine inşa edilmiş bir paralel algoritmalar ve paralel konteynerler örneğiyle cihaz görüşünün kullanımını motive ediyor ve bu uzantının şu anda CPU'larında ve Hücre Geniş Bant cihazlarında AMD ve IBM tarafından desteklendiğini belirtiyor.

  • 00:10:00 Bu bölümde konuşmacı, vektör geri itme işlemlerini paralelleştirirken sıralı semantiği korumanın önemini tartışıyor. Sıralı bir döngü sırasında bir vektöre öğeler eklerken, beklenen sıranın döngünün bir fonksiyonu olarak görüneceğini açıklarlar. Bununla birlikte, paralelleştirildiğinde, bu sıra kaybolur ve öğeler sıra dışı eklenebilir, bu nedenle konuşmacı, vektör geri itme işleminin sıralı semantiğinin korunmasını önerir. Ardından, MPEG-2 akışının basitleştirilmiş bir versiyonu gibi bir uygulamada bunun nasıl gerekli olabileceğine dair bir örnek veriyorlar. Bir C işlevi tanıtarak ve bu paralel işlemlerin CPU'larda nasıl uygulanacağını tartışarak bitirirler.

  • 00:15:00 Bu bölümde, konuşmacı OpenCL işlemi için Aygıt Bölünme Uzantılarını optimize etmek üzere paralel modellerin nasıl kullanılacağını açıklar. İşlevleri paralel olarak yürütmek için ardışık düzen modelini kullanırlar ve yerel bellekteki bir iş öğesini işlemek için giriş verilerinden okunacak bir veri bloğu sunarlar. Yaklaşım daha sonra, çıktının sırasını korurken ofsetleri hesaplamak için posta kutusunun ofsetini karşılık gelen çalışma grubuna yazar. Sıralama, gelişigüzel bir sırayla yürütülebilecek genel kimliğe güvenmek yerine çalışma grupları arasındaki iletişim yoluyla sağlanır. Ardışık düzen modeli, süreci optimize etmek için işlevlerin paralel çalışmasını sağlar.

  • 00:20:00 Bu bölümde, konuşmacı ardışık düzenlerini ve "sayaç" terimini artık bir posta kutusu olarak nasıl kullandıklarını, çünkü bir şeyleri saymanın ötesine geçtiklerini tartışıyor. Posta kutularına indeksleme için grup kimliklerini ilettiklerini ve basit hesaplamalar için yerel ve genel belleği kullandıklarını açıklıyorlar. Ancak, çalışma grubu yürütme garantisi olmadığını belirtiyorlar ve bunun nasıl bir kilitlenme durumuna neden olabileceğini açıklıyorlar. Bu sorunu ele almak için konuşmacı, cihaz görüşünü kullanarak cihazı iki ayrı çekirdeğe bölmeyi, her çekirdekte bir çalışma grubu başlatmayı ve ilerlemeyi garanti etmeyi önerir. Ayrıca, bir ana cihazda çalışmak için OpenCL tarafından sağlanan önemli bir mekanizmayı da tanıtırlar.

  • 00:25:00 Bu bölümde konuşmacı, isteğe bağlı C veya C++ işlevlerinin çalıştırılmasına izin veren OpenCL'de yerel çekirdekler kullanmanın faydalarını tartışıyor. OpenCL'de bulunmayabilecek standart G/Ç yordamlarını veya diğer kitaplık işlevlerini çağırma yeteneğinin yanı sıra, farklı uygulamaları denemede daha fazla esneklik sunabilir. OpenCL'de yerel bir çekirdek oluşturma işlemi, bağımsız değişkenleri ve bellek nesneleri ile birlikte bir komut kuyruğuna ve bir işleve geçmeyi içerir. Bununla birlikte, işlev dahil edildiği aynı iş parçacığında yürütülemeyebileceğinden, iş parçacığı yerel depolamasında dikkatli olunmalıdır. Konuşmacı ayrıca, C API'sinin üzerinde bazı soyutlamalar sunan OpenCL C++ bağlama API'sini de tanıtıyor. Program, mevcut platformları sorgulayarak ve bir bağlam ve cihaz türü oluşturarak başlar.

  • 00:30:00 Bu bölümde, konuşmacı OpenCL için cihaz fisyon uzantılarının kullanımını tartışıyor. Geçerli bir cihaz sorgulandığında, cihazların bir listesi döndürülür ve cihaz bölünmesini desteklemek için ilk cihaz seçilir. Cihaz bölünmesi, OpenCL API'sinde yenidir ve bir bölümün tanımlanmasına izin veren genişletme mekanizmaları gerektirir. Bölmeyi, bir birimlik aygıtlara bölmek için eşit olarak kullanırlar. Alt cihaz özellikleri daha sonra ayarlanır ve alt cihaz oluşturma işlevi çağrılır. En az bir alt cihaz oluşturulduğu varsayılarak posta kutuları yapılır ve her cihaz için bir komut sırası oluşturulur. Ortaya çıkan cihazlar, tam olarak diğer herhangi bir cihaz gibidir ve mevcut kitaplıklarla birbirinin yerine kullanılabilir. Konuşmacı daha sonra yerel OpenCL çekirdeklerini kurmaya geçer.

  • 00:35:00 Bu bölümde, konuşmacı OpenCL için Device Fission uzantılarının uygulanması için gerekli girdileri ve bağımsız değişkenleri tartışır. Konuşmacı, girişler için bellek arabelleğinin, işaretçilerin FN c çalışma zamanı tarafından yerleştirileceği dört bölüme ayrılacağını açıklıyor. Bellek arabelleği, posta kutularından, bloklardan ve önbellek işlemlerinden oluşacak ve her çekirdek için benzersiz kimlikler üretilecektir. Konuşmacı ayrıca, çekirdeğin her bir örneğinin ayrı cihazlarda çalışacağını ve tüm olaylar tamamlandıktan sonra verilerin dolgu eklenerek yazılacağını açıklar. Çekirdeğin kendisi, verimli yürütmeyi sağlamak için engelleme ve önbelleğe alma ile ilgili optimizasyonları içerecektir.

  • 00:40:00 Bu bölümde, konuşmacı, OpenCL için cihaz bölünmesini kullanan bir uygulamanın uygulanmasını tartışıyor. Veri kümelerini paralel olarak indekslemek için giriş/çıkış, posta kutuları, yerel blok dizileri, blok boyutu ve grup kimlikleri gibi çeşitli türleri kullanarak uygulamanın nasıl çalıştığını açıklarlar. Uygulama ayrıca, her şeyin olabildiğince paralel yürütülmesini sağlamak için basit meşgul bekleme ve engelleme optimizasyonları uygular. Bu uygulamanın uygulanması, cihaz bölünmesini kullanarak, çok az ALU işlemiyle veya hiç ALU işlemi olmadan CPU'da hızlanma elde etme potansiyelini gösterir; bu, gelecekte daha geniş vektörlerin uygulanmasıyla daha da artabilir. Konuşmacı ayrıca, sonsuzluğa ve Numa uzay sistemlerine göre bölme gibi cihaz bölünmesi için diğer uygulamaları ve kullanım durumlarını tartışır.

  • 00:45:00 Bu bölümde konuşmacı, arabelleklerin belirli bir cihazla kesin olarak ilişkilendirilmesine izin veren OpenCL'deki bellek benzerliğinin faydalarını tartışıyor. Bu, çekişme ve olumsuz paylaşımdan kaçınarak daha iyi önbellek konumu ve iyileştirilmiş performans sağlayabilir. OpenCL'de kullanılan posta kutusu şeması, şelale boru hattını tekrar tekrar başlatan bir döngüye izin vererek birden çok yinelemeyi destekleyecek şekilde genişletilebilir. Konuşmacı ayrıca, ilgili tarafların web seminerleri, geçmiş sunumlar ve heterojen bilgi işlem üzerine yapılacak bir zirve dahil olmak üzere OpenCL hakkında daha fazla bilgi bulabilecekleri Developer.amd.com adresindeki OpenCL bölgesindeki kaynakların kullanılabilirliğinden de bahsediyor. Konuşmacı ayrıca gelecekte GPU'da cihaz bölünmesini destekleme olasılığına da işaret ediyor; bu, çekirdeğin bir bölümünü yüksek öncelikli görevler için ayıracak ve daha iyi performans sağlayacak.

  • 00:50:00 Videonun bu bölümünde konuşmacı, diğer cihazlara doğru hareket eden cihaz bölünmesinin geleceğini tartışıyor. Şu anda yalnızca AMD ve IBM, OpenCL için cihaz bölme uzantılarını destekliyor, ancak diğer satıcılar teklife ilgi gösterdi. BLAS ve FFT gibi matematik kitaplıklarının desteklenip desteklenmeyeceği sorusu gündeme gelir ve konuşmacı, hem BLAS'ın OpenCL uygulamaları hem de FFT tarzı bir kitaplıkta sunulacak doğrusal cebir için farklı değişkenler ve uygulamalar üzerinde çalıştıklarını onaylar.
 

AMD Developer Central: OpenCL Programlama Web Semineri Serisi. 7. Düzleştirilmiş Parçacık Hidrodinamiği




7 - Düzleştirilmiş Parçacık Hidrodinamiği

Bu video, akışkanlar dinamiği denklemlerini, özellikle de Navier-Stokes denklemlerini çözmeye yönelik bir teknik olan Düzleştirilmiş Parçacık Hidrodinamiği'ni (SPH) tartışmaktadır. Video, yoğunluk, basınç ve viskozite terimleri dahil olmak üzere denklemlerdeki farklı terimleri ve bir yumuşatma çekirdeği kullanılarak bunların yaklaşık olarak nasıl hesaplanacağını açıklar. SPH için kullanılan sayısal algoritmanın yanı sıra uzamsal indeksleme ve birlikte çalışma kullanımı da tartışılmaktadır. Konuşmacı, bir uzamsal dizin ve komşu haritası oluşturma sürecini ve fiziğin nasıl hesaplandığını açıklar. Video, izleyicileri programı indirmeye ve kullanmaya davet ediyor ve simülasyonun sınırlamalarını tartışıyor. Konuşmacı daha sonra izleyicilerin GPU performansı, sıkıştırılamaz davranış ve önbelleğe alınmış görüntülerin kullanımı hakkındaki sorularını yanıtlar.

  • 00:00:00 Bu bölümde, AMD Kıdemli Teknik Ekibi Üyesi Alan Hierich, hesaplamalı akışkanlar dinamiği, özellikle pürüzsüz parçacık hidrodinamiği (SPH) hakkında genel bir bakış sunuyor. SPH başlangıçta Astrofizik hesaplamaları için kullanılıyordu, ancak video oyunlarında ve simülasyonlarda oldukça popüler hale geldi. Teknik, 1900'lerde formüle edilmiş kısmi diferansiyel denklemler olan ve günümüzde çoğu akışkan dinamiği çalışmasının temelini oluşturan Navier-Stokes denklemlerini çözmek için kullanılır. Allen, sıvıların tanımını açıklıyor ve sıvılara ve gazlara odaklanarak nasıl çalıştıklarına dair sezgisel bir açıklama sunuyor. Ayrıca sıvıların genel olarak Navier-Stokes denklemleri tarafından tanımlandığını ve sıkıştırılamaz Navier-Stokes denklemlerinin normal hızlarda ve normal sıcaklıklarda su gibi sıvıları yönettiğini ana hatlarıyla belirtir.

  • 00:05:00 Bu bölümde konuşmacı, Navier-Stokes denklemleri olarak bilinen akışkanları yöneten denklemleri açıklıyor. Hareket denklemi hızdaki değişimi yerçekimi, basınç ve viskozitenin bir fonksiyonu olarak temsil ederken, kütle süreklilik denklemi kütlenin ne yaratıldığını ne de yok edildiğini belirtir. Bir sıvıyı yöneten fenomenler yerçekimi, basınç ve hızdır ve viskozite, sıvı parçacıklarının aynı yönde hareket etme olasılığını belirleyen sıvının yapışkanlığıdır. Bir sıvının bahçe hortumundaki bir ağızlık gibi daha küçük bir açıklıktan geçerken ivmesini tanımlayan konvektif ivme terimi de ele alınmıştır. Konuşmacı, izleyiciyi, gösterilen bir kutudaki sıvıları simüle eden programı indirip oynamaya davet ediyor.

  • 00:10:00 Bu bölümde, konuşmacı akışkan dinamiği için hareket denklemindeki konvektif ivme, basınç gradyanı ve viskozite gibi farklı terimleri açıklıyor. Basınç, sıvının bir noktadaki gerçek yoğunluğu ile dinlenme yoğunluğu arasındaki fark olarak tanımlanır. Hareket denkleminin sağ tarafındaki son terim olan viskozite terimi, sistemin momentumunu yayar ve sonuçta hızın tüm konumlarda eşdeğer olduğu bir duruma neden olur. Ayrıca bir kütle süreklilik denklemi vardır, del nokta V eşittir 0, yani sıkıştırılamaz denklemlerde kütle ne yaratılır ne de yok edilir. Son olarak, sistemin dinamiklerini temsil etmek için, konuşmacı bir parçacığın hareket denklemini elde etmek için denklemin maddi türevini alır.

  • 00:15:00 Bu bölümde video, önceki bölümde tanıtılan basitleştirilmiş sıkıştırılamaz Navier-Stokes denklemlerini çözmek için düzleştirilmiş parçacık hidrodinamiği (SPH) tekniğini tartışıyor. SPH tekniği ilk olarak 1992'de astrofizik ve galaksileri incelemek için tanıtıldı, ancak sıvı denklemleri için de kullanılabilir. Yakın noktalardaki niceliğin bir ağırlıklandırma işleviyle çarpımı toplamı yoluyla herhangi bir niceliğe yaklaşmamıza izin veren temel işlevlere benzeyen niceliklerin düzgünleştirici çekirdek temsillerinin tanıtılmasını içerir. SPH tekniği, Navier-Stokes denklemlerindeki yoğunluk ve basınç gradyanı terimlerini yaklaşık olarak tahmin etmek için kullanılır. Video ayrıca Navier-Stokes denklemlerinin sayısal olarak ölçeğe duyarlı olduğundan ve parçacıkları uzayda hareket ettirmek için normal uzamsal ölçeğe genişletilmeden önce hesaplamaların daha küçük ölçekte yapıldığından bahsediyor.

  • 00:20:00 Bu bölümde, konuşmacı Pürüzsüz Parçacık Hidrodinamiğinde (SPH) yaklaşık olarak ifade edilen üç ana terimi, yani yoğunluk, basınç ve viskozite terimlerini açıklar. Program, yoğunluğu hesaplamak için çeşitli noktalardaki parçacıkların kütlesini hesaplar ve bunu bir yumuşatma çekirdeğinin gradyanı ile çarpar. Basınç terimi, daha sonra, yumuşatma çekirdeğinin gradyanı ile çarpılan yoğunluğa bölünen skaler bir basınç miktarı kullanılarak hesaplanır. Öte yandan, viskozite terimi, sıvı viskozite seviyesini ve iki nokta arasındaki hız farkını J noktasının yoğunluğuna bölerek belirleyen skaler bir katsayı kullanılarak yaklaşık olarak hesaplanır. Konuşmacı ayrıca yumuşatma çekirdeğinin özelliklerini açıklar; SPH simülasyonunda kullanılır ve H yarıçaplı bir küre bölü toplamın nasıl bire eşit olduğunu gösterir.

  • 00:25:00 Bu bölümde, konuşmacı Düzleştirilmiş Parçacık Hidrodinamiği (SPH) için kullanılan sayısal algoritmayı tartışıyor. Algoritma, daha sonra parçacıkların hızlarını ve konumlarını zaman adımlamak için kullanılan yoğunluk, basınç, basınç gradyanı, viskoz terim ve ivmeyi içerir. Konuşmacı, ilk algoritmanın tüm parçacıkların tüm parçacıklara karşı etkileşimlerini test etmeyi içerdiğini açıklıyor, bu doğru ama yeterince hızlı değil. Bu nedenle, alanı voksellere bölen ve yalnızca etkileşim yarıçapı içindeki parçacıklarla etkileşime izin veren daha iyi bir algoritma tanıtılır. Ek olarak, etkileşimleri hesaplamak için tüm parçacıkları dikkate almak yerine rastgele bir parçacık alt kümesi seçilir ve bu da verimli bir program üretir.

  • 00:30:00 Bu bölümde, konuşmacı, OpenCL simülasyonlarında yalnızca sınırlı sayıda parçacıkla etkileşimleri hesaplamak için uzamsal indekslemenin kullanımını ve veri arabelleklerini bir grafik sistemiyle paylaşmak için Interop kullanmanın önemini tartışıyor. Interop, doğrudan GPU arabelleğinden işlemeye izin verirken ve grafik belleğinde yer tasarrufu sağlarken, bu olmadan programın verileri ana belleğe ve ana belleğe kopyalaması gerekir ve bu da simülasyonu önemli ölçüde yavaşlatır. Konuşmacı, farklı bir bağlam oluşturmak da dahil olmak üzere Interop'u kullanmak için gerekli değişiklikleri açıklar ve sıralama için parçacık indeksi de dahil olmak üzere simülasyon için gerekli tampon setini tanıtır. Birlikte çalışmanın öneminin tartışılmasına rağmen, gösterilen program onu kullanmaz ve bu da simülasyonu yavaşlatır.

  • 00:35:00 Bu bölümde, konuşmacı Düzleştirilmiş Parçacık Hidrodinamiği algoritmasında kullanılan çeşitli çekirdekleri tartışıyor. İlk çekirdek, parçacıkları bir voksel ile ilişkilendiren "hash parçacıklarıdır". Ardından, "sırala" ve "geçiş sonrası sırala" çekirdekleri, parçacıkları voksellere ayırır ve bunları uzamsal dizin yapısı için düzenler. Daha sonra, "index" ve "index post pass" çekirdekleri, voksellerden parçacıklara kadar uzamsal bir dizin oluşturur. Bundan sonra, "iyi komşular" çekirdeği, hangi komşuların birbiriyle etkileşime gireceğine karar verir. Son olarak, "bilgi işlem yoğunluğu basıncı", "bilgi işlem ivmesi" ve "entegre" çekirdekler, parçacıklar arasındaki etkileşimleri ve fiziği hesaplar. Konuşmacı, kodun GPU versiyonunda taban sıralamasının kullanıldığını, kodun CPU versiyonunda ise Q sıralamasının kullanıldığını açıklıyor.

  • 00:40:00 Bu bölümde video, Pürüzsüzleştirilmiş Parçacık Hidrodinamiğinde (SPH) voksellerden parçacıklara doğru uzamsal bir dizin oluşturma sürecini açıklıyor. Çekirdek, her vokseldeki en düşük numaralı parçacığı belirlemek için bir ikili arama kullanır ve parçacık içermeyen voksellerde negatif bir değer bırakır. Geçiş sonrası indeks daha sonra ızgara hücre indeksindeki bir sonraki boş olmayan vokselin değerini kopyalayarak boş vokseller için bir indeks değerini doldurur. İndeksleme tamamlandıktan sonra program, her bir parçacığı çevreleyen ikiye-iki-iki voksellerin yerel bölgesini arayarak bir komşu haritası oluşturur. Yanlılığı ortadan kaldırmak için, program her vokselde rastgele bir ofset oluşturur ve aramanın yönünü değiştirir. Çekirdek daha sonra etkileşim yarıçapı içindeki ilk 32 parçacığı seçer ve bunları komşu haritasına ekler.

  • 00:45:00 Bu bölümde konuşmacı, 32 parçacıkla etkileşime girmelerini sağlayan bir komşu haritası oluşturarak fiziği nasıl hesapladıklarını açıklıyor. Yoğunluk ve basınca yaklaşmak için kullanılan denklemleri gözden geçirirler, ivme terimlerini hesaplarlar ve ardından toplam ivmeyi belirlemek için her şeyi birleştirirler. Hız ve konum daha sonra, parçacıkların kutudan kaçmasını önlemek için sınır koşulları uygulanarak sayısal entegrasyon yoluyla ilerletilir. Konuşmacı, izleyicileri kaynak kodunu indirmeye ve onunla oynamaya teşvik ediyor ve Navier-Stokes denklemlerini çözmek için birçok yavaş yöntem olsa da, yavaşın mutlaka iyi anlamına gelmediğini vurguluyor.

  • 00:50:00 Videonun bu bölümünde konuşmacı, konumu güncellemeden önce hızın yeni konumuna entegre edildiği simülasyonun güncelleme adımını açıklıyor. Hız güncellemesi açıktır, konum güncellemesi ise bir sonraki adımdaki hız değeri kullanılarak yarı örtülüdür. Simülasyon, performans amacıyla değişkendir, ancak yüksek doğruluk ve doğruluk gerekiyorsa, çift kullanılması tavsiye edilir. Algoritma tamamen paralelleştirilebilir, ancak uzamsal bölümlemenin ödünleşimlerinin hesaba katılması gerekir. Son olarak konuşmacı, Interop'u birden fazla GPU ile kullanma, türbülansı simüle etme ve simülasyondaki pratik maksimum parçacık sayısı hakkındaki soruları yanıtlar.

  • 00:55:00 Bu bölümde konuşmacı dinleyicilerden gelen bazı soruları yanıtlıyor. Simülasyonlarının pratik sınırlamasının, kullanılan GPU ve CPU sınıfına bağlı olan performans oranı olduğunu açıklıyorlar. Ayrıca, simülasyonlarının sıkıştırılamaz denklemlere dayanmasına rağmen, sıkıştırılabilirlik davranışını sınırlayabilecek sıkıştırılamazlık koşulunu açıkça çözmediklerini de belirtiyorlar. Konuşmacı, önbelleğe alınmış görüntü belleği yerine neden arabellek kullandıklarına ilişkin bir soruyu da yanıtlayarak, programı geliştirdikleri sırada önbelleğe alınmış görüntüleri kullanmanın herhangi bir performans avantajı görmediklerini belirtti. Ancak, OpenCL'nin gelecekte önbelleğe alınmış arabellekler için destek sağlayacağını ve bunları desteklemek için programı değiştirebileceklerini belirtiyorlar. Genel olarak, konuşmacı dinleyicileri programı indirip istedikleri şekilde kullanmaya davet ediyor, çünkü programda herhangi bir sınırlama yok.
 

AMD Developer Central: OpenCL Programlama Web Semineri Serisi. 8. Optimizasyon Teknikleri: Görüntü Evrişimi



8 - Optimizasyon Teknikleri: Görüntü Evrişimi

Bu videoda Udeepta D. Bordoloi, görüntü evrişimindeki optimizasyon tekniklerini tartışıyor.

 

AMD Developer Inside Track: Görüntü Evrişimi Nasıl Optimize Edilir?



Görüntü Evrişimi Nasıl Optimize Edilir

Bu video, verimliliği artırmak için yerel veri paylaşımı, sabitleri optimize etme ve daha büyük yerel alanları kullanma dahil olmak üzere görüntü evrişimini optimize etmeye yönelik çeşitli yöntemleri tartışıyor. Konuşmacı, genel performansı iyileştirmek için görüntü evrişiminde işlem süresini en aza indirmenin önemini vurgular ve yerel belleği kullanarak verileri yeniden kullanmanın yeni bir yöntemini vurgular. Video, bariz veya dokuları kullanma, düşünce gücünü kullanma ve sayaca geçirme seçeneklerini kullanma gibi optimizasyon adımları için öneriler sunar. Görüntü katlama tekniklerini optimize etme hakkında adım adım açıklamalı bir makale, geliştirici AMD web sitesinde mevcuttur.

  • 00:00:00 Bu bölümde, AMD'nin grafik ekibinden Udeepta Bordolo, bir çıktı görüntüsü pikseli oluşturmak için girdi görüntüsünün bir alanı üzerinde ağırlıklı bir toplam yapmayı içeren görüntü evrişimi kavramını açıklıyor. Optimizasyonu gerçekleştirmek için OpenCL ve 5870 GPU kullanıyor ve temel korelasyon kodundan kademeli olarak çalışıyor. Yansıtma ve LDS (Yerel Veri Paylaşımı) kullanımı, kullanılan optimizasyon yöntemlerinden bazılarıdır ve yürütme süresinde önemli bir azalma sağlar.

  • 00:05:00 Bu bölümde konuşmacı, tüm filtre boyutları ve tüm giriş boyutları için çalışan bir programda görüntü kıvrımının optimizasyonunu tartışıyor. Veri paylaşımını iyileştirmek ve beklemek için harcanan zamanı azaltmak için yerel alanları kullanmaya odaklanıyor. Sabitleri ve girdileri 128 bitlik değerler olarak yorumlayarak, derleyici ve genie kodu daha kolay yorumlayabilir ve işlem süresini kısaltabilir. Sabitleri optimize etmenin ve daha geniş yerel alanlar kullanmanın görüntü evrişiminde verimliliği nasıl büyük ölçüde artırabileceğini gösteriyor. Genel olarak konuşmacı, genel performansı iyileştirmek için görüntü evrişiminde işlem süresini en aza indirmenin yollarını bulmanın önemini vurguluyor.

  • 00:10:00 Bu bölümde konuşmacı, filtre boyutunu belirleyerek görüntü evrişiminin nasıl optimize edileceğini ve farklı maskeler için nasıl değiştirileceğini tartışıyor. Konuşmacı, optimizasyonu farklı zamanlarda uygulamanın performansı etkileyebileceğini, ancak beklenmeyen sorunları bulmada yardımcı olabileceğini belirtiyor. Konuşmacı ayrıca 2k'ye 2k giriş görüntüsü için aynı sayıda öğeyi tam güç verileriyle çalıştırmayı tartışıyor, bu da daha verimli bir veri formatıyla sonuçlandı. Ek olarak, konuşmacı, donanımda LDS olarak bilinen yerel belleği kullanarak motoru kullanmak yerine verileri yeniden kullanmanın yeni bir yöntemini vurgular.

  • 00:15:00 Bu bölümde, konuşmacı görüntü konvolüsyon tekniklerini optimize etmekten bahsediyor. Tüm girdileri yüklerler, belirli bir grup kadar geciktirirler ve sonra bariz olanın üzerinde çalışırlar. Nakit parayı bildikleri gibi kullanıyorlar ve doku kullanmayı denemek için LDS kullanmayı bırakıyorlar. 2K'ya 2K çözünürlük ve farklı filtre boyutları ile bir deney yaparlar ve dokuları kullanırken en hızlı sayıyı elde ederler. Bariz veya dokuları kullanma, düşünce gücünü kullanma ve sayaca geçirme seçeneklerini kullanma gibi optimizasyon adımlarını önerirler. Ayrıca mümkün olduğunda nakit canavarı kullanmayı da öneriyorlar. Videonun yanında bağlantısını verdikleri geliştirici AMD web sitesinde, görüntü evrişim tekniklerini optimize etme hakkında adım adım bir makale yayınladılar.
How to Optimize Image Convolution
How to Optimize Image Convolution
  • 2013.05.28
  • www.youtube.com
Udeepta Bordoloi, MTS Software Engineer in the Stream Computing Group Udeepta Bordoloi walks though several different ways to optimize an image convolution a...
 

AMD Developer Central: OpenCL Teknik Genel Bakış. OpenCL'ye Giriş



AMD Developer Central: OpenCL Teknik Genel Bakış. OpenCL'ye Giriş

Bu videoda Michael Houston, çok çekirdekli CPU'ları, mobil cihazları ve diğer silikon biçimlerini hedefleyen veri paralel hesaplama için bir endüstri standardı olan OpenCL'ye genel bir bakış sunuyor. OpenCL, bağımsız yazılım satıcıları için geliştirmeyi basitleştirecek olan CUDA ve Brook+ gibi önceden rekabet halindeki tescilli uygulamaları birleştirmeyi amaçlamaktadır. Oyun geliştiricileri ile geri bildirim için tasarlanmış bir kuyruk sistemi kullanarak cihazda çalışan kod ile cihazı yöneten kod arasında bir döküm sunar. OpenCL, grafik API'leriyle iyi çalışacak şekilde tasarlanmıştır ve fotoğraf ve video düzenleme gibi çeşitli uygulamaların yanı sıra yapay zeka sistemleri, modelleme ve fizik için kullanılabilen her yerde bulunan bir bilgi işlem dili oluşturur. Sunum yapan kişi ayrıca Hollywood sunumu için OpenCL kullanımını tartışıyor ve bu alanda daha fazla çalışma görmeyi umuyor.

  • 00:00:00 Bu bölümde Mike Houston, OpenCL'nin çok çekirdekli CPU'ları, mobil cihazları ve diğer silikon biçimlerini hedef alan veri paralel hesaplama için bir endüstri standardı olarak amacını açıklıyor. OpenCL, bağımsız yazılım satıcıları için geliştirmeyi basitleştirecek olan CUDA ve Brook+ gibi önceden rekabet halindeki tescilli uygulamaları birleştirmeyi amaçlıyor. OpenCL'de farklı bir lehçe ve küçük farklılıklar olmasına rağmen, CUDA gibi diğer veri paralel dillerinden geçiş doğrudan ve hızlıdır. OpenCL ayrıca cihazda çalışan kod ile oyun geliştiricilerle geri bildirim için tasarlanmış bir kuyruk sistemi kullanarak cihazı yöneten kod arasında bir döküm sunar. Fotoğraf ve video düzenleme gibi uygulamalarda tüketici alanı için her yerde bulunan bir bilgi işlem dili oluşturarak grafik API'leriyle iyi çalışacak şekilde tasarlanmıştır.

  • 00:05:00 Bu bölümde konuşmacı, görüntülerin veya yüksek çözünürlüklü videoların işlenmesi ve virüs tarayıcılarının çalıştırılması dahil olmak üzere OpenCL'nin ilk kullanımlarından bazılarını açıklıyor. Ek olarak, teknoloji yapay zeka sistemleri, modelleme sistemleri, fizik, post-processing ve hızlandırılmış aydınlatma ve filmler için render için kullanışlıdır. Konuşmacı, diğer şeylerin yanı sıra Hollywood için OpenCL oluşturma konusunda daha fazla çalışma görmeyi umuyor.
Introduction to OpenCL
Introduction to OpenCL
  • 2013.05.29
  • www.youtube.com
Michael Houston, GPG System Architect Learn about OpenCL, what the transition to OpenCL will be like, what applications are ideal for OpenCL and what impact ...
 

AMD Developer Central: 1. Bölüm: OpenCL™ nedir?



AMD Developer Central: 1. Bölüm: OpenCL™ nedir?

Bu video, sıralı hesaplamalar yerine paralel hesaplamaları hızlandırmak için çeşitli işlemcilerden yararlanmaya odaklanan OpenCL ve tasarım hedeflerine bir giriş sağlar. OpenCL, çekirdekler, küresel ve yerel boyutlar ve çalışma grupları kullanan farklı işlemciler için taşınabilir kod yazılmasını sağlar. Çalışma öğeleri ve çalışma grupları, kaynakları paylaşarak işbirliği yapabilir, ancak farklı çalışma gruplarındaki iş öğeleri arasında senkronizasyon mümkün değildir. Optimum problem boyutları, farklı işleme türleri için değişiklik gösterir ve en iyi performans için en iyi boyutları seçmek önemlidir. OpenCL, OpenCL olay modelini kullanarak görev ve veri paralelliğini birlikte ifade ederek bir sistemin yeteneklerini tam olarak kullanabilir.

  • 00:00:00 Bu bölümde, Justin Hensley OpenCL'nin temellerini ve paralel hesaplamaları hızlandırmak için öncelikli olarak CPU'ları, GPU'ları veya hücre geniş bant motoru veya DSP'ler gibi diğer işlemcileri kullanmaya odaklanan tasarım hedeflerini tartışıyor. sıralı olanlar, dramatik hızlanmalarla sonuçlanır. OpenCL, paralellikten yararlanmak için kullanılan C işlevlerine benzer çekirdekleri ve çekirdek örneklerini yürüten uygulamalarla çekirdek koleksiyonları ve diğer işlevler olan programları kullanarak AMD CPU'lar ve GPU'lar gibi herhangi bir işlemci türünde çalışacak şekilde taşınabilir kod yazılmasını sağlar. kuyruğa alınmış ve sırayla veya sıra dışı olarak yürütülen kuyruklar. OpenCL'deki global ve yerel boyutlar, hesaplama aralığını tanımlarken, OpenCL'nin tüm amacı, hesaplamayı aynı anda hızlandırmak için yüksek düzeyde paralel cihazlar kullanmaktır; yerel çalışma gruplarının kaynakları paylaşarak işbirliği yapmasına izin verir, çünkü global çalışma öğeleri yalnızca senkronizasyonla bağımsız olmalıdır. bir çalışma grubu içinde.

  • 00:05:00 Bu bölümde, iş öğeleri ve çalışma gruplarını ve OpenCL'nin bir çalışma grubu içindeki iş öğeleri arasında engeller veya bellek çitleri kullanarak nasıl eşitleme yapmamızı sağladığını öğreniyoruz. Ancak, farklı çalışma gruplarındaki iş öğeleri birbiriyle eşitlenemez. Optimum problem boyutları, farklı işleme türleri için de değişiklik gösterir ve en iyi performansı elde etmek için verilen problem için en iyi boyutları seçmek önemlidir. OpenCL'de, OpenCL olay modelini kullanarak tek bir iş öğesini bir görev olarak yürüterek görev paralelliğini ifade etmek de mümkündür. OpenCL, görev ve veri paralelliğinin birlikte çalışmasına izin vererek sistemin kapasitesini tam olarak kullanabilir.
Episode 1: What is OpenCL™?
Episode 1: What is OpenCL™?
  • 2013.05.27
  • www.youtube.com
In this video, you learn what OpenCL™ is and why it was designed the way itis. We go through design goals and the execution model of OpenCL™. Topicscovered i...
Neden: