2011-07-29 3 views
1

J'ai quelques noyaux CUDA que je veux exécuter dans des pthreads individuels.Passage du contexte cuda à des pthreads de travail

J'ai fondamentalement besoin que chaque pthread exécute, disons 3 noyaux cuda, et qu'ils soient exécutés séquentiellement. Je pensais que j'essaierais de faire passer chaque pthread une référence à un flux, et donc chacun de ces 3 noyaux cuda s'exécuterait tous séquentiellement, dans le même flux.

Je pourrais obtenir ceci fonctionnant avec un contexte différent pour pthread, qui exécuterait alors les noyaux comme normal, mais cela semble prendre beaucoup de frais généraux.

Comment faire en sorte que chaque pthread fonctionne dans le même contexte, en même temps que les autres pthreads?

Merci

Répondre

2

Avant CUDA 4.0, le moyen d'accéder à un contexte donné de différents threads CPU était d'utiliser cuCtxPopCurrent()/cuCtxPushCurrent(). Un contexte ne peut être actuel que pour un thread CPU à la fois.

Dans CUDA 4.0, vous pouvez appeler cudaSetDevice() dans chaque pthread et il peut être actif pour plus d'un thread à la fois. Les invocations du noyau seront sérialisées par le contexte dans l'ordre reçu, mais vous devrez peut-être effectuer une synchronisation de thread CPU pour vous assurer que le travail est soumis dans l'ordre souhaité.

Questions connexes