Le lancement simultané de Plusieurs Noyaux à l'aide de CUDA pour un GPU
Est-il possible de lancer deux noyaux qui n'tâches indépendantes, simultanément. Par exemple, si j'ai ce code Cuda
//host and device initialization
.......
.......
//launch kernel1
myMethod1 <<<.... >>> (params);
//launch kernel2
myMethod2 <<<.....>>> (params);
En supposant que ces noyaux sont indépendants, est-il de la facilité à les lancer en même temps l'allocation de quelques grilles/blocs pour chaque. Ne CUDA/OpenCL ont cette disposition.
- En simultané, entendez-vous leur exécution en cours de synchronisation ou tout simplement qui se chevauchent?
Vous devez vous connecter pour publier un commentaire.
Seuls les appareils avec CUDA de calcul de la capacité de 2.0 et mieux (c'est à dire de Fermi) peut prendre en charge plusieurs simultanée de noyau d'exécutions. Voir la section 3.2.6.3 les de le CUDA 3.0 guide de programmation, qui stipule:
Vous aurez besoin de SM 2.0 ou supérieur simultanées dans les noyaux.
Pour obtenir l'exécution en simultané, vous devez indiquer manuellement qu'il n'y a pas de dépendance entre les deux noyaux. C'est parce que le compilateur ne peut pas déterminer qu'un noyau de ne pas modifier les données utilisées dans l'autre, ce pourrait être par la lecture et l'écriture sur le même tampon qui semble assez simple, mais en réalité c'est beaucoup plus difficile à détecter car il peut y avoir des pointeurs à l'intérieur des structures de données et ainsi de suite.
Pour exprimer l'indépendance, vous devez lancer les amandes dans différents cours d'eau. Le quatrième paramètre de la triple-chevron syntaxe spécifie le flux, consultez le Guide de Programmation ou le SDK concurrentKernels de l'échantillon.
CUDA compatibilité 2.1 = jusqu'à 16 Simultanées Noyaux