Ticarette OpenCL - sayfa 8

 

36. İşlemci Veriyolunda Talimatları Çalıştırın



36. İşlemci Veriyolunda Talimatları Çalıştırın

Video, toplama işlemlerini gerçekleştirme örneği kullanarak bir CPU veri yolunda hesaplamaların nasıl yürütüldüğünü açıklar. Veri yolu, adresleri kullanarak verileri belleğe yüklemek ve depolamak için yükleme ve depolama birimlerini ve işlemleri gerçekleştirmek için ALU'lar gibi işlevsel birimleri içerir. Video, bellekten veri yükleme, işlemleri gerçekleştirme ve sonuçları yeniden belleğe kaydetme dahil olmak üzere süreci adım adım gösterir. Konuşmacı ayrıca aynı işlevi uygulamak için FPGA'nın nasıl kullanılabileceğini ve donanımdaki mevcut kaynaklardan en iyi şekilde yararlanılabileceğini açıklıyor.

  • 00:00:00 Bu bölümde video, toplama işlemleri gerçekleştirme örneği kullanarak hesaplamaların bir PGA'ya nasıl eşlendiğini açıklar. İlk olarak, yüksek seviyeli kod CPU komutları kullanılarak montaj diline dönüştürülür ve ara değerler kayıtlarda saklanır. CPU, adresleri kullanarak verileri belleğe yüklemek ve depolamak için yükleme ve depolama birimleri dahil olmak üzere, veri yolunda işlevsel birimlere sahip bir boru hattı CPU'sudur. Veri yolu, sabit bir veri genişliği ve işlem sayısı dahilinde her türlü talimatı yürütmek için yeterince genel olacak şekilde tasarlanmıştır ve ALU aracılığıyla bir kayda sabit bir değer yüklenebilir. Video ayrıca CPU'da altı talimatın nasıl yürütüldüğüne dair bir örnek vererek süreci adım adım gösteriyor.

  • 00:05:00 Bu bölümde, konuşmacı birkaç talimatı gözden geçirir ve bunların bir CPU veri yolunda nasıl yürütüldüğünü açıklar; buna bellekten kayıt dosyalarına veri yükleme, çarpma ve toplama gibi işlemleri gerçekleştirmek için veri yolundaki farklı fonksiyonel birimleri kullanma dahildir. ve sonuçları tekrar belleğe kaydetme. Konuşmacı daha sonra CPU donanımını açarak ve işlev için gereken tam kaynakları kullanarak FPGA donanımındaki mevcut kaynaklardan en iyi şekilde yararlanarak aynı çekirdek işlevini uygulamak için FPGA'nın nasıl kullanılabileceğini açıklamaya devam eder.
Execute Instructions on CPU Datapath
Execute Instructions on CPU Datapath
  • 2020.07.04
  • www.youtube.com
This video reviews how instructions are executed on a traditional CPU data path, which will be contrasted with the mapping to a customized FPGA design. Ackno...
 

37. FPGA'da Özelleştirilmiş Veri Yolu


37. FPGA'da Özelleştirilmiş Veri Yolu

Video, CPU donanımını açarak ve FPGA'daki veri yolunu özelleştirerek gelişmiş performans için çekirdek işlevini uygulamak üzere bir FPGA kullanmayı açıklar. Kullanılmayan birimleri kaldırarak, sabitleri ve kabloları yükleyerek ve bazı işlemleri yeniden planlayarak, performansı artırmak için yükleme işlemleri eş zamanlı olarak gerçekleştirilebilir. Özelleştirilmiş veri yollarının tasarımı, belirli bir işlev için gerekli işlemleri ve verileri seçerek verimi artırabilir, gecikmeyi ve güç tüketimini azaltabilir. Video, iki vektör üzerinde talebe dayalı toplama örneğini gösterir; sonuç, verimli ardışık düzene izin vermek için aşamalar arasında kayıtlar kullanılarak bellekte depolanır ve arka arkaya eklemeler için sekiz iş öğesinin başlatılmasına olanak tanır.

  • 00:00:00 Bu bölümde, geliştirilmiş performans ve kaynak kullanımı ile çekirdek işlevini uygulamak için FPGA kullanma kavramı açıklanmaktadır. Fikir, yürütmenin her adımında kullanılmayan kaynakları kullanırken gerekli işlevi uygulayan tasarımı oluşturmak için CPU Donanımını açmak ve FPGA kaynaklarını kullanmaktır. Bazı kullanılmayan birimleri, yükleme sabitlerini ve kabloları kaldırarak ve bazı işlemleri yeniden planlayarak, yük işlemleri performansı artırarak eş zamanlı olarak gerçekleştirilebilir. FPGA'daki veri yolunun özelleştirilmesi, özel ayrılmış kaynaklar kullanılarak aynı sonucu elde edebilir.

  • 00:05:00 Bu bölümde, konuşmacı belirli bir işlev, bellek boyutu ve yapılandırma için gerekli işlemleri ve verileri seçerek verimi iyileştirebilecek, gecikmeyi ve gücü azaltabilecek şekilde FPGA'da özelleştirilmiş bir veri yolunun tasarımını tartışıyor. tüketim, iki vektör üzerinde talep bazında toplama gerçekleştiren bir çekirdek işlevi kullanılarak, sonuç bellekte depolanır. Aşamalar arasında kayıtlardan yararlanan veri yolu, verimli ardışık düzen kullanabilir ve arka arkaya eklemeler için sekiz iş öğesi başlatabilir ve boşta kalan birimleri önlemek için her döngünün farklı iş parçacıklarını işlemesine olanak tanır.
