J'ai un flux CUDA que quelqu'un m'a remis - une valeur cudaStream_t
. Le CUDA Runtime API ne semble pas indiquer comment je peux obtenir l'index de l'appareil auquel ce flux est associé.Les flux CUDA sont-ils associés à un périphérique? Et comment puis-je obtenir l'appareil d'un flux?
Maintenant, je sais que cudaStream_t
est juste un pointeur vers une structure de flux au niveau du pilote, mais je suis hésitant à plonger dans le pilote trop. Existe-t-il une manière idiomatique de le faire? Ou une bonne raison de ne pas vouloir le faire?
Modifier: Un autre aspect de cette question est de savoir si le flux est réellement associé à un périphérique de telle sorte que le pilote CUDA peut lui-même déterminer l'identité de ce périphérique en fonction de la structure pointée.
Je ne suis pas un expert CUDA et je n'ai aucune expérience pratique avec la programmation multi-GPU. Mais je m'attendrais à ce que chaque flux CUDA soit spécifique à un contexte CUDA particulier. Je m'attendrais également à ce que chaque GPU ait son propre contexte CUDA. Cela signifierait qu'un handle de flux CUDA n'est pas unique sur tous les périphériques, seulement unique pour chaque périphérique donné. Il se peut donc que vous deviez transmettre une paire {numéro de périphérique, gestionnaire de flux} dans l'application. – njuffa
@njuffa: Si un flux CUDA est spécifique au contexte, et si un contexte est spécifique au périphérique, cela ne signifie-t-il pas qu'un flux CUDA gère _is_ unique sur tous les périphériques? Peut-être que je ne vous suis pas ... – einpoklum
Un descripteur de flux unique sur tous les périphériques implique un "espace de nommage" global pour les descripteurs de flux. Je ne pense pas que cela existe. Donc, si vous supposez deux GPU, chacun avec son propre contexte. Le premier flux créé dans chaque contexte peut obtenir la valeur du handle 1. Quelqu'un passe un handle de flux avec la valeur 1 à votre code. À quel appareil appartient-il? Nous ne pouvons pas le dire. – njuffa