intel-logoCréation de systèmes de mémoire hétérogènes dans le SDK FPGA pour les plates-formes personnalisées OpenCL
Instructions

Création de systèmes de mémoire hétérogènes dans le SDK Intel® FPGA pour les plates-formes personnalisées OpenCL

L'implémentation d'une mémoire hétérogène dans une plate-forme personnalisée permet une plus grande bande passante d'interface de mémoire externe (EMIF) ainsi que des accès à la mémoire plus importants et plus rapides. La combinaison d'un accès mémoire hétérogène avec un
Le noyau OpenCL ™(1) peut entraîner des améliorations significatives des performances de votre système OpenCL.
Cette note d'application fournit des conseils sur la création de systèmes de mémoire hétérogènes dans une plate-forme personnalisée à utiliser avec le SDK Intel® FPGA pour OpenCL(2). Intel suppose que vous êtes un concepteur FPGA expérimenté qui développe des plates-formes personnalisées contenant des systèmes de mémoire hétérogènes.
Avant de créer les systèmes de mémoire hétérogènes, familiarisez-vous avec les documents SDK Intel FPGA pour OpenCL spécifiés ci-dessous.
Informations connexes

  • Guide de programmation Intel FPGA SDK pour OpenCL
  • Guide des meilleures pratiques du SDK Intel FPGA pour OpenCL
  • Kit de développement Intel FPGA SDK pour OpenCL Arria 10 GX Guide de portage de la plate-forme de référence du kit de développement FPGA

1.1. Vérification de la fonctionnalité de la carte FPGA et des interfaces EMIF

Vérifiez chaque interface mémoire indépendamment, puis instanciez votre plate-forme personnalisée à l'aide de la mémoire globale.

  1. Vérifiez chaque interface mémoire à l'aide de conceptions matérielles capables de tester la vitesse et la stabilité de chaque interface.
  2. Instanciez votre plate-forme personnalisée à l'aide de la mémoire globale.
    1. Par exempleample, si vous avez trois interfaces DDR, l'une d'elles doit être mappée en tant que mémoire hétérogène. Dans ce cas, vérifiez la fonctionnalité de la pile OpenCL avec chaque interface DDR indépendamment.
      OpenCL et le logo OpenCL sont des marques commerciales d'Apple Inc. utilisées avec l'autorisation de Khronos Group™.
    2.  Le SDK Intel FPGA pour OpenCL est basé sur une spécification Khronos publiée et a réussi le processus de test de conformité Khronos. L'état de conformité actuel peut être trouvé à www.khronos.org/conformance.

Société intel. Tous les droits sont réservés. Intel, le logo Intel et les autres marques Intel sont des marques commerciales d'Intel Corporation ou de ses filiales. Intel garantit les performances de ses produits FPGA et semi-conducteurs selon les spécifications actuelles conformément à la garantie standard d'Intel, mais se réserve le droit d'apporter des modifications à tout produit et service à tout moment et sans préavis. Intel n'assume aucune responsabilité découlant de l'application ou de l'utilisation de toute information, produit ou service décrit dans le présent document, sauf accord exprès et écrit d'Intel. Il est conseillé aux clients d'Intel d'obtenir la dernière version des spécifications de l'appareil avant de se fier aux informations publiées et avant de passer des commandes de produits ou de services. * D'autres noms et marques peuvent être revendiqués comme la propriété d'autrui.
Enregistré ISO 9001: 2015
Sinon, si vous disposez de deux interfaces DDR et d'une interface QDR (Quad Data Rate), vérifiez la fonctionnalité de la pile OpenCL des deux interfaces DDR et de l'interface QDR indépendamment.
Intel vous recommande d'utiliser des conceptions exclusives PCI Express® – (PCIe® -) ou EMIF pour tester vos interfaces mémoire. Après avoir vérifié que chaque interface mémoire est fonctionnelle et que votre conception OpenCL fonctionne avec un sous-ensemble des interfaces mémoire, procédez
pour créer un système de mémoire hétérogène entièrement fonctionnel. 
1.2. Modification du fichier board_spec.xml File
Modifier le board_spec.xml file pour spécifier les types de systèmes de mémoire hétérogènes disponibles pour les noyaux OpenCL.
Lors de la compilation du noyau, le SDK Intel FPGA pour le compilateur hors ligne OpenCL attribue des arguments de noyau à une mémoire en fonction de l'argument d'emplacement de tampon que vous spécifiez.
1. Accédez au fichier board_spec.xml file dans le répertoire matériel de votre plate-forme personnalisée.
2. Ouvrez le board_spec.xml file dans un éditeur de texte et modifiez le XML en conséquence.
Par exempleample, si votre système matériel a deux mémoires DDR comme mémoire globale par défaut et deux banques QDR que vous modélisez comme mémoire hétérogène, modifiez les sections mémoire du fichier board_spec.xml file ressembler à ce qui suit :
















