intel - loguCreazione di Sistemi di Memoria Eterogenei in FPGA SDK per OpenCL Custom Platforms
Istruzzioni

Creazione di sistemi di memoria eterogenei in Intel® FPGA SDK per e piattaforme persunalizate OpenCL

L'implementazione di memoria eterogenea in una Piattaforma Personalizzata permette una larghezza di banda di più interfaccia di memoria esterna (EMIF) è ancu accessi di memoria più grande è più veloce. A cumminazzioni di l'accessu di memoria eterogeneu cù un ottimizatu
OpenCL ™ (1) kernel pò risultà in miglioramenti significativi di rendiment per u vostru sistema OpenCL.
Questa nota di l'applicazione furnisce una guida nantu à a creazione di sistemi di memoria eterogenei in una Piattaforma Personalizzata per l'usu cù l'SDK Intel® FPGA per OpenCL (2). Intel assume chì site un designer FPGA espertu chì sviluppa Piattaforme Personalizzate chì cuntene sistemi di memoria eterogenei.
Prima di creà i sistemi di memoria eterogenei, familiarizàvi cù l'Intel FPGA SDK per i documenti OpenCL specificati quì sottu.
Information Related

  • Intel FPGA SDK for OpenCL Programming Guide
  • Intel FPGA SDK for OpenCL Best Practices Guide
  • Intel FPGA SDK per OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide

1.1. Verificazione di e Funzionalità di a Scheda FPGA è di l'Interfacce EMIF

Verificate ogni interfaccia di memoria indipindente è poi istanziate a vostra Piattaforma Personalizzata utilizendu memoria globale.

  1. Verificate ogni interfaccia di memoria utilizendu disinni di hardware chì ponu pruvà a velocità è a stabilità di ogni interfaccia.
  2. Instanziate a vostra Piattaforma Personalizzata utilizendu a memoria globale.
    1. Per esample, s'è vo avete trè interfacce DDR, unu di elli deve esse mappatu cum'è memoria heterogeneous. In questu casu, verificate a funziunalità di a pila OpenCL cù ogni interfaccia DDR indipindente.
      OpenCL è u logu OpenCL sò marchi di Apple Inc. utilizati cù permessu di Khronos Group™.
    2.  L'SDK Intel FPGA per OpenCL hè basatu annantu à una Specificazione Khronos publicata, è hà passatu u Prucessu di Test di Conformità Khronos. U statutu di cunfurmità attuale pò esse truvatu à www.khronos.org/conformance.

Intel Corporation. Tutti i diritti riservati. Intel, u logu Intel è altri marchi Intel sò marchi di Intel Corporation o di e so filiali. Intel garantisce a prestazione di i so prudutti FPGA è semiconduttori à e specificazioni attuali in cunfurmità cù a garanzia standard di Intel, ma si riserva u dirittu di fà cambiamenti à qualsiasi prudutti è servizii in ogni mumentu senza avvisu. Intel ùn assume alcuna rispunsabilità o responsabilità derivante da l'applicazione o l'usu di qualsiasi informazione, pruduttu o serviziu descritti quì, salvu cum'è espressamente accunsentutu in scrittura da Intel. I clienti di Intel sò cunsigliati per ottene l'ultima versione di e specificazioni di u dispositivu prima di confià nantu à qualsiasi infurmazione publicata è prima di fà ordini per prudutti o servizii. * Altri nomi è marche ponu esse rivendicate cum'è a pruprietà di l'altri.
ISO 9001: 2015 Registratu
In alternativa, se avete duie interfacce DDR è una interfaccia di quad data rate (QDR), verificate a funziunalità di a pila OpenCL di e duie interfacce DDR è l'interfaccia QDR indipindente.
Intel consiglia di utilizà PCI Express® - (PCIe® -) o disinni esclusivi EMIF per pruvà e vostre interfacce di memoria. Dopu avè verificatu chì ogni interfaccia di memoria hè funziunale è chì u vostru disignu OpenCL travaglia cù un subset di l'interfacce di memoria, procede.
per creà un sistema di memoria eterogeneu cumplettamente funziunale. 
1.2. Mudificà u board_spec.xml File
Mudificà u board_spec.xml file per specificà i tipi di sistemi di memoria eterogenei chì sò dispunibuli per i kernels OpenCL.
Durante a compilazione di u kernel, l'Intel FPGA SDK for OpenCL Offline Compiler assigna l'argumenti di u kernel à una memoria basatu annantu à l'argumentu di u buffer locu chì specificate.
1. Navigate à u board_spec.xml file in u repertoriu di hardware di a vostra Plataforma Personalizzata.
2. Aprite u board_spec.xml file in un editore di testu è mudificà l'XML in cunseguenza.
Per esample, se u vostru sistema hardware hà duie memorie DDR cum'è memoria global predeterminata è dui banche QDR chì modellate cum'è memoria eterogenea, mudificà e sezioni di memoria di u board_spec.xml file per s'assumiglia à i seguenti:
















