intel - logoOprettelse af heterogene hukommelsessystemer i FPGA SDK til OpenCL Custom Platforms
Instruktioner

Oprettelse af heterogene hukommelsessystemer i Intel® FPGA SDK til OpenCL Custom Platforms

Implementeringen af ​​heterogen hukommelse i en brugerdefineret platform giver mulighed for mere ekstern hukommelsesgrænseflade (EMIF) båndbredde samt større og hurtigere hukommelsesadgange. Kombinationen af ​​heterogen hukommelsesadgang med en optimeret
OpenCL ™(1)-kernen kan resultere i betydelige præstationsforbedringer for dit OpenCL-system.
Denne applikationsnote giver vejledning i at skabe heterogene hukommelsessystemer i en brugerdefineret platform til brug med Intel® FPGA SDK til OpenCL(2). Intel antager, at du er en erfaren FPGA-designer, der udvikler brugerdefinerede platforme, der indeholder heterogene hukommelsessystemer.
Før du opretter de heterogene hukommelsessystemer, skal du gøre dig bekendt med Intel FPGA SDK for OpenCL-dokumenter, der er specificeret nedenfor.
Relateret information

  • Intel FPGA SDK til OpenCL-programmeringsvejledning
  • Intel FPGA SDK for OpenCL Best Practices Guide
  • Intel FPGA SDK til OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide

1.1. Verifikation af funktionaliteten af ​​FPGA-kortet og EMIF-grænsefladerne

Bekræft hver hukommelsesgrænseflade uafhængigt, og instansier derefter din brugerdefinerede platform ved hjælp af global hukommelse.

  1. Bekræft hver hukommelsesgrænseflade ved hjælp af hardwaredesign, der kan teste hastigheden og stabiliteten af ​​hver grænseflade.
  2. Instantiér din brugerdefinerede platform ved hjælp af global hukommelse.
    1. F.eksample, hvis du har tre DDR-grænseflader, skal en af ​​dem kortlægges som heterogen hukommelse. I dette tilfælde skal du kontrollere funktionaliteten af ​​OpenCL-stakken med hver DDR-grænseflade uafhængigt.
      OpenCL og OpenCL-logoet er varemærker tilhørende Apple Inc., der bruges med tilladelse fra Khronos Group™.
    2.  Intel FPGA SDK til OpenCL er baseret på en offentliggjort Khronos-specifikation og har bestået Khronos Conformance Testing Process. Aktuel overensstemmelsesstatus kan findes på www.khronos.org/conformance.

Intel Corporation. Alle rettigheder forbeholdes. Intel, Intel-logoet og andre Intel-mærker er varemærker tilhørende Intel Corporation eller dets datterselskaber. Intel garanterer ydeevnen af ​​sine FPGA- og halvlederprodukter i henhold til de aktuelle specifikationer i overensstemmelse med Intels standardgaranti, men forbeholder sig retten til at foretage ændringer af produkter og tjenester til enhver tid uden varsel. Intel påtager sig intet ansvar eller erstatningsansvar som følge af applikationen eller brugen af ​​oplysninger, produkter eller tjenester beskrevet heri, undtagen som udtrykkeligt skriftligt aftalt af Intel. Intel-kunder rådes til at indhente den seneste version af enhedsspecifikationerne, før de stoler på nogen offentliggjort information, og før de afgiver ordrer på produkter eller tjenester. *Andre navne og mærker kan hævdes at være andres ejendom.
ISO 9001: 2015 Registreret
Alternativt, hvis du har to DDR-grænseflader og en quad data rate-grænseflade (QDR), skal du kontrollere funktionaliteten af ​​OpenCL-stakken af ​​de to DDR-grænseflader og QDR-grænsefladen uafhængigt.
Intel anbefaler, at du bruger PCI Express® – (PCIe® -) eller EMIF-eksklusive designs til at teste dine hukommelsesgrænseflader. Når du har kontrolleret, at hver hukommelsesgrænseflade er funktionel, og at dit OpenCL-design fungerer med en delmængde af hukommelsesgrænsefladerne, skal du fortsætte
at skabe et fuldt funktionelt heterogent hukommelsessystem. 
1.2. Ændring af board_spec.xml File
Rediger board_spec.xml file at specificere de typer af heterogene hukommelsessystemer, der er tilgængelige for OpenCL-kernerne.
Under kernekompilering tildeler Intel FPGA SDK til OpenCL Offline Compiler kerneargumenter til en hukommelse baseret på bufferplaceringsargumentet, som du angiver.
1. Gå til board_spec.xml file i hardwarebiblioteket på din brugerdefinerede platform.
2. Åbn board_spec.xml file i en teksteditor og modificere XML i overensstemmelse hermed.
F.eksampHvis dit hardwaresystem har to DDR-hukommelser som standard globalhukommelse og to QDR-banker, som du modellerer som heterogen hukommelse, skal du ændre hukommelsessektionerne i board_spec.xml file at ligne følgende:
















