OpenCL Özel Platformları için FPGA SDK'da Heterojen Bellek Sistemleri Oluşturma
Talimatlar
OpenCL Özel Platformları için Intel® FPGA SDK'da Heterojen Bellek Sistemleri Oluşturma
Özel Platformda heterojen belleğin uygulanması, daha fazla harici bellek arayüzü (EMIF) bant genişliğinin yanı sıra daha büyük ve daha hızlı bellek erişimine olanak tanır. Heterojen bellek erişiminin optimize edilmiş
OpenCL ™(1) çekirdeği, OpenCL sisteminiz için önemli performans iyileştirmeleri sağlayabilir.
Bu uygulama notu, OpenCL(2) için Intel® FPGA SDK ile birlikte kullanılmak üzere Özel bir Platformda heterojen bellek sistemleri oluşturmaya yönelik rehberlik sağlar. Intel, heterojen bellek sistemleri içeren Özel Platformlar geliştiren deneyimli bir FPGA tasarımcısı olduğunuzu varsayar.
Heterojen bellek sistemlerini oluşturmadan önce, aşağıda belirtilen OpenCL için Intel FPGA SDK belgelerini öğrenin.
İlgili Bilgiler
- OpenCL Programlama Kılavuzu için Intel FPGA SDK
- OpenCL En İyi Uygulamalar Kılavuzu için Intel FPGA SDK
- OpenCL Arria 10 GX FPGA Geliştirme Kiti Referans Platformu Taşıma Kılavuzu için Intel FPGA SDK
1.1. FPGA Kartının ve EMIF Arayüzlerinin İşlevselliğini Doğrulama
Her bellek arayüzünü bağımsız olarak doğrulayın ve ardından genel belleği kullanarak Özel Platformunuzu başlatın.
- Her bir arayüzün hızını ve kararlılığını test edebilen donanım tasarımlarını kullanarak her bir bellek arayüzünü doğrulayın.
- Global belleği kullanarak Özel Platformunuzu oluşturun.
- ÖrneğinampDosyada üç DDR arabiriminiz varsa bunlardan birinin heterojen bellek olarak eşlenmesi gerekir. Bu durumda, OpenCL yığınının işlevselliğini her bir DDR arabirimiyle bağımsız olarak doğrulayın.
OpenCL ve OpenCL logosu, Apple Inc.'in ticari markalarıdır ve Khronos Group™'un izniyle kullanılır. - OpenCL için Intel FPGA SDK, yayınlanmış bir Khronos Spesifikasyonuna dayanmaktadır ve Khronos Uyumluluk Test Sürecini geçmiştir. Mevcut uyumluluk durumu şu adreste bulunabilir: www.khronos.org/conformance.
- ÖrneğinampDosyada üç DDR arabiriminiz varsa bunlardan birinin heterojen bellek olarak eşlenmesi gerekir. Bu durumda, OpenCL yığınının işlevselliğini her bir DDR arabirimiyle bağımsız olarak doğrulayın.
Intel Kurumu. Tüm hakları Saklıdır. Intel, Intel logosu ve diğer Intel markaları, Intel Corporation'ın veya yan kuruluşlarının ticari markalarıdır. Intel, FPGA ve yarı iletken ürünlerinin Intel'in standart garantisine uygun olarak mevcut teknik özelliklere göre performansını garanti eder, ancak herhangi bir zamanda herhangi bir bildirimde bulunmaksızın herhangi bir ürün ve hizmette değişiklik yapma hakkını saklı tutar. Intel, yazılı olarak açıkça kabul etmedikçe, burada açıklanan herhangi bir bilgi, ürün veya hizmetin uygulanmasından veya kullanılmasından kaynaklanan hiçbir sorumluluk veya yükümlülük kabul etmez. Intel müşterilerinin, yayınlanmış herhangi bir bilgiye güvenmeden ve ürün veya hizmet siparişi vermeden önce cihaz özelliklerinin en son sürümünü edinmeleri önerilir. *Diğer adlar ve markalar başkalarının mülkiyetinde olabilir.
ISO 9001: 2015 Kayıtlı
Alternatif olarak, iki DDR arabiriminiz ve bir dört veri hızlı (QDR) arabiriminiz varsa, iki DDR arabiriminin OpenCL yığınının ve QDR arabiriminin işlevselliğini bağımsız olarak doğrulayın.
Intel, bellek arayüzlerinizi test etmek için PCI Express® – (PCIe® -) veya EMIF'ye özel tasarımlar kullanmanızı önerir. Her bellek arabiriminin işlevsel olduğunu ve OpenCL tasarımınızın bellek arabirimlerinin bir alt kümesiyle çalıştığını doğruladıktan sonra devam edin.
tamamen işlevsel bir heterojen bellek sistemi oluşturmak.
1.2. board_spec.xml dosyasını değiştirme File
board_spec.xml dosyasını değiştirin file OpenCL çekirdeklerinin kullanabileceği heterojen bellek sistemlerinin türlerini belirtmek için.
Çekirdek derlemesi sırasında OpenCL Çevrimdışı Derleyici için Intel FPGA SDK, belirttiğiniz arabellek konumu bağımsız değişkenine dayalı olarak çekirdek bağımsız değişkenlerini bir belleğe atar.
1. board_spec.xml dosyasına göz atın file Özel Platformunuzun donanım dizininde.
2. board_spec.xml dosyasını açın file bir metin düzenleyicide açın ve XML'i buna göre değiştirin.
ÖrneğinampDosya, donanım sisteminizde varsayılan global bellek olarak iki DDR belleği ve heterojen bellek olarak modellediğiniz iki QDR bankası varsa board_spec.xml dosyasının bellek bölümlerini değiştirin. file aşağıdakine benzemek için:
1.3. Qsys'te Çoklu Bellek Bölücüleri Ayarlama
Şu anda, Qsys tasarımındaki OpenCL Bellek Bankası Bölücüsü, 2'nin gücü olmayan sayıda bellek bankasını desteklememektedir; bu, tipik yapılandırmalar için bir sınırlama değildir. Ancak, 2'nin üssü olmayan sayıda bellek arabiriminin gerekli olduğu senaryolar vardır. 2'nin gücü olmayan sayıda bellek arabirimini barındırmak için, 2'nin gücü olmayan bellek bankasına sahip heterojen bellek sistemleri oluşturmak için birden fazla OpenCL Bellek Bankası Bölücüsü kullanın. Gerçek bir heterojen bellek sisteminiz olduğunda birden fazla OpenCL Bellek Bankası Bölücüsü oluşturmanız gerekir. Bir DDR bellek arayüzü ve bir QDR bellek arayüzüne sahip bir sistem düşünün. İki bankanın farklı bellek topolojileri olduğundan, bunları tek bir genel bellek altında birleştiremezsiniz.
Şekil 1. Üç Bankalı Heterojen Bellek Sisteminin Blok Diyagramı
Bu heterojen bellek sistemi, iki DDR bellek arabirimi ve bir QDR bellek arabirimi içerir.Intel Quartus® Prime yazılımının 16.0, 16.0.1 veya 16.0.2 sürümünü ve OpenCL için Altera SDK'yı kullanıyorsanız OpenCL Memory Bank Divider, adres sınırlarını aşan bellek patlamalarını hatalı şekilde işler. Bu bilinen soruna geçici bir çözüm bulmak için, çoğuşma boyutu 1 olan bir boru hattı köprüsü ekleyin ve Avalon ® Bellek Eşlemeli (Avalon-MM) ana birimini OpenCL Bellek Bankası Bölücünün bağımlı bağlantı noktasına bağlayın.
Not:
Bu bilinen sorun Intel Quartus Prime yazılımında ve OpenCL sürüm 16.1 için Intel FPGA SDK'sında düzeltilmiştir.
Şekil 2. Boru Hattı Köprülü Üç Bankalı Heterojen Bellek Sisteminin Blok Diyagramı 1.4. Heterojen Bellek Çözümünüz için Boardtest Programını ve Ana Bilgisayar Kodunu Değiştirme
Özel Platformunuzun işlevselliğini ve performansını test etmek için OpenCL Özel Platform Araç Seti için Intel FPGA SDK ile birlikte gelen boardtest.cl çekirdeğini kullanın.
Boardtest programı, ana bilgisayardan cihaza bant genişliğini, bellek bant genişliğini ve Özel Platformunuzun genel işlevselliğini test etmenize olanak tanıyan bir OpenCL çekirdeğidir.
- Şuraya göz at: /board/custom_platform_toolkit/tests/boardtest dizini.
- Boardtest.cl'yi açın file bir metin düzenleyicide kullanın ve her bir genel bellek argümanına bir arabellek konumu atayın.
Örneğinamptarih:
__çekirdek geçersiz
mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
Burada uint *src DDR belleğe, uint *dst ise QDR belleğe atanır. board_spec.xml file her iki bellek sisteminin özelliklerini belirtir. - OpenCL sisteminizde heterojen bellek çözümünüzden yararlanmak için clCreateBuffer çağrınıza CL_MEM_HETEROGENEOUS_INTELFPGA bayrağını ekleyerek ana bilgisayar kodunuzu değiştirin.
Örneğinamptarih:
ddatain = clCreateBuffer(bağlam, CL_MEM_READ_WRITE | memflags)
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * VectorSize, NULL, &status);
Intel, arabelleği yazmadan önce arabellek konumunu çekirdek bağımsız değişkeni olarak ayarlamanızı önemle önerir. Tek bir genel bellek kullanırken, arabellekleri bir çekirdek argümanına atamadan önce veya sonra yazabilirsiniz. Heterojen bellek sistemlerinde ana bilgisayar, arabelleğe yazmadan önce arabellek konumunu belirler. Başka bir deyişle, ana bilgisayar clEnqueueWriteBuffer işlevini çağırmadan önce clSetKernelArgument işlevini çağıracaktır.
Ana bilgisayar kodunuzda clCreateBuffer, clSetKernelArg ve clEnqueueWriteBuffer çağrılarını aşağıdaki sırayla çağırın:
ddatain = clCreateBuffer(bağlam, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * VectorSize, NULL, &status);
… durum = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
… durum = clEnqueueWriteBuffer(queue, ddatain, CL_FALSE, 0, sizeof(unsigned) * VectorSize,hdatain, 0, NULL, NULL);
ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file bu işlev çağrılarının benzer bir sırasını sunar. - boardtest.cl dosyasını değiştirdikten sonra file ve ana bilgisayar kodunu, ana bilgisayar ve çekirdek kodunu derleyin ve işlevlerini doğrulayın.
Çekirdek kodunuzu derlerken, –no-interleaving özelliğini ekleyerek tüm bellek sistemlerindeki seri serpiştirmeyi devre dışı bırakmalısınız. aoc komutundaki seçenek.
İlgili Bilgiler
Küresel Belleğin Seri Araya Eklemeyi Devre Dışı Bırakma (–serpiştirmeye gerek yok) )
1.5. Heterojen Belleğinizin İşlevselliğini Doğrulamak Sistem
Heterojen bellek sisteminin düzgün çalıştığından emin olmak için ana bilgisayar kodunuzdaki CL_CONTEXT_COMPILER_MODE_INTELFPGA bayrağını kaldırın.
Homojen belleğe sahip OpenCL sistemlerinde, .aocx dosyasının okunmasını devre dışı bırakmak için ana bilgisayar kodunuzdaki CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 işaretini ayarlama seçeneğine sahip olmanız gerekir. file ve FPGA'nın yeniden programlanması. CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 bayrağını ayarlamak, kat planını tasarlamadan ve LogicLock™ bölgelerini belirtmeden Özel Platformunuzun işlevselliğini doğrulamak için panonuzu başlatırken kullanışlıdır.
Heterojen bellek sistemlerinde çalışma zamanı ortamı, her arabelleğin .aocx dosyasında açıklanan arabellek konumlarını okumalıdır. fileBellek sistemlerinin işlevselliğini doğrulamak için. Ancak, kat planının tasarlanması ve LogicLock bölgelerinin belirlenmesi gibi pano tasarımının son özelliklerini uygulamadan Özel Platformunuzun işlevselliğini doğrulamak isteyebilirsiniz.
- Ana makine kodunuzda CL_CONTEXT_COMPILER_MODE_INTELFPGA bayrağının ayarlanmadığını doğrulayın.
- Panoya göz atın/ Özel Platformunuzun /source/host/mmd dizini.
- acl_pcie_device.cpp bellek eşlemeli aygıtı (MMD) açın file Bir metin editöründe.
- acl_pcie_device.cpp dosyasındaki yeniden programlama işlevini değiştirin file bir dönüş 0 ekleyerek; aşağıda gösterildiği gibi satır:
int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
{
0 döndür;
// başarısızlığı varsayalım
int reprogram_failed = 1;
// fpga.bin'de rbf veya hash olmadığını varsayalım
int rbf_or_hash_not_provided = 1;
// temel ve içe aktarma revizyon karmalarının eşleşmediğini varsayalım
int hash_mismatch = 1;
…
} - acl_pcie_device.cpp dosyasını yeniden derleyin file.
- CL_CONTEXT_COMPILER_MODE_INTELFPGA bayrağının ayarlanmadan kaldığını doğrulayın.
Dikkat: Return 0'ı ekledikten sonra; yeniden programlama işlevine gidin ve MMD'yi yeniden derleyin file, çalışma zamanı ortamı .aocx dosyasını okuyacaktır file ve arabellek konumlarını atar ancak FPGA'yı yeniden programlamaz. FPGA görüntüsünü .aocx ile manuel olarak eşleştirmeniz gerekir. file. Bu davranışı tersine çevirmek için return 0'ı kaldırın; yeniden programlama işlevinden ve MMD'yi yeniden derleyin file.
1.6. Belge Revizyon Geçmişi
Tarih | Sürüm | Değişiklikler |
Aralık-17 | 2017.12.01 | • CL_MEM_HETEROGENEOUS_ALTERA markası CL_MEM_HETEROGENEOUS_INTELFPGA olarak yeniden adlandırıldı. |
Aralık-16 | 2016.12.13 | • CL_CONTEXT_COMPILER_MODE_ALTERA markası CL_CONTEXT_COMPILER_MODE_INTELFPGA olarak yeniden adlandırıldı. |
OpenCL için Intel® FPGA SDK'da Heterojen Bellek Sistemleri Oluşturma
Özel Platformlar
Geri bildirim gönder
Çevrimiçi sürüm
Geri bildirim gönder
Kimlik: 683654
Sürüm: 2016.12.13
Belgeler / Kaynaklar
![]() |
intel OpenCL Özel Platformları için FPGA SDK'da Heterojen Bellek Sistemleri Oluşturma [pdf] Talimatlar OpenCL Özel Platformları için FPGA SDK'da Heterojen Bellek Sistemleri Oluşturma, Heterojen Bellek Sistemleri Oluşturma, OpenCL Özel Platformları için FPGA SDK |