Customized Datapath on FPGA
Customized Datapath on FPGA
  • 2020.07.04
  • www.youtube.com
This video explains how to map OpenCL program onto a customized design in FPGA.Acknowledgement: the slides are from Intel's "OpenCL for FPGA" tutorial at ISC...
 

38. FPGA ve Veri Paralel Çekirdeği için OpenCL



38. FPGA ve Veri Paralel Çekirdeği için OpenCL

Video, OpenCL'nin FPGA mühendislerinin FPGA'lardaki paralel bilgi işlem kaynaklarından yararlanarak FPGA uygulama geliştiricilerinin sayısını artırmak için yazılım mühendisliği kaynaklarını kullanmalarına nasıl olanak tanıdığını açıklıyor. OpenCL'nin programlama modeli, çekirdek adı verilen veri paralel işlevlerini kullanarak paralellik belirtimini etkinleştirir ve her çekirdek, bağımsız veri segmentleri üzerinde paralel hesaplamalar gerçekleştirmek için "genel kimliği al" tarafından belirtilen tanımlayıcılara dayanır. İş parçacıklarının veri kümesinin farklı bölümlerine eriştiği, çalışma gruplarına bölündüğü ve yalnızca aynı çalışma grubu içindeki iş parçacıklarının yerel belleği paylaşabildiği iş parçacıkları ve çalışma grupları kavramı tanıtılır. Bu programlama modeli ile OpenCL, verimli veri paralel işlemeye izin verir.

  • 00:00:00 Bu bölümde, konuşmacı OpenCL'yi ve bunun FPGA tabanlı uygulamalar tasarlamadaki önemini tanıtıyor. FPGA için standart CPU'lardan daha az programcı olmasına rağmen, üst düzey bir programlama dili olan OpenCL, FPGA mühendislerinin FPGA'lardaki paralel bilgi işlem kaynaklarından yararlanmak için yazılım mühendisliği kaynaklarını kullanmalarına izin vererek FPGA uygulama geliştiricilerinin sayısını artırır. OpenCL, heterojen bilgi işlem için bir endüstri standardıdır ve programcıların, çok çekirdekli işlemciler, GPU'lar ve FPGA'lar gibi donanım hızlandırıcılarla karmaşık iş yüklerini yürütmek için programlar yazmak üzere tanıdık C veya C++ API'lerini kullanmasına izin verir. OpenCL'nin arkasındaki büyük fikir, paralelliğin açıkça belirtilmesine izin veren yürütme modelidir.

  • 00:05:00 Bu bölümde OpenCL'nin FPGA ve data parallel kernel için programlama modeli anlatılmaktadır. Video, ayrı donanım etki alanlarında çalışan bir ana bilgisayar ve bir hızlandırıcı veya cihaz içeren bir OpenCL çerçevesinin yapısını açıklar. Ana bilgisayar, cihazları ve çekirdekleri hazırlar ve bu cihazlara gönderilmesi gereken komutları oluşturur. Hızlandırıcı kodu OpenCLC'de yazılmıştır ve ana bilgisayar, bir ana bilgisayar işlemcisi ile cihazda yürütülen çekirdekler arasındaki iletişimin soyutlanmasına izin veren bir dizi OpenCL API çağrısı aracılığıyla onunla iletişim kurar. OpenCL çekirdekleri, her biri "get global ID" tarafından belirtilen tanımlayıcılara dayanan birden çok paralel yürütme iş parçacığını tanımlamak için kullanılan veri paralel işlevleridir. Bu kimlikler, bağımsız veri çiftleri üzerinde paralel hesaplamaların gerçekleştirilmesine izin vererek, bir çekirdeğin üzerinde çalışması gereken veri bölümlerini veya bölümlerini belirtir.

  • 00:10:00 Bu bölümde, iş parçacıklarının veri kümesinin farklı bölümlerine erişebildiği ve çalışma gruplarına bölündüğü iş parçacıkları ve çalışma grupları kavramı tanıtılmaktadır. Yalnızca aynı çalışma grubu içindeki iş parçacıkları yerel belleği paylaşabilir. Her iş parçacığının yerel ve genel bir kimliği vardır ve genel kimlik, grup kimliği ve yerel boyut kullanılarak hesaplanabilir. Bu sistem verimli veri paralel işlemeye izin verir.
OpenCL for FPGA and Data Parallel Kernel
OpenCL for FPGA and Data Parallel Kernel
  • 2020.04.19
  • www.youtube.com
A recap of OpenCL for FPGA, how kernels identify data partition
 

39. OpenCL Ana Bilgisayar Tarafında Programlama: Bağlam, kuyruklar, bellek nesneleri, vb.



39. OpenCL Ana Bilgisayar Tarafında Programlama: Bağlam, kuyruklar, bellek nesneleri, vb.

