2011-05-19 5 views
4

Je souhaite passer un contexte Cuda entre deux processus Linux indépendants (en utilisant les files d'attente de messages POSIX, que j'ai déjà configurées).Est-il possible de partager un contexte Cuda entre des applications?

En utilisant cuCtxPopCurrent() et cuCtxPushCurrent(), je peux obtenir le pointeur de contexte, mais ce pointeur est référencé dans la mémoire du processus dans lequel j'appelle la fonction, et le passer entre les processus est sans signification.

Je suis à la recherche d'autres solutions. Mes idées à ce jour sont:

  1. Essayez de copier en profondeur la structure CUcontext, puis passez la copie.
  2. Voyez si je peux trouver une solution de mémoire partagée où tous mes pointeurs Cuda sont placés là pour que les deux processus puissent y accéder.
  3. Fusionner les processus en un seul programme.
  4. Il est possible qu'il y ait un meilleur partage de contexte dans Cuda 4.0, sur lequel je pourrais passer.

Je ne suis pas sûr que l'option (1) soit possible, ni si (2) est disponible ou possible. (3) n'est pas vraiment une option si je veux rendre les choses génériques (c'est dans un shim de piratage). (4) Je vais regarder Cuda 4.0, mais je ne suis pas sûr que ça marchera là non plus.

Merci!

Répondre

3

En un mot, non. Les contextes sont implicitement liés au thread et à l'application qui les a créés. Il n'y a pas de portabilité entre des applications séparées. C'est à peu près la même chose avec OpenGL et les différentes versions de Direct3D - le partage de la mémoire entre les applications n'est pas supporté. CUDA 4 sécurise le thread d'API, de sorte qu'un seul thread hôte peut contenir simultanément plus de 1 contexte (c'est-à-dire plus de 1 GPU) et utiliser l'API canonical device selection pour choisir le GPU avec lequel il travaille. Cela ne va pas aider ici, si je comprends bien votre question/application correctement.

+0

J'ai compris - merci! Je vais devoir trouver comment fusionner mes applications, ou avoir un soin des appels Cuda. –

Questions connexes