J'ai deux programmes écrits par moi à partir de zéro, l'un est une multiplication matricielle-matricielle. Lorsque j'exécutais les deux programmes avec des cartes GPU, et que je définissais la taille globale à 1024, je m'attendais à ce que le code du noyau s'exécute 1024 fois, et il était correct, il s'exécutait le même nombre de fois que la taille globale n'a pas d'importance pour coder les résultats et pour produire. Le même code que j'ai essayé d'exécuter avec le CPU, et j'ai été choqué quand j'ai vu que la fonction du noyau n'exécutait pas le même nombre de fois que la taille globale était définie. Voici l'exemple de integral: taille globale = 2048, taille locale = 1, Je m'attends à 2048 exécutions de la fonction du noyau, et oui, c'est 2048, mais quand nous avons la taille globale = 2048 et la taille locale = 16 alors il s'exécute 256 fois ... Est-ce normal? Pourquoi travailler avec CPU est-il différent dans openCl qu'avec GPU? Je pensais que ce n'est pas grave pour l'utilisateur quel appareil nous utilisons, le même code devrait fonctionner de la même manière sur différents appareils. Est-ce que je me trompe?OpenCL les mêmes algorithmes pour GPU et CPU mais OpenCl fonctionne différemment pour ces deux périphériques
Merci d'avance pour l'aide!
Nous avons besoin d'un [exemple minimal, compilable, vérifiable] (http://stackoverflow.com/help/mcve) du problème. En général, le pilote est censé s'assurer que la grille entière est exécutée, c'est-à-dire la taille de travail locale fois que les threads de taille globale de travail s'exécutent globalement. – einpoklum
Il doit y avoir une mauvaise interception de l'ID de thread global et de l'ID de groupe et de l'ID de thread local. Comment vérifiez-vous le nombre d'exécutions? –
@huseyintugrulbuyukisik Je viens d'ajouter simplement + = 1 à la variable globale dans le code du noyau pour voir combien de fois le noyau a été exécuté – Gzyniu