Paglikha ng Heterogenous Memory System sa FPGA SDK para sa OpenCL Custom Platforms
Mga tagubilin
Paggawa ng Heterogenous Memory System sa Intel® FPGA SDK para sa OpenCL Custom Platforms
Ang pagpapatupad ng heterogenous na memory sa isang Custom na Platform ay nagbibigay-daan para sa mas maraming external memory interface (EMIF) bandwidth pati na rin ang mas malaki at mas mabilis na pag-access sa memory. Ang kumbinasyon ng heterogenous memory access na may isang na-optimize
Ang OpenCL ™(1) kernel ay maaaring magresulta sa makabuluhang pagpapahusay sa pagganap para sa iyong OpenCL system.
Ang application note na ito ay nagbibigay ng patnubay sa paglikha ng magkakaibang mga sistema ng memorya sa isang Custom na Platform para gamitin sa Intel® FPGA SDK para sa OpenCL(2). Ipinapalagay ng Intel na ikaw ay isang makaranasang taga-disenyo ng FPGA na bumubuo ng Mga Custom na Platform na naglalaman ng magkakaibang mga sistema ng memorya.
Bago ang paglikha ng magkakaibang mga sistema ng memorya, pamilyar sa Intel FPGA SDK para sa mga dokumentong OpenCL na tinukoy sa ibaba.
Kaugnay na Impormasyon
- Intel FPGA SDK para sa OpenCL Programming Guide
- Intel FPGA SDK para sa OpenCL Best Practices Guide
- Intel FPGA SDK para sa OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide
1.1. Pagbe-verify ng Functionality ng FPGA Board at ng EMIF Interface
I-verify ang bawat memory interface nang nakapag-iisa at pagkatapos ay i-instantiate ang iyong Custom na Platform gamit ang global memory.
- I-verify ang bawat interface ng memorya gamit ang mga disenyo ng hardware na maaaring subukan ang bilis at katatagan ng bawat interface.
- I-instantiate ang iyong Custom na Platform gamit ang global memory.
- Para kay exampAt, kung mayroon kang tatlong mga interface ng DDR, ang isa sa mga ito ay dapat na ma-map bilang heterogenous memory. Sa kasong ito, i-verify ang functionality ng OpenCL stack sa bawat interface ng DDR nang nakapag-iisa.
Ang OpenCL at ang OpenCL na logo ay mga trademark ng Apple Inc. na ginagamit nang may pahintulot ng Khronos Group™ . - Ang Intel FPGA SDK para sa OpenCL ay batay sa isang na-publish na Khronos Specification, at nakapasa sa Khronos Conformance Testing Process. Ang kasalukuyang katayuan ng pagsunod ay matatagpuan sa www.khronos.org/conformance.
- Para kay exampAt, kung mayroon kang tatlong mga interface ng DDR, ang isa sa mga ito ay dapat na ma-map bilang heterogenous memory. Sa kasong ito, i-verify ang functionality ng OpenCL stack sa bawat interface ng DDR nang nakapag-iisa.
Intel Corporation. Lahat ng karapatan ay nakalaan. Ang Intel, ang logo ng Intel, at iba pang mga marka ng Intel ay mga trademark ng Intel Corporation o mga subsidiary nito. Ginagarantiyahan ng Intel ang pagganap ng mga produktong FPGA at semiconductor nito sa kasalukuyang mga detalye alinsunod sa karaniwang warranty ng Intel, ngunit inilalaan ang karapatang gumawa ng mga pagbabago sa anumang produkto at serbisyo anumang oras nang walang abiso. Walang pananagutan o pananagutan ang Intel na nagmumula sa aplikasyon o paggamit ng anumang impormasyon, produkto, o serbisyong inilarawan dito maliban kung hayagang sinang-ayunan ng Intel. Pinapayuhan ang mga customer ng Intel na kunin ang pinakabagong bersyon ng mga detalye ng device bago umasa sa anumang nai-publish na impormasyon at bago maglagay ng mga order para sa mga produkto o serbisyo. *Ang ibang mga pangalan at tatak ay maaaring i-claim bilang pag-aari ng iba.
ISO 9001:2015 Nakarehistro
Bilang kahalili, kung mayroon kang dalawang interface ng DDR at isang interface ng quad data rate (QDR), i-verify ang functionality ng OpenCL stack ng dalawang interface ng DDR at ang interface ng QDR nang hiwalay.
Inirerekomenda ng Intel na gumamit ka ng PCI Express® – (PCIe® -) o mga disenyong eksklusibo sa EMIF upang subukan ang iyong mga interface ng memorya. Pagkatapos mong ma-verify na gumagana ang bawat memory interface at gumagana ang iyong disenyo ng OpenCL sa isang subset ng mga interface ng memorya, magpatuloy
upang lumikha ng isang ganap na gumaganang heterogenous na sistema ng memorya.
1.2. Pagbabago sa board_spec.xml File
Baguhin ang board_spec.xml file upang tukuyin ang mga uri ng magkakaibang sistema ng memorya na magagamit sa mga kernel ng OpenCL.
Sa panahon ng kernel compilation, ang Intel FPGA SDK para sa OpenCL Offline Compiler ay nagtatalaga ng mga kernel argument sa isang memory batay sa buffer location argument na iyong tinukoy.
1. Mag-browse sa board_spec.xml file sa direktoryo ng hardware ng iyong Custom na Platform.
2. Buksan ang board_spec.xml file sa isang text editor at baguhin ang XML nang naaayon.
Para kay exampAt, kung ang iyong hardware system ay may dalawang DDR memory bilang default na globalmemory at dalawang QDR na bangko na iyong modelo bilang heterogenous memory, baguhin ang mga seksyon ng memorya ng board_spec.xml file upang maging katulad ng sumusunod:
1.3. Pag-set Up ng Maramihang Memory Divider sa Qsys
Sa kasalukuyan, ang OpenCL Memory Bank Divider sa disenyo ng Qsys ay hindi sumusuporta sa non-power-of-2 na bilang ng mga memory bank, na hindi isang limitasyon para sa mga tipikal na configuration. Gayunpaman, may mga sitwasyon kung saan kailangan ang non-power-of-2 na bilang ng mga memory interface. Upang mapaunlakan ang hindi-power-of-2 na bilang ng mga interface ng memorya, gumamit ng maraming OpenCL Memory Bank Divider upang lumikha ng magkakaibang mga memory system na may hindi-power-of-2 na bilang ng mga memory bank. Dapat kang lumikha ng maraming OpenCL Memory Bank Divider kapag mayroon kang isang tunay na magkakaibang sistema ng memorya. Isaalang-alang ang isang system na may isang DDR memory interface at isang QDR memory interface. Dahil ang dalawang bangko ay may magkaibang mga topolohiya ng memorya, hindi mo maaaring pagsamahin ang mga ito sa ilalim ng iisang pandaigdigang memorya.
Figure 1. Block Diagram ng Three-Bank Heterogenous Memory System
Ang heterogenous na memory system na ito ay naglalaman ng dalawang DDR memory interface at isang QDR memory interface.Kung gumagamit ka ng bersyon 16.0, 16.0.1, o 16.0.2 ng Intel Quartus® Prime software at ang Altera SDK para sa OpenCL, hindi wastong pinangangasiwaan ng OpenCL Memory Bank Divider ang mga pagsabog ng memory sa mga hangganan ng address. Upang malutas ang kilalang isyung ito, magdagdag ng pipeline bridge na may burst size na 1 at ikonekta ang Avalon ®Memory-Mapped (Avalon-MM) master nito sa slave port ng OpenCL Memory Bank Divider.
Tandaan:
Ang kilalang isyu na ito ay naayos sa Intel Quartus Prime software at ang Intel FPGA SDK para sa OpenCL na bersyon 16.1.
Figure 2. Block Diagram ng Three-Bank Heterogenous Memory System na may Pipeline Bridge 1.4. Pagbabago sa Boardtest Program at sa Host Code para sa Iyong Heterogenous Memory Solution
Gamitin ang boardtest.cl kernel na kasama ng Intel FPGA SDK para sa OpenCL Custom Platform Toolkit upang subukan ang functionality at performance ng iyong Custom na Platform.
Ang boardtest program ay isang OpenCL kernel na nagbibigay-daan sa iyong subukan ang host-to-device bandwidth, memory bandwidth, at pangkalahatang functionality ng iyong Custom na Platform.
- Mag-browse sa /board/ custom_platform_toolkit/tests/boardtest na direktoryo.
- Buksan ang boardtest.cl file sa isang text editor at magtalaga ng buffer location sa bawat global memory argument.
Para kay example:
__walang laman ang kernel
mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
Dito, ang uint *src ay itinalaga sa DDR memory, at ang uint *dst ay itinalaga sa QDR memory. Ang board_spec.xml file tumutukoy sa mga katangian ng parehong mga sistema ng memorya. - Upang magamit ang iyong heterogenous memory solution sa iyong OpenCL system, baguhin ang iyong host code sa pamamagitan ng pagdaragdag ng CL_MEM_HETEROGENEOUS_INTELFPGA flag sa iyong clCreateBuffer na tawag.
Para kay example:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
Lubos na inirerekomenda ng Intel na itakda mo ang buffer location bilang kernel argument bago isulat ang buffer. Kapag gumagamit ng isang pandaigdigang memorya, maaari mong isulat ang mga buffer bago o pagkatapos italaga ang mga ito sa isang kernel argument. Sa mga heterogenous na sistema ng memorya, itinatakda ng host ang lokasyon ng buffer bago isulat ang buffer. Sa madaling salita, tatawagin ng host ang function na clSetKernelArgument bago tawagan ang function na clEnqueueWriteBuffer.
Sa iyong host code, i-invoke ang clCreateBuffer, clSetKernelArg, at clEnqueueWriteBuffer na mga tawag sa sumusunod na pagkakasunud-sunod:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
… status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
… status = clEnqueueWriteBuffer(queue, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
Ang ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file nagpapakita ng katulad na pagkakasunud-sunod ng mga function na tawag. - Pagkatapos mong baguhin ang boardtest.cl file at ang host code, i-compile ang host at kernel code at i-verify ang kanilang functionality.
Kapag kino-compile ang iyong kernel code, dapat mong i-disable ang burst-interleaving ng lahat ng memory system sa pamamagitan ng pagsasama ng –no-interleaving opsyon sa aoc command.
Kaugnay na Impormasyon
Hindi pagpapagana ng Burst-Interleaving ng Global Memory (–no-interleaving )
1.5. Pag-verify sa Paggana ng Iyong Heterogenous Memory Sistema
Upang matiyak na gumagana nang maayos ang heterogenous memory system, i-unset ang CL_CONTEXT_COMPILER_MODE_INTELFPGA flag sa iyong host code.
Sa mga OpenCL system na may homogenous memory, kailangan mong opsyon na itakda ang CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 flag sa iyong host code upang hindi paganahin ang pagbabasa ng .aocx file at ang reprogramming ng FPGA. Ang pagtatakda ng CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 na flag ay kapaki-pakinabang kapag ini-instantiate ang iyong board upang i-verify ang functionality ng iyong Custom na Platform nang hindi nagdidisenyo ng floorplan at tinutukoy ang mga rehiyon ng LogicLock™.
Sa magkakaibang mga sistema ng memorya, dapat basahin ng runtime environment ang mga lokasyon ng buffer ng bawat buffer, na inilarawan sa .aocx file, para i-verify ang functionality ng mga memory system. Gayunpaman, maaaring gusto mong i-verify ang functionality ng iyong Custom na Platform nang hindi ipinapatupad ang mga panghuling feature ng disenyo ng board, tulad ng pagdidisenyo ng floorplan at pagtukoy sa mga rehiyon ng LogicLock.
- I-verify na ang CL_CONTEXT_COMPILER_MODE_INTELFPGA flag ay hindi nakatakda sa iyong host code.
- Mag-browse sa board/ /source/host/mmd na direktoryo ng iyong Custom na Platform.
- Buksan ang acl_pcie_device.cpp memory-mapped device (MMD) file sa isang text editor.
- Baguhin ang reprogram function sa acl_pcie_device.cpp file sa pamamagitan ng pagdaragdag ng return 0; linya, tulad ng ipinapakita sa ibaba:
int ACL_PCIE_DEVICE::reprogram(walang bisa *data, size_t data_size)
{
bumalik 0;
// ipagpalagay ang kabiguan
int reprogram_failed = 1;
// ipagpalagay na walang rbf o hash sa fpga.bin
int rbf_or_hash_not_provided = 1;
// ipagpalagay na hindi magkatugma ang mga base at pag-import ng rebisyon na mga hash
int hash_mismatch = 1;
…
} - I-compile muli ang acl_pcie_device.cpp file.
- I-verify na ang CL_CONTEXT_COMPILER_MODE_INTELFPGA flag ay nananatiling hindi nakatakda.
Pansin: Pagkatapos mong magdagdag ng return 0; sa reprogram function at muling i-compile ang MMD file, babasahin ng runtime environment ang .aocx file at italaga ang mga lokasyon ng buffer ngunit hindi i-reprogram ang FPGA. Dapat mong manual na itugma ang FPGA na imahe sa .aocx file. Upang baligtarin ang gawi na ito, alisin ang return 0; mula sa reprogram function at muling i-compile ang MMD file.
1.6. Kasaysayan ng Pagbabago ng Dokumento
Petsa | Bersyon | Mga pagbabago |
Dis-17 | 2017.12.01 | • Ni-rebrand ang CL_MEM_HETEROGENEOUS_ALTERA sa CL_MEM_HETEROGENEOUS_INTELFPGA. |
Dis-16 | 2016.12.13 | • Ni-rebrand ang CL_CONTEXT_COMPILER_MODE_ALTERA sa CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Paglikha ng Heterogenous Memory System sa Intel® FPGA SDK para sa OpenCL
Mga Custom na Platform
Magpadala ng Feedback
Online na Bersyon
Magpadala ng Feedback
ID: 683654
Bersyon: 2016.12.13
Mga Dokumento / Mga Mapagkukunan
![]() |
intel Paglikha ng Heterogenous Memory System sa FPGA SDK para sa OpenCL Custom Platforms [pdf] Mga tagubilin Paglikha ng Heterogenous Memory System sa FPGA SDK para sa OpenCL Custom Platforms, Paglikha ng Heterogenous Memory System, FPGA SDK para sa OpenCL Custom Platforms |