1.3. Opsætning af flere hukommelsesdelere i Qsys
I øjeblikket understøtter OpenCL Memory Bank Divider i Qsys-designet ikke ikke-power-of-2 antal hukommelsesbanker, hvilket ikke er en begrænsning for typiske konfigurationer. Der er dog scenarier, hvor ikke-power-of-2 antal hukommelsesgrænseflader er nødvendige. For at rumme ikke-power-of-2 antal hukommelsesgrænseflader, skal du bruge flere OpenCL Memory Bank Dividers til at skabe heterogene hukommelsessystemer med ikke-power-of-2 antal hukommelsesbanker. Du skal oprette flere OpenCL Memory Bank Dividers, når du har et ægte heterogent hukommelsessystem. Overvej et system med en DDR-hukommelsesgrænseflade og en QDR-hukommelsesgrænseflade. Fordi de to banker har forskellige hukommelsestopologier, kan du ikke kombinere dem under en enkelt global hukommelse.
Figur 1. Blokdiagram af et heterogent hukommelsessystem med tre banker
Dette heterogene hukommelsessystem indeholder to DDR-hukommelsesgrænseflader og en QDR-hukommelsesgrænseflade.intel skaber heterogene hukommelsessystemer i FPGA SDK til OpenCL Custom Platforms - fig.Hvis du bruger version 16.0, 16.0.1 eller 16.0.2 af Intel Quartus® Prime-softwaren og Altera SDK for OpenCL, håndterer OpenCL Memory Bank Divider forkert hukommelsesburst på tværs af adressegrænser. For at omgå dette kendte problem skal du tilføje en pipeline-bro med en burststørrelse på 1 og forbinde dens Avalon ®Memory-Mapped (Avalon-MM) master til OpenCL Memory Bank Dividers slaveport.
Note:
Dette kendte problem er rettet i Intel Quartus Prime-softwaren og Intel FPGA SDK til OpenCL version 16.1.
Figur 2. Blokdiagram af et heterogent hukommelsessystem med tre banker med en rørledningsbro intel skaber heterogene hukommelsessystemer i FPGA SDK til OpenCL Custom Platforms - fig.1.4. Ændring af Boardtest-programmet og værtskoden for din heterogene hukommelsesløsning
Brug boardtest.cl-kernen, der følger med Intel FPGA SDK til OpenCL Custom Platform Toolkit til at teste funktionaliteten og ydeevnen af ​​din Custom Platform.
Boardtest-programmet er en OpenCL-kerne, der giver dig mulighed for at teste vært-til-enhed-båndbredde, hukommelsesbåndbredde og generel funktionalitet af din brugerdefinerede platform.

  1. Gennemse til /board/ custom_platform_toolkit/tests/boardtest bibliotek.
  2. Åbn boardtest.cl file i en teksteditor og tildel en bufferplacering til hvert globalt hukommelsesargument.
    F.eksampdet:
    __kerne ugyldig
    mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
    Her er uint *src tildelt DDR-hukommelse, og uint *dst er tildelt QDR-hukommelse. Board_spec.xml file specificerer egenskaberne for begge hukommelsessystemer.
  3. For at udnytte din heterogene hukommelsesløsning i dit OpenCL-system skal du ændre din værtskode ved at tilføje flaget CL_MEM_HETEROGENEOUS_INTELFPGA til dit clCreateBuffer-kald.
    F.eksampdet:
    ddatain = clCreateBuffer(kontekst, CL_MEM_READ_WRITE | memflags
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(usigned) * vectorSize, NULL, &status);
    Intel anbefaler kraftigt, at du indstiller bufferplaceringen som et kerneargument, før du skriver bufferen. Når du bruger en enkelt global hukommelse, kan du skrive bufferne enten før eller efter at have tildelt dem til et kerneargument. I heterogene hukommelsessystemer sætter værten bufferplaceringen, før bufferen skrives. Med andre ord vil værten kalde funktionen clSetKernelArgument, før den kalder funktionen clEnqueueWriteBuffer.
    I din værtskode skal du kalde clCreateBuffer, clSetKernelArg og clEnqueueWriteBuffer i følgende rækkefølge:
    ddatain = clCreateBuffer(kontekst, CL_MEM_READ_WRITE | memflags |
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(usigned) * vectorSize, NULL, &status);
    … status = clSetKernelArg(kerne[k], 0, sizeof(cl_mem), (void*)&ddatain);
    … status = clEnqueueWriteBuffer(kø, ddatain, CL_FALSE, 0, sizeof(usigned) * vectorSize,hdatain, 0, NULL, NULL);
    ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file præsenterer en lignende rækkefølge af disse funktionskald.
  4.  Når du har ændret boardtest.cl file og værtskoden, kompiler værts- og kernekoden og verificere deres funktionalitet.
    Når du kompilerer din kernekode, skal du deaktivere burst-interleaving af alle hukommelsessystemer ved at inkludere –no-interleaving mulighed i aoc-kommandoen.

