Je rencontre un comportement étrange lors de la mesure du temps d'exécution d'un noyau OpenCL. Le noyau attend trois tampons en entrée. Je crée ces tampons dans le code hôte et les initialise en utilisant CL_MEM_COPY_HOST_PTR. Je mesure ensuite le temps d'exécution du noyau via les événements OpenCL. Cependant, lorsque j'omets CL_MEM_COPY_HOST_PTR, le temps d'exécution du noyau tombe à un tiers. Jusqu'à présent, j'ai découvert que ce problème avait quelque chose à voir avec les optimisations effectuées par le compilateur OpenCL. Il semble que le compilateur remarque que les tampons ne sont pas initialisés et optimise le noyau en conséquence. Si je fournis l'indicateur "-cl-opt-disable", il n'y a pas de différence de temps d'exécution entre l'initialisation et l'initialisation des tampons. Mais désactiver toutes les optimisations n'est évidemment pas ce que j'ai l'intention de faire.Le temps d'exécution du noyau diminue lorsque vous n'initialisez pas les tampons
Existe-t-il un moyen d'empêcher le compilateur de remarquer que les tampons n'ont pas été initialisés sans désactiver toutes les optimisations? Ecrire juste un octet dans la mémoire tampon n'a malheureusement pas suffi.
Merci d'avance!
Utilisez-vous clenqueuewrite ou clenqueuemap? Peut-être que vous faites une copie supplémentaire avec ceux-ci? –
Donc, vous essayez de microbenchmark quelque chose, et vous voulez que le compilateur ne pas optimiser le noyau différemment? Donc, vous pouvez le tester sans le goulot d'étranglement potentiel de la copie de la mémoire de l'hôte vers le GPU? Êtes-vous sûr que ce n'est pas déjà ce qui se passe? c'est-à-dire peut-être que c'est plus rapide parce que la mémoire reste juste cachée sur le GPU? (Cela n'a peut-être pas de sens, je ne connais pas vraiment OpenCL, surtout l'optimisation et le fonctionnement du matériel en général). –