Skapa heterogena minnessystem i FPGA SDK för OpenCL Custom-plattformar
Instruktioner
Skapa heterogena minnessystem i Intel® FPGA SDK för anpassade OpenCL-plattformar
Implementeringen av heterogent minne i en anpassad plattform möjliggör mer bandbredd för externt minnesgränssnitt (EMIF) samt större och snabbare minnesåtkomster. Kombinationen av heterogen minnesåtkomst med en optimerad
OpenCL™(1)kärnan kan resultera i betydande prestandaförbättringar för ditt OpenCL-system.
Denna applikationsanteckning ger vägledning om hur du skapar heterogena minnessystem i en anpassad plattform för användning med Intel® FPGA SDK för OpenCL(2). Intel antar att du är en erfaren FPGA-designer som utvecklar anpassade plattformar som innehåller heterogena minnessystem.
Innan du skapar de heterogena minnessystemen bör du bekanta dig med Intel FPGA SDK för OpenCL-dokument som anges nedan.
Relaterad information
- Intel FPGA SDK för OpenCL Programmeringsguide
- Intel FPGA SDK för OpenCL Best Practices Guide
- Intel FPGA SDK för OpenCL Arria 10 GX FPGA Development Kit Referensguide för plattformsportering
1.1. Verifiering av funktionaliteten hos FPGA-kortet och EMIF-gränssnitten
Verifiera varje minnesgränssnitt oberoende och instansiera sedan din anpassade plattform med hjälp av globalt minne.
- Verifiera varje minnesgränssnitt med hjälp av hårdvarudesigner som kan testa hastigheten och stabiliteten för varje gränssnitt.
- Instantiera din anpassade plattform med hjälp av globalt minne.
- Till exempelample, om du har tre DDR-gränssnitt måste ett av dem mappas som heterogent minne. I det här fallet, verifiera funktionaliteten hos OpenCL-stacken med varje DDR-gränssnitt oberoende.
OpenCL och OpenCL-logotypen är varumärken som tillhör Apple Inc. som används med tillstånd från Khronos Group™. - Intel FPGA SDK för OpenCL är baserad på en publicerad Khronos-specifikation och har klarat Khronos Conformance Testing Process. Aktuell överensstämmelsestatus finns på www.khronos.org/conformance.
- Till exempelample, om du har tre DDR-gränssnitt måste ett av dem mappas som heterogent minne. I det här fallet, verifiera funktionaliteten hos OpenCL-stacken med varje DDR-gränssnitt oberoende.
Intel Corporation. Alla rättigheter förbehållna. Intel, Intels logotyp och andra Intel-märken är varumärken som tillhör Intel Corporation eller dess dotterbolag. Intel garanterar prestanda för sina FPGA- och halvledarprodukter enligt gällande specifikationer i enlighet med Intels standardgaranti, men förbehåller sig rätten att göra ändringar i alla produkter och tjänster när som helst utan föregående meddelande. Intel tar inget ansvar eller ansvar som uppstår till följd av applikationen eller användningen av någon information, produkt eller tjänst som beskrivs här, förutom vad som uttryckligen har godkänts skriftligen av Intel. Intel-kunder rekommenderas att skaffa den senaste versionen av enhetsspecifikationerna innan de förlitar sig på någon publicerad information och innan de beställer produkter eller tjänster. *Andra namn och varumärken kan göras anspråk på att vara andras egendom.
ISO 9001: 2015 Registrerad
Alternativt, om du har två DDR-gränssnitt och ett quad data rate (QDR)-gränssnitt, verifiera funktionen hos OpenCL-stacken av de två DDR-gränssnitten och QDR-gränssnittet oberoende av varandra.
Intel rekommenderar att du använder PCI Express® – (PCIe® -) eller EMIF-exklusiva design för att testa dina minnesgränssnitt. När du har verifierat att varje minnesgränssnitt är funktionellt och att din OpenCL-design fungerar med en delmängd av minnesgränssnitten, fortsätt
att skapa ett fullt fungerande heterogent minnessystem.
1.2. Ändra board_spec.xml File
Ändra board_spec.xml file för att specificera de typer av heterogena minnessystem som är tillgängliga för OpenCL-kärnorna.
Under kärnkompileringen tilldelar Intel FPGA SDK för OpenCL Offline Compiler kärnargument till ett minne baserat på buffertplaceringsargumentet som du anger.
1. Bläddra till board_spec.xml file i hårdvarukatalogen på din anpassade plattform.
2. Öppna board_spec.xml file i en textredigerare och ändra XML därefter.
Till exempelample, om ditt hårdvarusystem har två DDR-minnen som standard globalt minne och två QDR-banker som du modellerar som heterogent minne, ändra minnessektionerna i board_spec.xml file att likna följande:
1.3. Ställa in flera minnesavdelare i Qsys
För närvarande stöder inte OpenCL Memory Bank Divider i Qsys-designen icke-power-of-2 antal minnesbanker, vilket inte är en begränsning för typiska konfigurationer. Det finns dock scenarier där icke-power-of-2 antal minnesgränssnitt är nödvändiga. För att få plats med ett antal minnesgränssnitt som inte består av 2, använd flera OpenCL Memory Bank Dividers för att skapa heterogena minnessystem med ett antal minnesbanker som inte har 2 kapacitet. Du måste skapa flera OpenCL Memory Bank Dividers när du har ett riktigt heterogent minnessystem. Överväg ett system med ett DDR-minnesgränssnitt och ett QDR-minnesgränssnitt. Eftersom de två bankerna har olika minnestopologier kan du inte kombinera dem under ett enda globalt minne.
Figur 1. Blockdiagram av ett heterogent minnessystem med tre banker
Detta heterogena minnessystem innehåller två DDR-minnesgränssnitt och ett QDR-minnesgränssnitt.Om du använder version 16.0, 16.0.1 eller 16.0.2 av programvaran Intel Quartus® Prime och Altera SDK för OpenCL, hanterar OpenCL Memory Bank Divider felaktigt minnesskurar över adressgränserna. För att kringgå detta kända problem, lägg till en pipelinebrygga med en burststorlek på 1 och anslut dess Avalon ®Memory-Mapped (Avalon-MM) master till OpenCL Memory Bank Dividers slavport.
Notera:
Det här kända problemet är åtgärdat i Intel Quartus Prime-programvaran och Intel FPGA SDK för OpenCL version 16.1.
Figur 2. Blockdiagram av ett trebanks heterogent minnessystem med en pipelinebrygga 1.4. Ändra Boardtest-programmet och värdkoden för din heterogena minneslösning
Använd boardtest.cl-kärnan som följer med Intel FPGA SDK för OpenCL Custom Platform Toolkit för att testa funktionaliteten och prestandan hos din Custom Platform.
Boardtest-programmet är en OpenCL-kärna som låter dig testa värd-till-enhet-bandbredd, minnesbandbredd och allmän funktionalitet hos din anpassade plattform.
- Bläddra till /board/ custom_platform_toolkit/tests/boardtest katalog.
- Öppna boardtest.cl file i en textredigerare och tilldela en buffertplats till varje globalt minnesargument.
Till exempelampde:
__kärnan ogiltig
mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
Här tilldelas uint *src till DDR-minnet och uint *dst tilldelas QDR-minnet. Board_spec.xml file specificerar egenskaperna hos båda minnessystemen. - För att utnyttja din heterogena minneslösning i ditt OpenCL-system, ändra din värdkod genom att lägga till CL_MEM_HETEROGENEOUS_INTELFPGA-flaggan till ditt clCreateBuffer-anrop.
Till exempelampde:
ddatain = clCreateBuffer(kontext, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
Intel rekommenderar starkt att du ställer in buffertplatsen som ett kärnargument innan du skriver bufferten. När du använder ett enda globalt minne kan du skriva buffertarna antingen före eller efter att du tilldelats dem till ett kärnargument. I heterogena minnessystem anger värden buffertplatsen innan bufferten skrivs. Med andra ord kommer värden att anropa funktionen clSetKernelArgument innan funktionen clEnqueueWriteBuffer anropas.
I din värdkod anropar du anropen clCreateBuffer, clSetKernelArg och clEnqueueWriteBuffer i följande ordning:
ddatain = clCreateBuffer(kontext, CL_MEM_READ_WRITE | memflaggor |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
… status = clSetKernelArg(kärna[k], 0, sizeof(cl_mem), (void*)&ddatain);
… status = clEnqueueWriteBuffer(queue, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file presenterar en liknande ordning av dessa funktionsanrop. - När du har ändrat boardtest.cl file och värdkoden, kompilera värd- och kärnkoden och verifiera deras funktionalitet.
När du kompilerar din kärnkod måste du inaktivera burst-interfoliering av alla minnessystem genom att inkludera –no-interleaving alternativet i kommandot aoc.
Relaterad information
Inaktivera Burst-interleaving av globalt minne (–ingen interleaving )
1.5. Verifiera funktionen hos ditt heterogena minne System
För att säkerställa att det heterogena minnessystemet fungerar korrekt, avaktivera flaggan CL_CONTEXT_COMPILER_MODE_INTELFPGA i din värdkod.
I OpenCL-system med homogent minne måste du välja att ställa in flaggan CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 i din värdkod för att inaktivera läsningen av .aocx file och omprogrammering av FPGA. Att ställa in flaggan CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 är användbart när du instansierar ditt kort för att verifiera funktionaliteten hos din anpassade plattform utan att designa planlösningen och specificera LogicLock™-regionerna.
Med heterogena minnessystem måste runtime-miljön läsa buffertplatserna för varje buffert, som beskrivs i .aocx file, för att verifiera minnessystemens funktionalitet. Men du kanske vill verifiera funktionaliteten hos din anpassade plattform utan att implementera de slutliga funktionerna i bräddesignen, som att designa planlösningen och specificera LogicLock-regionerna.
- Kontrollera att CL_CONTEXT_COMPILER_MODE_INTELFPGA-flaggan inte är inställd i din värdkod.
- Bläddra till styrelsen/ /source/host/mmd-katalogen för din anpassade plattform.
- Öppna den acl_pcie_device.cpp minnesmappade enheten (MMD) file i en textredigerare.
- Ändra omprogrammeringsfunktionen i acl_pcie_device.cpp file genom att lägga till en retur 0; linje, som visas nedan:
int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
{
returnera 0;
// anta misslyckande
int reprogram_failed = 1;
// antar ingen rbf eller hash i fpga.bin
int rbf_or_hash_not_provided = 1;
// antar att bas- och importrevisionshasharna inte matchar
int hash_mismatch = 1;
…
} - Kompilera om acl_pcie_device.cpp file.
- Kontrollera att CL_CONTEXT_COMPILER_MODE_INTELFPGA-flaggan förblir oinställd.
Uppmärksamhet: När du har lagt till returnerar 0; till omprogrammeringsfunktionen och kompilera om MMD file, kommer körtidsmiljön att läsa .aocx file och tilldela buffertplatserna men kommer inte att programmera om FPGA:n. Du måste manuellt matcha FPGA-bilden med .aocx file. För att vända detta beteende, ta bort retur 0; från omprogrammeringsfunktionen och kompilera om MMD file.
1.6. Dokumentrevisionshistorik
Datum | Version | Ändringar |
Dec-17 | 2017.12.01 | • Bytt namn CL_MEM_HETEROGENEOUS_ALTERA till CL_MEM_HETEROGENEOUS_INTELFPGA. |
Dec-16 | 2016.12.13 | • Bytt namn CL_CONTEXT_COMPILER_MODE_ALTERA till CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Skapa heterogena minnessystem i Intel® FPGA SDK för OpenCL
Anpassade plattformar
Skicka feedback
Online Version
Skicka feedback
ID: 683654
Version: 2016.12.13
Dokument/resurser
![]() |
intel Skapar heterogena minnessystem i FPGA SDK för OpenCL Custom-plattformar [pdfInstruktioner Skapa heterogena minnessystem i FPGA SDK för OpenCL Custom Platforms, Skapa heterogena minnessystem, FPGA SDK för OpenCL Custom Platforms |