Creazione di sistemi di memoria eterogenei in FPGA SDK per piattaforme personalizzate OpenCL
Istruzioni
Creazione di sistemi di memoria eterogenei in Intel® FPGA SDK per piattaforme personalizzate OpenCL
L'implementazione della memoria eterogenea in una piattaforma personalizzata consente una maggiore larghezza di banda dell'interfaccia di memoria esterna (EMIF) nonché accessi alla memoria più grandi e più veloci. La combinazione di accesso alla memoria eterogeneo con un file ottimizzato
Il kernel OpenCL ™(1) può portare a significativi miglioramenti delle prestazioni del sistema OpenCL.
Questa nota applicativa fornisce indicazioni sulla creazione di sistemi di memoria eterogenei in una piattaforma personalizzata da utilizzare con Intel® FPGA SDK per OpenCL(2). Intel presuppone che tu sia un progettista esperto di FPGA che sta sviluppando piattaforme personalizzate che contengono sistemi di memoria eterogenei.
Prima di creare i sistemi di memoria eterogenei, familiarizzare con i documenti Intel FPGA SDK per OpenCL specificati di seguito.
Informazioni correlate
- Intel FPGA SDK per Guida alla programmazione OpenCL
- Intel FPGA SDK per Guida alle best practice per OpenCL
- Intel FPGA SDK per OpenCL Arria 10 GX FPGA Development Kit Guida al porting della piattaforma di riferimento
1.1. Verifica della funzionalità della scheda FPGA e delle interfacce EMIF
Verifica ogni interfaccia di memoria in modo indipendente e quindi crea un'istanza della tua piattaforma personalizzata utilizzando la memoria globale.
- Verifica ogni interfaccia di memoria utilizzando progetti hardware in grado di testare la velocità e la stabilità di ciascuna interfaccia.
- Crea un'istanza della tua piattaforma personalizzata utilizzando la memoria globale.
- Per esempioample, se si hanno tre interfacce DDR, una di esse deve essere mappata come memoria eterogenea. In questo caso, verificare la funzionalità dello stack OpenCL con ciascuna interfaccia DDR in modo indipendente.
OpenCL e il logo OpenCL sono marchi di Apple Inc. utilizzati su autorizzazione di Khronos Group™ . - L'SDK Intel FPGA per OpenCL si basa su una specifica Khronos pubblicata e ha superato il processo di test di conformità Khronos. Lo stato di conformità attuale è disponibile all'indirizzo www.khronos.org/conformance.
- Per esempioample, se si hanno tre interfacce DDR, una di esse deve essere mappata come memoria eterogenea. In questo caso, verificare la funzionalità dello stack OpenCL con ciascuna interfaccia DDR in modo indipendente.
Intel Corporation. Tutti i diritti riservati. Intel, il logo Intel e altri marchi Intel sono marchi di Intel Corporation o delle sue consociate. Intel garantisce le prestazioni dei suoi prodotti FPGA e semiconduttori in base alle specifiche attuali in conformità con la garanzia standard di Intel, ma si riserva il diritto di apportare modifiche a qualsiasi prodotto e servizio in qualsiasi momento senza preavviso. Intel non si assume alcuna responsabilità derivante dall'applicazione o dall'uso di qualsiasi informazione, prodotto o servizio qui descritto, salvo quanto espressamente concordato per iscritto da Intel. Si consiglia ai clienti Intel di ottenere la versione più recente delle specifiche del dispositivo prima di fare affidamento su qualsiasi informazione pubblicata e prima di effettuare ordini per prodotti o servizi. *Altri nomi e marchi possono essere rivendicati come proprietà di altri.
Certificato ISO 9001: 2015
In alternativa, se si dispone di due interfacce DDR e un'interfaccia QDR (Quad Data Rate), verificare la funzionalità dello stack OpenCL delle due interfacce DDR e dell'interfaccia QDR in modo indipendente.
Intel consiglia di utilizzare design esclusivi PCI Express® – (PCIe® -) o EMIF per testare le interfacce di memoria. Dopo aver verificato che ogni interfaccia di memoria sia funzionante e che il progetto OpenCL funzioni con un sottoinsieme delle interfacce di memoria, procedere
creare un sistema di memoria eterogeneo completamente funzionante.
1.2. Modifica di board_spec.xml File
Modifica board_spec.xml file per specificare i tipi di sistemi di memoria eterogenei disponibili per i kernel OpenCL.
Durante la compilazione del kernel, Intel FPGA SDK per OpenCL Offline Compiler assegna gli argomenti del kernel a una memoria in base all'argomento della posizione del buffer specificato.
1. Passare a board_spec.xml file nella directory hardware della tua piattaforma personalizzata.
2. Aprire board_spec.xml file in un editor di testo e modificare l'XML di conseguenza.
Per esempioample, se il tuo sistema hardware ha due memorie DDR come memoria globale predefinita e due banchi QDR modellati come memoria eterogenea, modifica le sezioni di memoria del file board_spec.xml file per assomigliare al seguente:
1.3. Impostazione di più divisori di memoria in Qsys
Attualmente, OpenCL Memory Bank Divider nel design Qsys non supporta il numero di banchi di memoria non power-of-2, che non è una limitazione per le configurazioni tipiche. Tuttavia, esistono scenari in cui è necessario un numero di interfacce di memoria non power-of-2. Per gestire un numero di interfacce di memoria non power-of-2, utilizzare più divisori di banchi di memoria OpenCL per creare sistemi di memoria eterogenei con un numero di banchi di memoria non power-of-2. È necessario creare più divisori di banchi di memoria OpenCL quando si dispone di un vero sistema di memoria eterogeneo. Si consideri un sistema con un'interfaccia di memoria DDR e un'interfaccia di memoria QDR. Poiché i due banchi hanno diverse topologie di memoria, non è possibile combinarli in un'unica memoria globale.
Figura 1. Diagramma a blocchi di un sistema di memoria eterogeneo a tre banchi
Questo sistema di memoria eterogeneo contiene due interfacce di memoria DDR e un'interfaccia di memoria QDR.Se si utilizza la versione 16.0, 16.0.1 o 16.0.2 del software Intel Quartus® Prime e Altera SDK per OpenCL, OpenCL Memory Bank Divider gestisce in modo errato i picchi di memoria oltre i limiti degli indirizzi. Per ovviare a questo problema noto, aggiungi un bridge pipeline con una dimensione di burst pari a 1 e collega il relativo master Avalon ® Memory-Mapped (Avalon-MM) alla porta slave di OpenCL Memory Bank Divider.
Nota:
Questo problema noto è stato risolto nel software Intel Quartus Prime e in Intel FPGA SDK per OpenCL versione 16.1.
Figura 2. Diagramma a blocchi di un sistema di memoria eterogeneo a tre banchi con un ponte pipeline 1.4. Modifica del programma Boardtest e del codice host per la tua soluzione di memoria eterogenea
Utilizza il kernel boardtest.cl fornito con Intel FPGA SDK per OpenCL Custom Platform Toolkit per testare la funzionalità e le prestazioni della tua piattaforma personalizzata.
Il programma boardtest è un kernel OpenCL che ti consente di testare la larghezza di banda da host a dispositivo, la larghezza di banda della memoria e la funzionalità generale della tua piattaforma personalizzata.
- Sfoglia il directory /board/ custom_platform_toolkit/tests/boardtest.
- Apri il file boardtest.cl file in un editor di testo e assegnare una posizione del buffer a ciascun argomento di memoria globale.
Per esempioampon:
__kernel vuoto
mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
Qui, uint *src è assegnato alla memoria DDR e uint *dst è assegnato alla memoria QDR. Il file board_spec.xml file specifica le caratteristiche di entrambi i sistemi di memoria. - Per sfruttare la tua soluzione di memoria eterogenea nel tuo sistema OpenCL, modifica il tuo codice host aggiungendo il flag CL_MEM_HETEROGENEOUS_INTELFPGA alla tua chiamata clCreateBuffer.
Per esempioampon:
ddatain = clCreateBuffer(contesto, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
Intel consiglia vivamente di impostare la posizione del buffer come argomento del kernel prima di scrivere il buffer. Quando si utilizza una singola memoria globale, è possibile scrivere i buffer prima o dopo averli assegnati a un argomento del kernel. Nei sistemi di memoria eterogenei, l'host imposta la posizione del buffer prima di scrivere il buffer. In altre parole, l'host chiamerà la funzione clSetKernelArgument prima di chiamare la funzione clEnqueueWriteBuffer.
Nel tuo codice host, richiama le chiamate clCreateBuffer, clSetKernelArg e clEnqueueWriteBuffer nel seguente ordine:
ddatain = clCreateBuffer(contesto, 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);
ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file presenta un ordine simile di queste chiamate di funzione. - Dopo aver modificato il file boardtest.cl file e il codice host, compilare il codice host e del kernel e verificarne la funzionalità.
Quando si compila il codice del kernel, è necessario disabilitare l'interleaving burst di tutti i sistemi di memoria includendo l'opzione –no-interleaving opzione nel comando aoc.
Informazioni correlate
Disattivazione di Burst-Interleaving della memoria globale (–no-interleaving )
1.5. Verifica della funzionalità della tua memoria eterogenea Sistema
Per garantire che il sistema di memoria eterogenea funzioni correttamente, deselezionare il flag CL_CONTEXT_COMPILER_MODE_INTELFPGA nel codice host.
Nei sistemi OpenCL con memoria omogenea, devi scegliere di impostare il flag CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 nel tuo codice host per disabilitare la lettura del file .aocx file e la riprogrammazione dell'FPGA. L'impostazione del flag CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 è utile quando si crea un'istanza della scheda per verificare la funzionalità della piattaforma personalizzata senza progettare la planimetria e specificare le regioni LogicLock™.
Con sistemi di memoria eterogenei, l'ambiente di runtime deve leggere le posizioni dei buffer di ciascun buffer, descritte nel file .aocx file, per verificare la funzionalità dei sistemi di memoria. Tuttavia, potresti voler verificare la funzionalità della tua piattaforma personalizzata senza implementare le caratteristiche finali del design della scheda, come progettare la planimetria e specificare le regioni LogicLock.
- Verificare che il flag CL_CONTEXT_COMPILER_MODE_INTELFPGA non sia impostato nel codice host.
- Sfoglia la bacheca/ /source/host/mmd directory della tua piattaforma personalizzata.
- Apri il dispositivo mappato in memoria acl_pcie_device.cpp (MMD) file in un editor di testo.
- Modificare la funzione di riprogrammazione in acl_pcie_device.cpp file aggiungendo un return 0; linea, come mostrato di seguito:
int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
{
restituisci 0;
// assume il fallimento
int reprogramma_fallito = 1;
// non assume rbf o hash in fpga.bin
int rbf_or_hash_not_provided = 1;
// presume che gli hash di revisione di base e di importazione non corrispondano
int hash_mismatch = 1;
…
} - Ricompilare acl_pcie_device.cpp file.
- Verificare che il flag CL_CONTEXT_COMPILER_MODE_INTELFPGA rimanga non impostato.
Attenzione: Dopo aver aggiunto return 0; alla funzione riprogrammare e ricompilare la MMD file, l'ambiente di runtime leggerà il file .aocx file e assegnare le posizioni del buffer ma non riprogrammerà l'FPGA. Devi far corrispondere manualmente l'immagine FPGA con il file .aocx file. Per invertire questo comportamento, rimuovere return 0; dalla funzione riprogrammare e ricompilare la MMD file.
1.6. Cronologia delle revisioni del documento
Data | Versione | Cambiamenti |
17 dicembre | 2017.12.01 | • Rinominato CL_MEM_HETEROGENEOUS_ALTERA in CL_MEM_HETEROGENEOUS_INTELFPGA. |
16 dicembre | 2016.12.13 | • Rinominato CL_CONTEXT_COMPILER_MODE_ALTERA in CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Creazione di sistemi di memoria eterogenei in Intel® FPGA SDK per OpenCL
Piattaforme personalizzate
Invia feedback
Versione online
Invia feedback
Numero identificativo: 683654
Versione: 2016.12.13
Documenti / Risorse
![]() |
intel Creazione di sistemi di memoria eterogenei nell'SDK FPGA per piattaforme personalizzate OpenCL [pdf] Istruzioni Creazione di sistemi di memoria eterogenei in SDK FPGA per piattaforme personalizzate OpenCL, Creazione di sistemi di memoria eterogenei, SDK FPGA per piattaforme personalizzate OpenCL |