Relateret information
Deaktivering af burst-interleaving af global hukommelse (-ingen interleaving )

1.5. Bekræftelse af funktionaliteten af ​​din heterogene hukommelse System
For at sikre, at det heterogene hukommelsessystem fungerer korrekt, skal du frakoble flaget CL_CONTEXT_COMPILER_MODE_INTELFPGA i din værtskode.
I OpenCL-systemer med homogen hukommelse skal du vælge at indstille flaget CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 i din værtskode for at deaktivere læsningen af ​​.aocx file og omprogrammering af FPGA. Indstilling af flaget CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 er nyttigt, når du instansierer dit board for at verificere funktionaliteten af ​​din brugerdefinerede platform uden at designe grundplanen og specificere LogicLock™-områderne.
Med heterogene hukommelsessystemer skal runtime-miljøet læse bufferplaceringerne for hver buffer, beskrevet i .aocx file, for at verificere hukommelsessystemernes funktionalitet. Du vil dog måske gerne verificere funktionaliteten af ​​din brugerdefinerede platform uden at implementere de endelige funktioner i boarddesignet, såsom at designe grundplanen og angive LogicLock-regionerne.

  1. Bekræft, at flaget CL_CONTEXT_COMPILER_MODE_INTELFPGA er deaktiveret i din værtskode.
  2. Gå til tavlen/ /source/host/mmd bibliotek på din brugerdefinerede platform.
  3. Åbn den acl_pcie_device.cpp memory-mapped enhed (MMD) file i en teksteditor.
  4.  Rediger omprogrammeringsfunktionen i acl_pcie_device.cpp file ved at tilføje et afkast 0; linje, som vist nedenfor:
    int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
    {
    returnere 0;
    // antage fejl
    int reprogram_failed = 1;
    // antag ingen rbf eller hash i fpga.bin
    int rbf_or_hash_not_provided = 1;
    // antager, at base- og importrevisions-hasherne ikke stemmer overens
    int hash_mismatch = 1;

    }
  5. Genkompiler acl_pcie_device.cpp file.
  6. Bekræft, at flaget CL_CONTEXT_COMPILER_MODE_INTELFPGA forbliver deaktiveret.
    Opmærksomhed: Efter at du har tilføjet return 0; til omprogrammeringsfunktionen og kompiler MMD'en igen file, vil runtime-miljøet læse .aocx file og tildele bufferplaceringerne, men vil ikke omprogrammere FPGA'en. Du skal manuelt matche FPGA-billedet med .aocx file. For at vende denne adfærd skal du fjerne return 0; fra omprogrammeringsfunktionen og kompiler MMD'en igen file.

1.6. Dokumentrevisionshistorik

Dato Version Ændringer
Dec-17 2017.12.01 • Omdannede CL_MEM_HETEROGENEOUS_ALTERA til CL_MEM_HETEROGENEOUS_INTELFPGA.
Dec-16 2016.12.13 • Omdannede CL_CONTEXT_COMPILER_MODE_ALTERA til CL_CONTEXT_COMPILER_MODE_INTELFPGA.

intel - logoOprettelse af heterogene hukommelsessystemer i Intel® FPGA SDK til OpenCL
Brugerdefinerede platforme
intel skaber heterogene hukommelsessystemer i FPGA SDK til OpenCL Custom Platforms - ikon 1 Send feedback
intel Oprettelse af heterogene hukommelsessystemer i FPGA SDK til OpenCL Custom Platforms - ikon Online Version
intel skaber heterogene hukommelsessystemer i FPGA SDK til OpenCL Custom Platforms - ikon 1 Send feedback
ID: 683654
Version: 2016.12.13

Dokumenter/ressourcer

intel Oprettelse af heterogene hukommelsessystemer i FPGA SDK til OpenCL Custom Platforms [pdf] Instruktioner
Oprettelse af heterogene hukommelsessystemer i FPGA SDK til OpenCL Custom Platforms, Oprettelse af heterogene hukommelsessystemer, FPGA SDK til OpenCL Custom Platforms

Referencer

Efterlad en kommentar

Din e-mailadresse vil ikke blive offentliggjort. Påkrævede felter er markeret *