Bu eğitim videosu, bağlam, kuyruklar ve bellek nesnelerine odaklanarak OpenCL'deki çeşitli ana bilgisayar tarafı programlama kavramlarını araştırıyor. Çekirdek nesneleri oluşturmak ve çekirdek işlevlerine bağımsız değişkenler iletmek için kullanılan OpenCL'deki iki yeni API'yi, clCreateKernelsInProgram ve clSetKernelArg'ı kapsar. Öğretici ayrıca görüntü nesneleri oluşturmak için clCreateImage API'sinin kullanımını ve görüntü piksellerinin kanal sırası ve kanal türü kullanılarak bellekte nasıl depolandığını tartışır. OpenCL'nin 2B ve 3B görüntüleri nasıl işlediğini, geliştiricilerin clGetMemoryObjectInfo gibi API'leri kullanarak bellek nesneleri hakkında nasıl bilgi toplayabileceklerini ve okuma ve yazma arabellek kaydı, bellek nesnelerini eşleme ve bellek nesneleri arasında veri kopyalama gibi bellek nesnesi işlemlerinin nasıl gerçekleştirileceğini açıklar.

  • 00:00:00 Bu bölümde, OpenCL'nin ana bilgisayar tarafı programlama kavramları yeniden gözden geçirilir. Bu bölüm bağlam, kuyruklar ve bellek nesnelerine odaklanır. Farklı üreticilerin cihazlarından oluşsa bile, fiziksel bir platform üzerinde birden çok bağlam oluşturulabilir. Genel bellekteki bellek nesneleri, birden çok sıra tarafından paylaşılabilir, ancak ana bilgisayar tarafındaki uygulama tarafından uygun senkronizasyonun gerçekleştirilmesi gerekir. Tek bir bağlamda birden çok bağlam ve birden çok komut kuyruğu olması mümkündür. Satıcılar tarafından sağlanan farklı OpenCL platformları mutlaka uyumlu değildir ve bu nedenle aynı bağlama yerleştirilemez.

  • 00:05:00 Bu bölümde, video OpenCL'deki iki yeni API'yi tartışıyor. İlk API, clCreateKernelsInProgram işlevini kullanarak bir OpenCL programındaki her işlev için çekirdeklerin oluşturulmasına izin verir. Bu, clGetKernelInfo işlevini kullanarak çekirdek işlev adlarını ve diğer ilgili bilgileri doğrulamak için kullanılabilecek bir çekirdek nesneleri dizisi oluşturur. İkinci API olan clSetKernelArg, çekirdek bağımsız değişkenlerini başlatmak için kullanılır ve çekirdek nesnesini ve bağımsız değişkenin dizinini bağımsız değişken olarak alır. Video, bu API'lerin nasıl kullanılacağını ve kullanımdan sonra çekirdek nesnelerinin nasıl serbest bırakılacağını açıklamaya devam ediyor.

  • 00:10:00 Bu bölümde, API'nin bağımsız değişken değerlerini çekirdek işlevlerine nasıl iletebileceğini öğreniyoruz. İlkel bir veri türünü çekirdek işlevine işaretçi olarak iletebiliriz veya bir işaretçiyi bir bellek nesnesine veya karmaşık veriler içeren örnek bir nesneye geçirebiliriz. Görüntü nesneleri, piksel verilerini tutmak için kullanılan özel bir tür bellek nesnesidir. Tampon nesnelerle aynı yapılandırma bayraklarını kullanarak ve bir görüntü biçimleri listesinden tanımlanan biçimlerle görüntü nesneleri oluşturabiliriz. clCreateImage API, görüntü nesneleri oluşturmak için kullanılır ve parametreleri, arabellek nesneleri oluşturmak için kullanılanlara benzer. Üçüncü bağımsız değişken, tahsis edilecek görüntü verilerinin format özelliklerini tanımlarken, dördüncü bağımsız değişken görüntünün tipini ve boyutlarını tanımlar.

  • 00:15:00 Bu bölümde, görüntü piksellerinin bellekte nasıl depolandığını belirlemek için clCreateImage() API'sinin kullanımı tanıtılmaktadır. Görüntü nesnesi formatı, bir görüntüyü bellekte saklamak için tasarlanmıştır ve iki faktörden oluşur: kanal sırası ve kanal tipi. Kanal sırası, her piksel için kanal bilgilerinin nasıl depolandığını tanımlar ve temel renkleri ve alfa bilgilerini içeren numaralandırılmış bir türdür. Bunun aksine, kanal tipi, görüntü kanallarının ikili olarak nasıl kodlandığını belirtir ve renk bilgisinin gösterimini belirlemek için farklı değerler kullanır. Kanaldaki renk değerini temsil etmek için kaç bitin kullanılacağını belirlemede bit seviyeleri önemlidir. Ayrıca, görüntü formatlarının bellek düzeni, her piksel için, RGBA dizisinin, her bir renk kanalı için renk bilgisini kodlamak üzere bir bayt kullanılarak bellekte saklanacağı şekilde gösterilmiştir.

  • 00:20:00 Bu bölümde video, OpenCL'nin başka bir boyutta bir araya yığılmış birden çok dilimden oluşabilen 2B ve 3B görüntüleri nasıl işlediğini tartışıyor. CL görüntü tanımlayıcısı, görüntü nesnelerinin nasıl düzenlendiğini açıklamak için kullanılır ve piksel cinsinden görüntü genişliği, yüksekliği ve derinliği ile bayt cinsinden tarama çizgisi aralığı gibi parametreleri içerir. Ek olarak, clCreateImage() API, satırlar ve dilimler içinde dolgu ve hizalama için ayarlamalar gerektirebilecek görüntüyü açıklamak için gereken bayt sayısını belirlemek için kullanılır.

  • 00:25:00 Bu bölümde, konuşmacı clGetImageInfo ve clGetMemoryObjectInfo gibi API'leri kullanarak OpenCL'de görüntü ve bellek nesneleri hakkında nasıl bilgi toplanacağını açıklıyor. Bu API'ler, geliştiricilerin görüntü formatı, piksel boyutu, piksel genişliği, piksel yüksekliği, derinliği ve bellek nesnelerinin diğer özellikleri gibi şeyler hakkında bilgi edinmesine olanak tanır. Ek olarak, tampon nesnelere veri okumak veya yazmak için EnqueueReadBuffer/EnqueueWriteBuffer'ı ve görüntü nesnesi verilerine erişmek için EnqueueReadImage/EnqueueWriteImage'ı kullanabilirler. Orijin, bölge, satır aralığı ve dilim aralığının kullanımı da satırlar, dilimler ve resimler olarak düzenlenen görüntü nesnelerine özgüdür. Geliştiriciler, erişmek istedikleri bir bölgenin tam konumunu belirtmek veya bir kopyalama işlemi gerçekleştirmek ve CL olay bağımsız değişkenlerini kullanarak olaylar oluşturmak için bu API'leri kullanabilir.

  • 00:30:00 Bu bölümde, video OpenCL'deki iki bellek nesnesi işlemini açıklar: okuma ve yazma arabelleği kaydı ve bellek nesnelerini eşleme. Okuma ve yazma arabelleği rec ile kullanıcı, orijini ve boyut bilgisini belirterek, verilerin belirli noktalarda alınmasına veya yazılmasına izin verir. Bellek nesnelerinin eşlenmesi, bir aygıttaki bir bellek nesnesinin ana bilgisayardaki bir bellek bölgesine eşlenmesine izin verir. Eşlendikten sonra, bellek nesneleri, bellek eşleme API'leri aracılığıyla elde edilen işaretçiler kullanılarak ana bilgisayar tarafında okunabilir ve değiştirilebilir. Video ayrıca, bellek nesneleri arasında veri kopyalamak, ana bilgisayar tarafında programlamayı basitleştirmek ve okuma ve yazma işlemi performansını iyileştirmek için OpenCL'de bulunan bellek nesnesi işlemlerinin bir listesini de inceliyor.

  • 00:35:00 Bu bölümde, konuşmacı OpenCL'deki çeşitli bellek nesnelerini ve bunların verileri bir konumdan diğerine kopyalamak için nasıl kullanılabileceğini tartışıyor. Kopyalama işlevleri, arabelleği kopyala, görüntüyü kopyala, dikdörtgen kopya arabelleğini vb. içerir. Konuşmacı bir ana-cihaz sistemini gösterir ve CL sıradaki kopyalama arabelleği işlevini kullanarak verilerin bir arabellekten diğerine nasıl kopyalanacağını gösterir. cl enqueu eşleme arabelleği kullanılarak arabelleğin bir bellek alanına nasıl eşleneceğini ve ardından eşlenen bölgeyi kendisine kopyalamak için bellek kopyasının nasıl kullanılacağını açıklarlar.