1.3. Configuration de plusieurs diviseurs de mémoire dans Qsys
Actuellement, le diviseur de banque de mémoire OpenCL dans la conception Qsys ne prend pas en charge le nombre de banques de mémoire sans puissance de 2, ce qui n'est pas une limitation pour les configurations typiques. Cependant, il existe des scénarios dans lesquels un nombre d'interfaces mémoire non puissance de 2 est nécessaire. Pour prendre en charge un nombre d'interfaces mémoire sans puissance de 2, utilisez plusieurs diviseurs de banque de mémoire OpenCL pour créer des systèmes de mémoire hétérogènes avec un nombre de banques de mémoire sans puissance de 2. Vous devez créer plusieurs diviseurs de banque de mémoire OpenCL lorsque vous disposez d'un véritable système de mémoire hétérogène. Considérez un système avec une interface mémoire DDR et une interface mémoire QDR. Étant donné que les deux banques ont des topologies de mémoire différentes, vous ne pouvez pas les combiner sous une seule mémoire globale.
Figure 1. Schéma fonctionnel d'un système de mémoire hétérogène à trois banques
Ce système de mémoire hétérogène contient deux interfaces mémoire DDR et une interface mémoire QDR.intel Création de systèmes de mémoire hétérogènes dans le SDK FPGA pour les plates-formes personnalisées OpenCL - fig 1Si vous utilisez la version 16.0, 16.0.1 ou 16.0.2 du logiciel Intel Quartus® Prime et le SDK Altera pour OpenCL, le diviseur de banque de mémoire OpenCL gère de manière incorrecte les rafales de mémoire au-delà des limites d'adresse. Pour contourner ce problème connu, ajoutez un pont de pipeline avec une taille de rafale de 1 et connectez son maître Avalon ® Memory-Mapped (Avalon-MM) au port esclave du diviseur de banque de mémoire OpenCL.
Note:
Ce problème connu est résolu dans le logiciel Intel Quartus Prime et le SDK Intel FPGA pour OpenCL version 16.1.
Figure 2. Schéma fonctionnel d'un système de mémoire hétérogène à trois banques avec un pont de pipeline intel Création de systèmes de mémoire hétérogènes dans le SDK FPGA pour les plates-formes personnalisées OpenCL - fig 21.4. Modification du programme Boardtest et du code hôte pour votre solution de mémoire hétérogène
Utilisez le noyau boardtest.cl fourni avec le kit d'outils Intel FPGA SDK for OpenCL Custom Platform pour tester les fonctionnalités et les performances de votre plateforme personnalisée.
Le programme boardtest est un noyau OpenCL qui vous permet de tester la bande passante hôte-périphérique, la bande passante mémoire et les fonctionnalités générales de votre plate-forme personnalisée.

  1. Naviguez jusqu'au répertoire /board/custom_platform_toolkit/tests/boardtest.
  2. Ouvrez le boardtest.cl file dans un éditeur de texte et affectez un emplacement de tampon à chaque argument de mémoire globale.
    Par exempleample:
    __noyau vide
    mem_stream (__global__attribute__((buffer_location("DDR"))) uint *src, __global __attribute__((buffer_location("QDR"))) uint *dst, uint arg, uint arg2)
    Ici, uint *src est affecté à la mémoire DDR et uint *dst est affecté à la mémoire QDR. Le board_spec.xml file spécifie les caractéristiques des deux systèmes de mémoire.
  3. Pour tirer parti de votre solution de mémoire hétérogène dans votre système OpenCL, modifiez votre code hôte en ajoutant l'indicateur CL_MEM_HETEROGENEOUS_INTELFPGA à votre appel clCreateBuffer.
    Par exempleample:
    ddatain = clCreateBuffer(contexte, CL_MEM_READ_WRITE | memflags
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(non signé) * vectorSize, NULL, &status);
    Intel vous recommande vivement de définir l'emplacement du tampon en tant qu'argument du noyau avant d'écrire le tampon. Lorsque vous utilisez une seule mémoire globale, vous pouvez écrire les tampons avant ou après leur affectation à un argument du noyau. Dans les systèmes de mémoire hétérogènes, l'hôte définit l'emplacement du tampon avant d'écrire le tampon. En d'autres termes, l'hôte appellera la fonction clSetKernelArgument avant d'appeler la fonction clEnqueueWriteBuffer.
    Dans votre code hôte, appelez les appels clCreateBuffer, clSetKernelArg et clEnqueueWriteBuffer dans l'ordre suivant :
    ddatain = clCreateBuffer(contexte, CL_MEM_READ_WRITE | memflags |
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(non signé) * vectorSize, NULL, &status);
    … status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
    … status = clEnqueueWriteBuffer(file d'attente, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
    ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file présente un ordre similaire de ces appels de fonction.
  4.  Après avoir modifié le boardtest.cl file et le code de l'hôte, compilez le code de l'hôte et du noyau et vérifiez leur fonctionnalité.
    Lors de la compilation de votre code noyau, vous devez désactiver l'entrelacement en rafale de tous les systèmes de mémoire en incluant l'option –no-interleaving option dans la commande aoc.

Informations connexes
Désactivation de Burst-Interleaving de la mémoire globale (–no-interleaving )

1.5. Vérification de la fonctionnalité de votre mémoire hétérogène Système
Pour vous assurer que le système de mémoire hétérogène fonctionne correctement, désactivez l'indicateur CL_CONTEXT_COMPILER_MODE_INTELFPGA dans votre code hôte.
Dans les systèmes OpenCL à mémoire homogène, vous devez choisir de définir l'indicateur CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 dans votre code hôte pour désactiver la lecture du .aocx file et la reprogrammation du FPGA. La définition de l'indicateur CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 est utile lors de l'instanciation de votre carte pour vérifier la fonctionnalité de votre plate-forme personnalisée sans concevoir le plan d'étage et spécifier les régions LogicLock™.
Avec les systèmes de mémoire hétérogènes, l'environnement d'exécution doit lire les emplacements des tampons de chaque tampon, décrits dans le .aocx file, pour vérifier la fonctionnalité des systèmes de mémoire. Cependant, vous souhaiterez peut-être vérifier la fonctionnalité de votre plate-forme personnalisée sans implémenter les fonctionnalités finales de la conception de la carte, telles que la conception du plan d'étage et la spécification des régions LogicLock.

  1. Vérifiez que l'indicateur CL_CONTEXT_COMPILER_MODE_INTELFPGA est désactivé dans votre code hôte.
  2. Accédez au tableau/ /source/host/mmd répertoire de votre plate-forme personnalisée.
  3. Ouvrez le périphérique mappé en mémoire acl_pcie_device.cpp (MMD) file dans un éditeur de texte.
  4.  Modifier la fonction de reprogrammation dans acl_pcie_device.cpp file en ajoutant un retour 0 ; ligne, comme indiqué ci-dessous :
    int ACL_PCIE_DEVICE :: reprogram(void *data, size_t data_size)
    {
    retourner 0;
    // assume l'échec
    int reprogram_failed = 1 ;
    // suppose qu'il n'y a pas de rbf ou de hachage dans fpga.bin
    int rbf_or_hash_not_provided = 1 ;
    // suppose que les hachages de révision de base et d'importation ne correspondent pas
    int hash_mismatch = 1 ;

    }
  5. Recompiler acl_pcie_device.cpp file.
  6. Vérifiez que l'indicateur CL_CONTEXT_COMPILER_MODE_INTELFPGA reste désactivé.
    Attention: Après avoir ajouté return 0; à la fonction de reprogrammation et recompiler le MMD file, l'environnement d'exécution lira le .aocx file et attribuer les emplacements de tampon mais ne reprogrammera pas le FPGA. Vous devez faire correspondre manuellement l'image FPGA avec le .aocx file. Pour inverser ce comportement, supprimez return 0 ; à partir de la fonction de reprogrammation et recompilez le MMD file.

1.6. Historique des révisions du document

Date Version Changements
17 décembre 2017.12.01 • Renommé CL_MEM_HETEROGENEOUS_ALTERA en CL_MEM_HETEROGENEOUS_INTELFPGA.
16 décembre 2016.12.13 • Renommé CL_CONTEXT_COMPILER_MODE_ALTERA en CL_CONTEXT_COMPILER_MODE_INTELFPGA.

intel-logoCréation de systèmes de mémoire hétérogènes dans le SDK Intel® FPGA pour OpenCL
Plateformes personnalisées
intel Création de systèmes de mémoire hétérogènes dans le SDK FPGA pour les plates-formes personnalisées OpenCL - icône 1 Envoyer des commentaires
Intel Création de systèmes de mémoire hétérogènes dans le SDK FPGA pour les plates-formes personnalisées OpenCL - icône Version en ligne
intel Création de systèmes de mémoire hétérogènes dans le SDK FPGA pour les plates-formes personnalisées OpenCL - icône 1 Envoyer des commentaires
ID: 683654
Version: 2016.12.13

Documents / Ressources

intel Création de systèmes de mémoire hétérogènes dans le SDK FPGA pour les plates-formes personnalisées OpenCL [pdf] Instructions
Création de systèmes de mémoire hétérogènes dans le SDK FPGA pour les plates-formes personnalisées OpenCL, Création de systèmes de mémoire hétérogènes, SDK FPGA pour les plates-formes personnalisées OpenCL

Références

Laisser un commentaire

Votre adresse email ne sera pas publiée. Les champs obligatoires sont marqués *