1.3. Configurazione di più divisori di memoria in Qsys
Attualmente, l'OpenCL Memory Bank Divider in u disignu Qsys ùn sustene micca un numeru di banche di memoria non-power-of-2, chì ùn hè micca una limitazione per cunfigurazioni tipiche. Tuttavia, ci sò scenarii induve un numeru di interfacce di memoria non-power-of-2 hè necessariu. Per accumpagnà un numeru di interfacce di memoria non-power-of-2, aduprate multiple OpenCL Memory Bank Dividers per creà sistemi di memoria eterogenei cù un numeru di banche di memoria non power-of-2. Duvete creà parechje OpenCL Memory Bank Dividers quandu avete un veru sistema di memoria eterogeneu. Cunsiderate un sistema cù una interfaccia di memoria DDR è una interfaccia di memoria QDR. Perchè i dui banche anu diverse topologie di memoria, ùn pudete micca cumminà in una sola memoria glubale.
Figura 1. Schema di bloccu di un sistema di memoria eterogeneu di trè banche
Stu sistema di memoria eterogeneu cuntene duie interfacce di memoria DDR è una interfaccia di memoria QDR.intel Creazione di sistemi di memoria eterogenei in FPGA SDK per e piattaforme persunalizate OpenCL - fig 1Sè vo aduprate a versione 16.0, 16.0.1, o 16.0.2 di u software Intel Quartus® Prime è l'Altera SDK per OpenCL, l'OpenCL Memory Bank Divider gestisce in modu incorrecte i burst di memoria à traversu i limiti di l'indirizzu. Per trattà stu prublema cunnisciuta, aghjunghje un ponte di pipeline cù una dimensione di burst di 1 è cunnette u so maestru Avalon ®Memory-Mapped (Avalon-MM) à u portu slave di OpenCL Memory Bank Divider.
Nota:
Stu prublema cunnisciuta hè risolta in u software Intel Quartus Prime è l'Intel FPGA SDK per OpenCL versione 16.1.
Figura 2. Schema di bloccu di un sistema di memoria heterogenea di trè banche cù un ponte di pipeline intel Creazione di sistemi di memoria eterogenei in FPGA SDK per e piattaforme persunalizate OpenCL - fig 21.4. Mudificà u prugramma Boardtest è u codice di l'ospite per a vostra Soluzione di Memoria Eterogenea
Aduprate u kernel boardtest.cl chì vene cù l'Intel FPGA SDK for OpenCL Custom Platform Toolkit per pruvà a funziunalità è a prestazione di a vostra piattaforma Custom.
U prugramma boardtest hè un kernel OpenCL chì vi permette di pruvà a larghezza di banda di l'ospite à u dispositivu, a larghezza di banda di memoria è a funziunalità generale di a vostra Plataforma Personalizzata.

  1. Navigate à u /board/ custom_platform_toolkit/tests/boardtest directory.
  2. Aprite u boardtest.cl file in un editore di testu è assignate un locu buffer à ogni argumentu di memoria globale.
    Per esampLe:
    __kernel void
    mem_stream (__global__attribute__((buffer_location ("DDR"))) uint *src, __global __attribute__((buffer_location ("QDR"))) uint *dst, uint arg, uint arg2)
    Quì, uint *src hè assignatu à a memoria DDR, è uint *dst hè assignatu à a memoria QDR. U board_spec.xml file specifica e caratteristiche di i dui sistemi di memoria.
  3. Per sfruttà a vostra suluzione di memoria eterogenea in u vostru sistema OpenCL, mudificà u vostru còdice di l'ospitu aghjunghjendu a bandiera CL_MEM_HETEROGENEOUS_INTELFPGA à a vostra chjama clCreateBuffer.
    Per esampLe:
    ddatain = clCreateBuffer (cuntestu, CL_MEM_READ_WRITE | memflags
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof (unsigned) * vectorSize, NULL, &status);
    Intel ricumandemu fermamente di stabilisce u locu di u buffer cum'è un argumentu di u kernel prima di scrive u buffer. Quandu aduprate una sola memoria glubale, pudete scrive i buffers prima o dopu l'assignà à un argumentu di u kernel. In i sistemi di memoria eterogenei, l'ospite stabilisce u locu di u buffer prima di scrive u buffer. In altri palori, l'ospite chjamà a funzione clSetKernelArgument prima di chjamà a funzione clEnqueueWriteBuffer.
    In u vostru còdice d'ospiti, invucate e chjamate clCreateBuffer, clSetKernelArg è clEnqueueWriteBuffer in l'ordine seguente:
    ddatain = clCreateBuffer (cuntestu, 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);
    L'ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file presenta un ordine simile di sti chjama di funzione.
  4.  Dopu avè mudificatu u boardtest.cl file è u codice di l'ospite, compile u codice di l'ospite è u kernel è verificate a so funziunalità.
    Quandu compilate u vostru codice di u kernel, duvete disattivà l'interleaving burst di tutti i sistemi di memoria includendu u -no-interleaving opzione in u cumandimu aoc.