OpenCL Host Side Programming: Context, queues, memory objects, etc.
OpenCL Host Side Programming: Context, queues, memory objects, etc.
  • 2020.03.27
  • www.youtube.com
OpenCL Host Side Programming: Context, queues, memory objects, etc.
 

40. FPGA için HDL Tasarım Akışı



40. FPGA için HDL Tasarım Akışı

Bu video, Quartus tasarım yazılımını kullanarak Alan Programlanabilir Kapı Dizilerini (FPGA'lar) geliştirme sürecini açıklamaktadır.

FPGA geliştirme için tasarım metodolojisi ve yazılım araçları açıklanmıştır. Tipik programlanabilir mantık tasarım akışı, bir tasarım spesifikasyonu ile başlar, RTL kodlamasına geçer ve ardından RTL fonksiyonel simülasyonu, ardından tasarımı cihaza özel ilkel öğelere çevirmek için sentez ile devam eder. Mühendisler daha sonra bu ilkelleri belirli bir FPGA içindeki belirli konumlara eşler ve zamanlama analizi yoluyla performans özelliklerini doğrular. Son olarak, tasarım bir FPGA kartına yüklenir ve donanım üzerinde test etmek için hata ayıklama araçları kullanılabilir. Intel FPGA'lar için Quartus tasarım yazılımı, bir sistem tanımıyla başlayan ve mantık sentezi, yer ve rota, zamanlama ve güç analizi ve tasarımın gerçek FPGA'lara programlanması ile devam eden tasarım akışını gerçekleştirmek için kullanılır.

HDL Design Flow for FPGA
HDL Design Flow for FPGA
  • 2020.04.18
  • www.youtube.com
(Intel) FPGA Design Flow using HDL
 

41. OpenCL veri türleri ve cihaz hafızası



41. OpenCL veri türleri ve cihaz hafızası

Video, OpenCL veri türlerini ve cihaz belleğini tartışır. Boole, tamsayı ve kayan nokta türlerini kapsar ve int-ptr, uint-ptr ve ptrdiff-t gibi bellek adreslerinde işlem yapmak için kullanılan belirli veri türlerini açıklar. Ayrıca, işleçlerin her öğeye aynı anda uygulanmasına izin veren, aynı türden birden çok öğe içeren diziler olan vektör veri türlerini ve bunların nasıl kullanılacağını açıklar. Video, harflerin ve sayısal indekslerin, yüksek-düşük ve çift-tek kullanımı dahil olmak üzere bir vektördeki öğelerin nasıl başlatılacağına ve öğelere nasıl erişileceğine ilişkin çeşitli örnekler sunar. Ayrıca bellek hizalamasını ve set kernel bağımsız değişkeninin ve özel çekirdek bağımsız değişkenlerinin nasıl kullanılacağını açıklar.

  • 00:00:00 Bu bölümde video, Boole, tamsayı ve kayan nokta türlerini içeren OpenCL çekirdek programlamasında kullanılabilecek veri türlerine genel bir bakış sağlar. Bellek adreslerinde işlem yapmak için int-ptr, uint-ptr ve ptrdiff-t gibi belirli veri türleri kullanılır. Video, çift tipin yalnızca hedeflenen cihazın CL Cronus 14-nokta-64 CLCronus FP 64 uzantısını desteklemesi durumunda desteklendiğini belirtiyor. Geliştiriciler, OpenCL çekirdek programlarında çift türü kullanmadan önce bu uzantıyı kontrol edebilirler. Video ayrıca çift tip uzantının nasıl etkinleştirileceğini ve bir çekirdek programında nasıl kullanılacağını açıklar.

  • 00:05:00 Videonun bu bölümünde OpenCL veri tipleri ve cihaz hafızası ele alınmıştır. OpenCL standardı, veri türleri için endian sırasını zorunlu kılmaz. Little-endian ve big-endian, bir bilgisayar mimarisinin, çoğaltılan değişkenlerin bellekte nasıl saklanacağını nasıl tanımladığına bağlı olarak isteğe bağlı iki endian türüdür. Bir cihazın endian siparişleri, CR get device info vektör veri tipi kullanılarak bulunabilir. Ek olarak, vektör veri türleri, aynı türden birden çok öğe içeren, sabit uzunluğa sahip ve operatörlerin her öğeye aynı anda uygulama yapmasına izin veren diziler olarak tanıtıldı. Vektör veri türlerini kullanmanın faydaları, dizileri kullanmaktan daha hızlı ve basit olmasıdır. Video, birden çok dizide öğe bazında toplama gerçekleştirmek için vektör veri türlerinin nasıl kullanılacağını açıklar.

  • 00:10:00 Bu bölümde, OpenCL'de kullanılabilen, skaler tiplere çok benzeyen farklı vektör tiplerini öğreniyoruz. Bununla birlikte, vektörlerin ne kadar büyük olduğunu ve ne tür elemanlar içerdiğini belirtmek için vektörlerin sonunda bir sayı olması gerekir. OpenCL ayrıca, cihaz tarafından desteklenebilen veya desteklenemeyen çift ve yarım veri tipi olmak üzere iki özel veri tipine sahiptir. Farklı türler için tercih edilen vektör boyutunu bilmek için OpenCL, bir cihazın tercih edilen vektör genişliğini sorgulamak için kullanılabilecek bir API sağlar. Buna dayanarak, tercih edilen 128 boyutu için bir kayan nokta vektörü tanımlamak veya tercih edilen vektör boyutu 256 ise bir kayan nokta 8 tanımlamak gibi programımızı oluşturmak için seçenekler belirleyebiliriz. Vektörler, içinde başlangıç değerleri atanarak başlatılabilir. parantez. Daha küçük vektörler kullanarak bir vektörü bile başlatabiliriz, örneğin, iki boyutlu iki vektörümüz varsa, A ve B, her ikisi de skaler değerlerle başlatılmıştır.

  • 00:15:00 Bu bölümde, konuşmacı bir OpenCL vektöründeki öğelerin veya bileşenlerin nasıl başlatılacağını ve bunlara nasıl erişileceğini açıklar. Kullanıcılar, daha küçük vektörler, skalerler ve daha küçük faktörlerin bir kombinasyonunu kullanarak veya değerleri doğrudan vektör öğelerine atayarak bir vektörü başlatabilir. Vektördeki öğelere erişmek için sayı dizinlemenin, harf dizinlemenin ve yüksek-düşük çift-tek'in nasıl kullanılacağını gösteren örnekler verilmiştir. Farklı örnekler, bir vektörden öğelerin alt kümelerinin nasıl alınacağını ve bu öğelerin diğer değişkenlere nasıl atanacağını gösterir.

  • 00:20:00 Bu bölümde, konuşmacı sayısal indeksler, bir vektörün farklı boyutlarını temsil eden harfler (X, Y, Z ve W gibi) ve kombinasyonlar dahil olmak üzere vektör öğelerini indekslemek ve değiştirmek için çeşitli yöntemleri tartışır. Harfler ve sayısal indeksler. Ayrıca vektördeki konumlarına göre vektör bileşenlerinin bir alt kümesini seçmek için yüksek-düşük ve çift-tek'in nasıl kullanılacağını açıklarlar. Bu indeksleme ve değiştirme yöntemleri, farklı uzunluk ve boyutlardaki vektörlerle çalışmak için yararlı olabilir.

  • 00:25:00 Bu bölümde, bir vektördeki öğelerin üst veya alt yarısını veya hatta üst veya alt yarısını elde etmemizi sağlayan yüksek-düşük çift indeksleme gibi bir vektördeki öğelere erişmek ve onları değiştirmek için farklı yöntemler öğreniyoruz. -indekslenmiş öğeler. Ayrıca, bir tamsayının en önemsiz baytının en önemli bayttan daha düşük bir adreste depolandığı küçük bir endian cihazında vektörlerin nasıl depolandığını da keşfedeceğiz. Bu, işaretsiz tamsayılardan oluşan bir vektörde, her 32 bitlik tamsayı değerinin dört baytının, vektörün her bir tam öğesi 16 bayt olacak şekilde, en küçükten en anlamlı bayta doğru sırayla saklanacağı anlamına gelir.

  • 00:30:00 Bu bölümde, konuşmacı Little-Endian ve Big-Endian cihazlarında OpenCL veri türlerinin ve cihaz belleğinin nasıl depolandığını tartışıyor. İşaretsiz tamsayı türünden dört öğeli bir vektörün her iki tür aygıtta da bellekte nasıl depolandığını gösterirler ve little-endian ve big-endian aygıtlarının en az anlamlı ve en önemli olanı depolama biçimi nedeniyle baytların sırasının farklı olduğuna dikkat çekerler. bayt. Konuşmacı ayrıca, işaretçiler kullanarak bu bellekten tek tek baytları alan "vektör baytları" adı verilen bir çekirdek işlevini gösterir.

  • 00:35:00 Bu bölümde, OpenCL veri türlerinde bellek hizalama kavramı ele alınmaktadır. Belleğin tipik olarak, her zaman dördün katları olan bellek adreslerinde depolanan tamsayılar ve kayan noktalar gibi 32 bitlik yapılar üzerinde hizalandığı açıklanır. Ayrıca, uzun ve çift gibi 64 bitlik yapıların, sekizin katları olan adreslerde depolandığı ve ikinin en küçük kuvvetinin veri boyutundan büyük veya ona eşit olduğu, veri yapısının bellek hizalamasını ayarlar. Ayrıca, OpenCL'de yerel ve özel çekirdek bağımsız değişkenlerini başlatma süreci ele alınmış ve yerel ve özel alanlardaki çekirdek bağımsız değişkenlerinin SetKernelArg kullanılarak yapılandırılabileceği ancak belirtici yerel olduğunda son parametre değerinin ayarlanamayacağı açıklanmıştır. Ayrıca, özel çekirdek bağımsız değişkenlerinin tamsayılar ve kayan noktalar gibi basit ilkel öğeler olması gerektiğine dikkat çekilir.

  • 00:40:00 Bu bölümde video, OpenCL programınızda set kernel argümanının ve private kernel argümanlarının nasıl kullanılacağını tartışıyor. set kernel argümanını kullanırken, ilk argüman argümanın tamsayı boyutunun indeksi olmalı ve ardından değişkene bir işaretçi gelmelidir. Özel çekirdek bağımsız değişkenleri, yalnızca çekirdek işlevlerinde kullanılabilen ve set kernel bağımsız değişkeni kullanılarak iletilebilen bir float four dizisi gibi vektörler de olabilir.
OpenCL data types and device memory
OpenCL data types and device memory
  • 2020.03.31
  • www.youtube.com
Data types specific to OpenCL kernel functions and their layout in device memory.
 

42. OpenCL vektör ilişkisel işlemleri



42. OpenCL vektör ilişkisel işlemleri

Video, OpenCL çekirdek programlamasını, işleçlerini ve yerleşik işlevlerini tartışıyor. Odak noktası, ilişkisel işleçler ve bunların skaler ve vektörel değerlerle nasıl çalıştıklarıdır. Sabit ve özel bir vektör arasında öğe bazında AND işlemi gerçekleştiren örnek bir çekirdek işlevi olan "op testi" sunulmaktadır. Video, belirli vektör öğelerini mantıksal işlemler kullanarak bir skalerle karşılaştırarak OpenCL'de ilişkisel işlemlerle bir vektörün nasıl uygulanacağını açıklar. Ortaya çıkan vektör, çıkış belleği nesnesine atanan son bir çıkış vektörü oluşturmak için bir while döngüsünde kullanılabilir.

  • 00:00:00 Bu bölümde, video OpenCL çekirdek programlamayı tanıtıyor ve işleçleri ve diğer üst düzey dillerden dil tarafından miras alınan yerleşik işlevleri tartışıyor. Sunulan işleçler aritmetik, karşılaştırma ve mantık, bitsel ve üçlü seçimi içerir. Bu bölüm özellikle ilişki işleçlerine odaklanır ve bunların hem skaler hem de vektörel değerlerle nasıl çalıştıklarını açıklar. Segment ayrıca, sabit bir vektör ile ilk değerlerle başlatılan özel bir vektör arasında öğe bazında bir AND işlemi yürütmek için ilişkisel işleci kullanan "op testi" adlı örnek bir çekirdek işlevi sağlar.

  • 00:05:00 Bu bölümde konuşmacı, OpenCL'de ilişkisel işlemlere sahip bir vektörün nasıl uygulanabileceğini açıklıyor. Konuşmacı, mantıksal işlemleri kullanarak bir vektörün belirli öğelerini bir skaler değerle karşılaştırma örneğini kullanarak, sırasıyla -1 ve 0 olarak temsil edilen doğru ve yanlış değerlerle sonuçtaki bir vektörün nasıl yaratılabileceğini gösterir. Ortaya çıkan vektör daha sonra, çıkış belleği nesnesine atanan nihai bir çıkış vektörü oluşturmak için bireysel öğelerin daha fazla mantıksal işlemden geçtiği bir while döngüsünde kullanılabilir.
OpenCL vector relational operations
OpenCL vector relational operations
  • 2020.04.03
  • www.youtube.com
vector relational operations
 

43. OpenCL yerleşik işlevleri: vloadn, seçin



43. OpenCL yerleşik işlevleri: vloadn, seçin

Video, iki temel OpenCL yerleşik işlevini kapsar: vloadn ve select. Vloadn, yığınları bir skaler diziden değerlerle başlatmanıza izin verir ve iki argüman alır: ofset ve skaler diziye bir işaretçi. Öte yandan Seç, iki gruptan belirli öğeleri seçmenize ve bunları yeni bir vektör oluşturmak için kullanmanıza olanak tanır. İşaretli veya işaretsiz tamsayı değerleri içerebilir ve maske öğelerinde yalnızca en önemli bit önemlidir. Öğretici, bu işlevlerin pratikte nasıl çalıştığını gösterir.

  • 00:00:00 Bu bölümde, bir skaler dizideki değerleri kullanarak partileri başlatmak için kullanılan yerleşik bir işlev olan Vloadn hakkında bilgi ediniyoruz. Vloadn iki argüman alır: ofset ve skaler diziye bir işaretçi. Ofset, dizinin hangi öğelerinin toplu işe yerleştirileceğini, vektörün boyutuna göre verilir, belirler. Ek olarak, iki gruptan belirli öğeleri seçmek ve bunları yeni bir vektör oluşturmak için kullanmak için kullanılabilen Select işlevini öğreniyoruz. İşaretli veya işaretsiz tamsayı değerleri içerebilir ve maske öğelerinde yalnızca en önemli bit önemlidir. Select'teki bir maske bileşeninin en önemli bitleri, çıktı vektöründe karşılık gelen öğe için hangi partinin kullanılacağını belirler.

  • 00:05:00 Bu bölümde, öğretici iki OpenCL yerleşik işlevini tartışıyor: vloadn ve select. Vloadn, belirli bir vektördeki öğeleri yeni bir vektöre yüklemek için kullanılır ve seçim, bir maskeye dayalı olarak birinci veya ikinci girdiden öğeleri seçmek için kullanılır. Öğretici, vloadn'un maskeye dayalı olarak ilk giriş vektöründen değerleri nasıl seçtiği ve seçmenin birinci veya ikinci giriş vektörlerinden bitleri seçmek için nasıl çalıştığı da dahil olmak üzere bu işlevlerin pratikte nasıl çalıştığına dair örnekler sunar.
OpenCL built-in functions: vloadn , select
OpenCL built-in functions: vloadn , select
  • 2020.04.05
  • www.youtube.com
OpenCL built-in functions: vloadn , select
 

44. DPC++'ya Giriş



44. DPC++'ya Giriş

Bu video, karmaşık bilgi işlemin yükünü FPGA'ler ve GPU'lar gibi hızlandırıcılara yükleyen ve OneAPI çerçevesinin bir parçası olan veri paralel programlama için üst düzey bir dil olan DPC++'yı tanıtmaktadır. DPC++, modern C++ ve mimari odaklı performans optimizasyonu kullanarak veri paralel iş yüklerini hızlandırmayı amaçlar. Öğretim görevlisi, veri yönetimi değişkenlerinin nasıl bildirileceğini ve bir komut ve erişimci kullanarak bir aygıtta çekirdek işlevinin nasıl yürütüleceğini gösteren basit bir DPC++ örneği sağlar. Video ayrıca, lambda işlevinin, kendisi dışında bildirilen değişkenlerden bağımsız değişkenleri ve başvuruları nasıl alabildiğini de açıklar.

  • 00:00:00 Bu bölümde öğretim görevlisi, karmaşık bilgi işlemin yükünü FPGA'lar ve GPU'lar gibi hızlandırıcılara yükleyen veri paralel programlama için üst düzey bir dil olan DPC++ programlamayı tanıtıyor. DPC++, modern C++ kullanır ve algoritmaları analiz ederek, görevleri veya verileri ayrıştırarak ve mimari odaklı performans optimizasyonunu kullanarak veri paralel iş yüklerini hızlandırmayı amaçlar. DPC++, OneAPI çerçevesinin bir parçasıdır ve amacı, herhangi bir CPU, FPGA veya GPU'da yürütülebilen tek bir dille programlamayı etkinleştirmektir. Öğretim görevlisi daha sonra veri yönetimi için değişkenleri, bir arabelleği ve bir aygıt kuyruğunu bildiren basit bir DPC++ örneği sağlar.

  • 00:05:00 Bu bölümde konuşmacı, aygıtta yürütülecek bir çekirdek işlevini tanımlamak için bir komut ve bir lambda işlevi oluşturan bir DPC++ programı örneğini tanıtıyor. Program, bir arabelleği komutla ilişkilendirmek için bir erişimci ve sonuca erişmek için başka bir erişimci kullanır. Son olarak program, arabellekteki içeriğe erişmek ve çıktısını almak için sonuç erişimcisini kullanmak üzere bir for döngüsü içerir. Lambda işlevi, işlevin dışında bildirilen değişkenlere başvuruları iletmek gibi, işleve argüman almak için farklı yollara sahip olabilir.
Intro to DPC++
Intro to DPC++
  • 2021.04.07
  • www.youtube.com
This videos give a brief introduction to DPC++ and go through a simple DPC++ example source code.
 

45. Paralel Olarak Nasıl Düşünülür?



45. Paralel Olarak Nasıl Düşünülür?

Video, örnek olarak matris çarpımını kullanarak paralel programlamayı öğretir. Birden çok satırın ve sütunun bağımsız olarak hesaplanabildiği bu hesaplamadaki paralelliği vurgular. C matrisinde tek bir eleman hesaplamasının uygulanması, paralel hesaplamaya izin veren bir çekirdek işlevi kullanılarak gösterilmiştir. Erişimcilerin kullanımı, aralık ve paralel çekirdek işlevleri ayrıntılı olarak açıklanmaktadır. Aralık değerinin çekirdek işlevine geçirilmesiyle ilgili adımlar tartışılmaktadır. Intel FPGA geliştirme bulutu kullanan bir matris çarpımı demosu da gösterilmiştir.

  • 00:00:00 Bu bölümde video, paralel programlamayı öğretmek için yaygın olarak kullanılan bir örnek olarak matris çarpımını tanıtır. Video, matris çarpmanın, elde edilen bir matrisi üretmek için öğe bazında çarpma ve toplama gerçekleştirmek üzere bir matristen satırları ve diğerinden sütunları almayı içerdiğini açıklıyor. Video, farklı satırlar ve sütunların birbirinden bağımsız olarak hesaplanabilmesi nedeniyle bu hesaplamada çok fazla paralellik olduğunu açıklıyor. Matris çarpımının basit bir uygulaması, eleman bazında çarpma ve toplama işlemini gerçekleştiren yuvalanmış for döngüleri ile normal C veya C++ dili kullanılarak gösterilmektedir.

  • 00:05:00 Bu bölümde, paralel hesaplamaya izin veren tek bir çekirdek işlevi olarak uygulanan matris C'de tek bir öğe hesaplamasının uygulanmasını öğreniyoruz. Kilit nokta, her bir satır ve sütun için hesaplamanın aynı olması, tek farkın satır ve sütun numaraları olmasıdır. Erişimciler, A ve B matrisleri için salt okunur erişim ve C matrisi için yazma erişimi ile çekirdeklerdeki arabelleklere erişmeye yardımcı olur. Aralık, birden çok boyutu bildirmek için bir soyutlama olarak kullanılır ve H.parallel4, paralel bir çekirdek işlevi tanımlamaya yardımcı olur . Çekirdek işlevi, bağımsız değişkenin her iki boyuttaki tüm değerleri yinelemek için değişken olduğu bir lambda işlevi içerir.

  • 00:10:00 Bu bölümde konuşmacı, aralık değerini laminer bir işlev olan çekirdek işlevine geçirmekle ilgili adımları açıklar. Değişkenin iki boyutunu ve her bir değişkeni nasıl tanımladığını tartışırlar. Konuşmacı, lambda fonksiyonunun nasıl çalıştığını anlatır ve problem boyutunun, çekirdek fonksiyonlarını yürüttüğümüz satır ve sütun sayısıyla nasıl tanımlandığını gösterir. Matris çarpımı örneğini, geleneksel C artı artı gösterimini ve en içteki for döngüsünde yapılan eleman bazında çarpma ve toplama örneğini kullanırlar. Son olarak, Intel FPGA geliştirici bulutunu kullanarak hızlı bir matris çarpımı demosu gösteriyorlar.
How to Think In Parallel ?
How to Think In Parallel ?
  • 2021.04.07
  • www.youtube.com
This video use matrix multiplication example to introduce how to think in parallel with design data parallel algorithms.
Neden: