Je suis en train de mettre en œuvre un algorithme complexe dans OpenCL mais je suis confronté à un problème sur le matériel NVidia. Lorsque mon algorithme est appelé plusieurs fois dans la mémoire parallèle sur le GPU NVidia ne suffit pas et l'exécution de threads aléatoires pourraient arrêter des erreurs de MemoryAllocation (j'ai essayé d'expliquer cela sur https://devtalk.nvidia.com/default/topic/1019997/cuda-programming-and-performance/how-to-handle-cl_mem_object_allocation_failure-errors-if-amount-of-useable-memory-is-not-known-/ avant.)OpenCL: lecture de la mémoire disponible sur le matériel graphique Nvidia (extension OpenGL, Cuda Runtime?)
Ma solution actuelle est de demander la mémoire disponible sur le GPU et n'autoriser l'exécution que s'il y en a assez. Le problème est la lecture de la mémoire disponible.
J'utilise
#define GL_GPU_MEM_INFO_CURRENT_AVAILABLE_MEM_NVX 0x9049
glGetIntegerv(GL_GPU_MEM_INFO_CURRENT_AVAILABLE_MEM_NVX,
¤tlyAvailableMemoryInKb);
pour lire la mémoire pour laquelle je crée une fenêtre masquée avec un contexte OpenGL. Le problème est maintenant que lorsque le GPU NVidia n'est pas le GPU principal, je dois sélectionner la carte en utilisant l'extension d'affinité gpu: https://www.khronos.org/registry/OpenGL/extensions/NV/WGL_NV_gpu_affinity.txt mais wglGetProcAddress renvoie null. Je pense que c'est parce que je démarre avec le GPU Intel comme périphérique principal. (Le chargement d'autres extensions comme wglCreatePbufferARB n'est pas un problème.)
Y a-t-il un moyen de gérer cela et de transférer l'appel wglGetProcAddress à un autre GPU/pilote?
Merci d'avance! Meilleures salutations Michael
Ps .: J'ai également essayé d'utiliser le cuda runtime pour obtenir la mémoire disponible. Cela n'a pas fonctionné. Le pilote opencl n'était pas fiable (provoquait des interblocages après l'utilisation de certaines fonctions de cudart) et la valeur renvoyée était incorrecte.