Si votre noyau OpenCL™ ne parvient pas à générer du matériel même si les ressources estimées sont faibles, cette panne peut être due à un désencombrage excessif des boucles qui accèdent à la mémoire mondiale.
Les boucles qui accèdent à la mémoire globale ne doivent pas être étendues au-delà de celles où la lecture ou l’écriture d’une mémoire globale est plus large que l’interface mémoire du BSP. Cela entraîne des problèmes, une congestion du routage et peut entraîner une panne de compilation.
La largeur des interfaces de mémoire externe se trouve dans le fichier board_spec.xml dans le fichier OpenCL™ BSP. Voici un exemple de l’board_spec.xml du kit de développement Arria 10 GX BSP. (a10_ref)
maxburst="16 » adresse="0x00000000 » size="0x80000000 » latence="240"/>
Comme vous pouvez le voir, la largeur d’interface de la mémoire externe sur ce BSP est de 512 bits. (largeur ="512 ») Par conséquent, si une boucle accède aux entiers globaux de 32 bits, la boucle ne doit pas être défaite de plus de 16. (512 / 32 = 16)
Si le nombre de boucles d’origine n’est pas un multiple de 16 :
1. Round up the new loop count to a multiple of 16.
2. Faites que tous les mémoires sur puce de la boucle sont suffisamment grands pour prendre en charge le nouveau nombre de boucles
3. Utilisation conditionnel pour empêcher la lecture ou l’écriture lorsque le nouveau nombre de boucles dépasse le nombre de boucles d’origine