J'ai écrit un plugin cuda (dynamic library), et j'ai un programme écrit en C qui utilise dlopen() pour charger ce plugin. J'utilise dlsym() pour obtenir les fonctions de ce plugin. Pour mon application, il est très important que chaque fois que vous chargez le plugin, le programme obtienne un nouveau handle avec l'appel dlopen() (le fichier de la bibliothèque peut être modifié par la suite). Par conséquent, après l'utilisation des fonctions de mon plugin, j'appelle le dlclose(). Les invocations dlopen() - dlsym() - dlclose() ont lieu pendant l'exécution de mon programme (dans la boucle).CUDA plugin dlopen
Si je travaille sur l'ordinateur avec le pilote NVIDIA 256.35 (CUDA 3.0 ou 3.1), j'ai une fuite de mémoire (j'utilise dans mon plugin cudaMemGetInfo() pour le diagnostic). Si je travaille sur l'ordinateur avec le pilote NVIDIA 195.36.15 (CUDA 3.0) J'ai une erreur après un certain temps de l'exécution du programme: "NVIDIA: Impossible d'ouvrir le fichier périphérique/dev/nvidia0 (Trop de fichiers ouverts)." Si je n'utilise pas l'invocation dlclose(), le programme fonctionne correctement, mais dans ce cas je ne peux pas remplacer le plugin sur un nouveau lors de l'exécution de mon programme.
Quelqu'un at-il rencontré ce problème? Merci.