OpenCL Xüsusi Platformaları üçün FPGA SDK-da Heterojen Yaddaş Sistemlərinin yaradılması
Təlimatlar
OpenCL Xüsusi Platformaları üçün Intel® FPGA SDK-da Heterojen Yaddaş Sistemlərinin yaradılması
Fərdi Platformada heterojen yaddaşın tətbiqi daha çox xarici yaddaş interfeysi (EMIF) bant genişliyinə, eləcə də daha böyük və daha sürətli yaddaşa daxil olmağa imkan verir. Optimize edilmiş heterojen yaddaş girişinin birləşməsi
OpenCL ™(1) nüvəsi OpenCL sisteminiz üçün əhəmiyyətli performans təkmilləşdirmələri ilə nəticələnə bilər.
Bu proqram qeydi OpenCL(2) üçün Intel® FPGA SDK ilə istifadə üçün Fərdi Platformada heterojen yaddaş sistemlərinin yaradılmasına dair təlimat təqdim edir. Intel sizin heterojen yaddaş sistemlərini ehtiva edən Xüsusi Platformalar hazırlayan təcrübəli FPGA dizayneri olduğunuzu güman edir.
Heterojen yaddaş sistemlərini yaratmazdan əvvəl aşağıda göstərilən OpenCL sənədləri üçün Intel FPGA SDK ilə tanış olun.
Əlaqədar Məlumat
- OpenCL Proqramlaşdırma Bələdçisi üçün Intel FPGA SDK
- OpenCL Ən Yaxşı Təcrübələr Bələdçisi üçün Intel FPGA SDK
- OpenCL Arria 10 GX FPGA İnkişaf Dəsti üçün Intel FPGA SDK Referans Platforma Portinq Bələdçisi
1.1. FPGA Board və EMIF İnterfeyslərinin funksionallığının yoxlanılması
Hər bir yaddaş interfeysini müstəqil olaraq yoxlayın və sonra qlobal yaddaşdan istifadə edərək Fərdi Platformanızı işə salın.
- Hər bir interfeysin sürətini və sabitliyini yoxlaya bilən aparat dizaynlarından istifadə edərək hər bir yaddaş interfeysini yoxlayın.
- Qlobal yaddaşdan istifadə edərək Fərdi Platformanızı hazırlayın.
- məsələnampƏgər üç DDR interfeysiniz varsa, onlardan biri heterojen yaddaş kimi təsvir edilməlidir. Bu halda, OpenCL yığınının funksionallığını hər bir DDR interfeysi ilə müstəqil olaraq yoxlayın.
OpenCL və OpenCL loqosu Khronos Group™-un icazəsi ilə istifadə edilən Apple Inc-in ticarət nişanlarıdır. - OpenCL üçün Intel FPGA SDK nəşr edilmiş Khronos Spesifikasiyasına əsaslanır və Khronos Uyğunluq Sınaq Prosesindən keçib. Cari uyğunluq vəziyyəti ilə burada tanış olmaq olar www.khronos.org/conformance.
- məsələnampƏgər üç DDR interfeysiniz varsa, onlardan biri heterojen yaddaş kimi təsvir edilməlidir. Bu halda, OpenCL yığınının funksionallığını hər bir DDR interfeysi ilə müstəqil olaraq yoxlayın.
Intel Korporasiyası. Bütün hüquqlar qorunur. Intel, Intel loqosu və digər Intel markaları Intel Korporasiyasının və ya onun törəmə şirkətlərinin ticarət nişanlarıdır. Intel FPGA və yarımkeçirici məhsullarının Intel-in standart zəmanətinə uyğun olaraq cari spesifikasiyalara uyğun işləməsinə zəmanət verir, lakin istənilən vaxt xəbərdarlıq etmədən istənilən məhsul və xidmətlərə dəyişiklik etmək hüququnu özündə saxlayır. Intel tərəfindən yazılı şəkildə razılaşdırılmış hallar istisna olmaqla, burada təsvir edilən hər hansı məlumatın, məhsulun və ya xidmətin tətbiqi və ya istifadəsindən irəli gələn heç bir məsuliyyət və ya öhdəlik daşımır. Intel müştərilərinə hər hansı dərc edilmiş məlumata etibar etməzdən və məhsul və ya xidmətlər üçün sifariş verməzdən əvvəl cihazın texniki xüsusiyyətlərinin ən son versiyasını əldə etmələri tövsiyə olunur. *Başqa adlar və brendlər başqalarının mülkiyyəti kimi iddia oluna bilər.
ISO 9001:2015 Qeydiyyatdan keçib
Alternativ olaraq, iki DDR interfeysiniz və bir dördlü məlumat sürəti (QDR) interfeysiniz varsa, iki DDR interfeysinin və QDR interfeysinin OpenCL yığınının funksionallığını müstəqil olaraq yoxlayın.
Intel yaddaş interfeyslərinizi yoxlamaq üçün PCI Express® – (PCIe® -) və ya EMIF-eksklüziv dizaynlardan istifadə etməyi tövsiyə edir. Hər bir yaddaş interfeysinin işlək olduğunu və OpenCL dizaynınızın yaddaş interfeyslərinin bir hissəsi ilə işlədiyini yoxladıqdan sonra davam edin.
tam funksional heterojen yaddaş sistemi yaratmaq.
1.2. board_spec.xml faylının dəyişdirilməsi File
board_spec.xml faylını dəyişdirin file OpenCL nüvələri üçün mövcud olan heterojen yaddaş sistemlərinin növlərini müəyyən etmək.
Kernel kompilyasiyası zamanı OpenCL Offline Compiler üçün Intel FPGA SDK, qeyd etdiyiniz bufer yeri arqumentinə əsaslanaraq yaddaşa nüvə arqumentlərini təyin edir.
1. board_spec.xml-ə baxın file Xüsusi Platformanızın aparat kataloqunda.
2. board_spec.xml faylını açın file mətn redaktorunda istifadə edin və müvafiq olaraq XML-i dəyişdirin.
məsələnampƏgər aparat sisteminizdə standart qlobal yaddaş kimi iki DDR yaddaşı və heterojen yaddaş kimi modelləşdirdiyiniz iki QDR bankı varsa, board_spec.xml faylının yaddaş bölmələrini dəyişdirin. file aşağıdakılara bənzəmək üçün:
1.3. Qsys-də Çox Yaddaş Bölücülərinin Quraşdırılması
Hal-hazırda, Qsys dizaynında OpenCL Yaddaş Bankı Bölücü 2-dən çox olmayan yaddaş bankını dəstəkləmir, bu tipik konfiqurasiyalar üçün məhdudiyyət deyil. Bununla belə, 2-dən çox olmayan yaddaş interfeyslərinin lazım olduğu ssenarilər var. 2-dən çox olmayan yaddaş interfeyslərini yerləşdirmək üçün 2-dən çox gücü olmayan yaddaş bankları ilə heterojen yaddaş sistemləri yaratmaq üçün çoxsaylı OpenCL Yaddaş Bankı Bölmələrindən istifadə edin. Həqiqi heterojen yaddaş sisteminiz olduqda çoxlu OpenCL Yaddaş Bankı Bölmələri yaratmalısınız. Bir DDR yaddaş interfeysi və bir QDR yaddaş interfeysi olan bir sistemi nəzərdən keçirək. İki bankın fərqli yaddaş topologiyaları olduğundan, siz onları vahid qlobal yaddaş altında birləşdirə bilməzsiniz.
Şəkil 1. Üç Banklı Heterojen Yaddaş Sisteminin Blok Diaqramı
Bu heterojen yaddaş sistemində iki DDR yaddaş interfeysi və bir QDR yaddaş interfeysi var.Əgər siz Intel Quartus® Prime proqramının 16.0, 16.0.1 və ya 16.0.2 versiyasından və OpenCL üçün Altera SDK-dan istifadə edirsinizsə, OpenCL Yaddaş Bankı Bölgəcisi ünvan sərhədləri boyunca yaddaş partlamalarını səhv idarə edir. Bu məlum problemi həll etmək üçün 1 partlama ölçüsü olan boru kəməri körpüsü əlavə edin və onun Avalon ®Memory-Mapped (Avalon-MM) masterini OpenCL Memory Bank Divider-in kölə portuna birləşdirin.
Qeyd:
Bu məlum problem Intel Quartus Prime proqram təminatında və OpenCL 16.1 versiyası üçün Intel FPGA SDK-da həll edilmişdir.
Şəkil 2. Boru Kəməri Körpüsü ilə Üç Banklı Heterojen Yaddaş Sisteminin Blok Diaqramı 1.4. Heterojen Yaddaş Həlliniz üçün Boardtest Proqramının və Host Kodunun dəyişdirilməsi
Xüsusi Platformanızın funksionallığını və performansını yoxlamaq üçün OpenCL Xüsusi Platforma Alətlər dəsti üçün Intel FPGA SDK ilə birlikdə gələn boardtest.cl nüvəsindən istifadə edin.
Bort test proqramı, hostdan cihaza ötürmə qabiliyyətini, yaddaş bant genişliyini və Xüsusi Platformanızın ümumi funksionallığını sınamağa imkan verən OpenCL nüvəsidir.
- -a göz atın /board/ custom_platform_toolkit/tests/boardtest kataloqu.
- boardtest.cl açın file mətn redaktorunda istifadə edin və hər qlobal yaddaş arqumentinə bufer yeri təyin edin.
məsələnample:
__ nüvə boşdur
mem_stream (__qlobal__attribute__((bufer_location("DDR"))) uint *src, __qlobal __attribute__((bufer_location(“QDR”))) uint *dst, uint arg, uint arg2)
Burada uint *src DDR yaddaşına, uint *dst isə QDR yaddaşına təyin edilir. board_spec.xml file hər iki yaddaş sisteminin xüsusiyyətlərini müəyyən edir. - OpenCL sisteminizdə heterojen yaddaş həllindən istifadə etmək üçün clCreateBuffer zənginizə CL_MEM_HETEROGENEOUS_INTELFPGA bayrağını əlavə etməklə host kodunu dəyişdirin.
məsələnample:
ddatain = clCreateBuffer(kontekst, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(imzasız) * vectorSize, NULL, &status);
Intel buferi yazmazdan əvvəl bufer yerini kernel arqumenti kimi təyin etməyi tövsiyə edir. Tək qlobal yaddaşdan istifadə edərkən siz buferləri nüvə arqumentinə təyin etmədən əvvəl və ya sonra yaza bilərsiniz. Heterojen yaddaş sistemlərində host buferi yazmadan əvvəl bufer yerini təyin edir. Başqa sözlə, host clEnqueueWriteBuffer funksiyasını çağırmazdan əvvəl clSetKernelArgument funksiyasını çağıracaq.
Host kodunuzda clCreateBuffer, clSetKernelArg və clEnqueueWriteBuffer çağırışlarını aşağıdakı ardıcıllıqla çağırın:
ddatain = clCreateBuffer(kontekst, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(imzasız) * vectorSize, NULL, &status);
… status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (boşluq*)&ddatain);
… status = clEnqueueWriteBuffer(növbə, ddatain, CL_FALSE, 0, sizeof(imzasız) * vectorSize,hdatain, 0, NULL, NULL);
ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file bu funksiya çağırışlarının oxşar sırasını təqdim edir. - Siz boardtest.cl-ni dəyişdirdikdən sonra file və host kodu, host və kernel kodunu tərtib edin və onların funksionallığını yoxlayın.
Nüvə kodunuzu tərtib edərkən bütün yaddaş sistemlərinin interleaving-no-interleaving funksiyasını daxil etməklə söndürməlisiniz. aoc əmrindəki seçim.
Əlaqədar Məlumat
Qlobal Yaddaşın Burst-Interleaving (–interleaving )
1.5. Heterojen Yaddaşınızın Funksionallığının Yoxlanması Sistem
Heterojen yaddaş sisteminin düzgün işləməsini təmin etmək üçün host kodunuzda CL_CONTEXT_COMPILER_MODE_INTELFPGA bayrağını ləğv edin.
Homojen yaddaşa malik OpenCL sistemlərində .aocx oxunmasını söndürmək üçün host kodunuzda CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 bayrağı təyin etməlisiniz. file və FPGA-nın yenidən proqramlaşdırılması. CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 bayrağının təyin edilməsi, döşəmə planını tərtib etmədən və LogicLock™ regionlarını təyin etmədən Fərdi Platformanızın funksionallığını yoxlamaq üçün lövhənizi yaratarkən faydalıdır.
Heterojen yaddaş sistemləri ilə iş vaxtı mühiti .aocx-da təsvir olunan hər bir buferin bufer yerlərini oxumalıdır. file, yaddaş sistemlərinin funksionallığını yoxlamaq üçün. Bununla belə, siz döşəmə planının layihələndirilməsi və LogicLock regionlarının müəyyənləşdirilməsi kimi lövhə dizaynının son xüsusiyyətlərini həyata keçirmədən Fərdi Platformanızın funksionallığını yoxlamaq istəyə bilərsiniz.
- CL_CONTEXT_COMPILER_MODE_INTELFPGA bayrağının host kodunuzda quraşdırılmadığını yoxlayın.
- Lövhəyə göz atın/ Xüsusi Platformanızın /source/host/mmd kataloqu.
- acl_pcie_device.cpp yaddaş xəritəli cihazı (MMD) açın file mətn redaktorunda.
- acl_pcie_device.cpp-də yenidən proqramlaşdırma funksiyasını dəyişdirin file qaytarılması 0 əlavə etməklə; xətt, aşağıda göstərildiyi kimi:
int ACL_PCIE_DEVICE::yenidən proqram (etibarsız *data, size_t data_size)
{
0 qaytarmaq;
// uğursuzluğu qəbul etmək
int reprogram_failed = 1;
// fpga.bin-də heç bir rbf və ya hash qəbul etmə
int rbf_or_hash_not_provided = 1;
// fərz edək ki, baza və idxal revision heshləri uyğun gəlmir
int hash_mismatch = 1;
…
} - acl_pcie_device.cpp faylını yenidən tərtib edin file.
- CL_CONTEXT_COMPILER_MODE_INTELFPGA bayrağının qurulmamış qaldığını yoxlayın.
Diqqət: Əlavə etdikdən sonra 0 qaytarın; yenidən proqramlaşdırma funksiyasına keçin və MMD-ni yenidən tərtib edin file, iş vaxtı mühiti .aocx oxuyacaq file və bufer yerlərini təyin edin, lakin FPGA-nı yenidən proqramlaşdırmayacaq. FPGA şəklini .aocx ilə əl ilə uyğunlaşdırmalısınız file. Bu davranışı geri qaytarmaq üçün qaytarılan 0-ı çıxarın; yenidən proqramlaşdırma funksiyasından və MMD-ni yenidən tərtib edin file.
1.6. Sənədin Təftiş Tarixçəsi
Tarix | Versiya | Dəyişikliklər |
Dekabr-17 | 2017.12.01 | • CL_MEM_HETEROGENEOUS_ALTERA-dan CL_MEM_HETEROGENEOUS_INTELFPGA-ya rebrendinq edildi. |
Dekabr-16 | 2016.12.13 | • CL_CONTEXT_COMPILER_MODE_ALTERA-dan CL_CONTEXT_COMPILER_MODE_INTELFPGA-ya rebrendinq edildi. |
OpenCL üçün Intel® FPGA SDK-da Heterojen Yaddaş Sistemlərinin yaradılması
Fərdi platformalar
Əlaqə göndərin
Online versiya
Əlaqə göndərin
ID: 683654
Versiya: 2016.12.13
Sənədlər / Resurslar
![]() |
intel OpenCL Xüsusi Platformaları üçün FPGA SDK-da Heterojen Yaddaş Sistemlərinin yaradılması [pdf] Təlimatlar OpenCL Xüsusi Platformaları üçün FPGA SDK-da Heterojen Yaddaş Sistemlərinin yaradılması, Heterojen Yaddaş Sistemlərinin yaradılması, OpenCL Xüsusi Platformaları üçün FPGA SDK |