Information Related
Disattivazione di Burst-Interleaving di Memoria Globale (-senza interleaving )

1.5. Verificà a Funzionalità di a vostra Memoria Eterogenea Sistema
Per assicurà chì u sistema di memoria eterogeneu funziona bè, sguassate a bandiera CL_CONTEXT_COMPILER_MODE_INTELFPGA in u vostru codice d'ospiti.
In i sistemi OpenCL cù memoria omogenea, avete l'opzione per stabilisce a bandiera CL_CONTEXT_COMPILER_MODE_INTELFPGA = 3 in u vostru codice d'ospiti per disattivà a lettura di u .aocx. file è a riprogrammazione di l'FPGA. Stabilisce a bandiera CL_CONTEXT_COMPILER_MODE_INTELFPGA = 3 hè utile quandu istanziate a vostra tavola per verificà a funziunalità di a vostra Piattaforma Personalizzata senza cuncepisce u pianu è specificà e regioni LogicLock™.
Cù sistemi di memoria eterogenei, l'ambiente di runtime deve leghje i posti di buffer di ogni buffer, descritti in u .aocx. file, per verificà a funziunalità di i sistemi di memoria. Tuttavia, pudete vulete verificà a funziunalità di a vostra Piattaforma Personalizzata senza implementà e caratteristiche finali di u disignu di u bordu, cum'è cuncepisce u pianu è specificà e regioni LogicLock.

  1. Verificate chì a bandiera CL_CONTEXT_COMPILER_MODE_INTELFPGA ùn hè micca stallata in u vostru codice d'ospiti.
  2. Sfoglia à u bordu / /source/host/mmd directory di a vostra Plataforma Personalizzata.
  3. Apertura u dispositivu acl_pcie_device.cpp mappatu in memoria (MMD) file in un editore di testu.
  4.  Mudificà a funzione di riprogramma in acl_pcie_device.cpp file aghjunghjendu un ritornu 0; linea, cum'è mostra quì sottu:
    int ACL_PCIE_DEVICE::reprogram (void *data, size_t data_size)
    {
    torna 0;
    // assume un fallimentu
    int reprogram_failed = 1;
    // ùn assume micca rbf o hash in fpga.bin
    int rbf_or_hash_not_provided = 1;
    // assume chì l'hash di rivisione di basa è d'importazione ùn currispondenu micca
    int hash_mismatch = 1;

    }
  5. Recompile u acl_pcie_device.cpp file.
  6. Verificate chì a bandiera CL_CONTEXT_COMPILER_MODE_INTELFPGA ùn resta micca impostata.
    Attenzione: Dopu aghjunghje u ritornu 0; à a funzione di riprogramma è ricompilate l'MMD file, l'ambiente di runtime leghje u .aocx file è assignà i posti di buffer ma ùn riprogrammarà micca u FPGA. Avete bisognu manualmente l'imagine FPGA cù u .aocx file. Per annunzià stu cumpurtamentu, sguassate u ritornu 0; da a funzione di riprogramma è ricompilate l'MMD file.

1.6. Storia di Revisione di Documenti

Data Versione Cambiamenti
Dic-17 2017.12.01 • Rebranded CL_MEM_HETEROGENEOUS_ALTERA à CL_MEM_HETEROGENEOUS_INTELFPGA.
Dic-16 2016.12.13 • Rebranded CL_CONTEXT_COMPILER_MODE_ALTERA à CL_CONTEXT_COMPILER_MODE_INTELFPGA.

intel - loguCreazione di Sistemi di Memoria Eterogenei in Intel® FPGA SDK per OpenCL
Piattaforme persunalizati
intel Creazione di sistemi di memoria eterogenei in FPGA SDK per e piattaforme persunalizate OpenCL - icona 1 Mandate Feedback
intel Creazione di Sistemi di Memoria Eterogenei in FPGA SDK per OpenCL Custom Platforms - icona Versione in linea
intel Creazione di sistemi di memoria eterogenei in FPGA SDK per e piattaforme persunalizate OpenCL - icona 1 Mandate Feedback
ID: 683654
Versione: 2016.12.13

Documenti / Risorse

intel Creazione di Sistemi di Memoria Eterogenei in FPGA SDK per OpenCL Custom Platforms [pdf] Istruzzioni
Creazione di sistemi di memoria eterogenei in FPGA SDK per piattaforme persunalizate OpenCL, creazione di sistemi di memoria eterogenei, FPGA SDK per piattaforme persunalizate OpenCL

Referenze

Lascia un cumentu

U vostru indirizzu email ùn serà micca publicatu. I campi obbligatori sò marcati *