Le compilateur Intel® FPGA SDK pour OpenCL™ garantit que les déclarations d’un noyau NDRange sont exécutées par threads par ordre d’identifiants thread. Pour s’assurer que la garantie est respectée dans les programmes qui contiennent un flux de contrôle dépendant du thread, le compilateur insère une barrière de commande à nouveau au point de connexion des chemins de contrôle-flux dépendants du thread. Un défaut dans la configuration de ces barrières fait que le calcul se bloque à la barrière sans possibilité de progression à l’avenir.
Les opérations de distribution peuvent également provoquer ce décrochage.
Vous trouverez ci-dessous un exemple de « construction de flux de contrôle dépendante du thread » :
Obtenir un ID de thread global
id int = get_global_id(0) ;
Assurez-vous que nous ne sortons pas des limites
si (id < n)
c[id] = a[id] b[id];
Ici, la déclaration s’il s’agit d’une construction de contrôle-flux qui dépend du thread, c’est-à-dire ce qu’elle fait dépend du thread qui l’exécute.
Réécrit le noyau NDRange pour ne contenir aucune opération de canal ou constructions de flux de contrôle dépendant du thread.
Ce problème devrait être résolu dans une version ultérieure du Intel® FPGA SDK pour le logiciel OpenCL.