2016-05-14 2 views
0

Dans OpenCL, est-il possible qu'un système composé de plusieurs GPU divise implicitement le travail sans que le programmeur divise explicitement la charge de travail? Par exemple, disons que j'ai un GPU composé d'un GPU de base de 1 SM 192 et d'exécuter une multiplication matricielle, qui fonctionne normalement. Maintenant, j'ajoute un autre même GPU, et l'OpenCL utilise à la fois le GPU pour calculer la multiplication de la matrice sur son plutôt que le programmeur divisant la charge de travail à chaque GPU.Fonctionnement implicite de Multi GPU

Répondre

1

Je ne pense pas que OpenCL puisse le faire automatiquement (au moins dans la version 1.2) mais il y a des wrappers OpenCL qui peuvent gérer automatiquement plusieurs périphériques de calcul. Je n'ai pas utilisé OpenCL CodeBench, mais ils prétendent qu'ils ont l'équilibrage de la charge de plusieurs périphériques de calcul.

+0

Donc, dans ce que seront les deux cartes GPU chacune avec 1 SM, le système identifie un total de 2 SM présents dans le système? – pradyot

0

Vous pouvez unifier uniquement les mémoires d'appareils et ne le faire qu'avec la version 2.0 de opencl et plus.

Les noyaux sont mis en file d'attente dans les files d'attente de commandes et sont créés avec (et liés à) un seul périphérique. Donc, ils ne peuvent fonctionner que sur un seul appareil. Mais plusieurs files d'attente de commandes peuvent servir dans un contexte commun qui peut tirer parti de la synchronisation de tampon implicite.

Le fractionnement d'un travail ne peut pas être fait implicitement car on ne peut pas savoir à l'exécution quel type de travail accède à quelle adresse mémoire.

Une fois que vous écrivez un wrapper mono-périphérique en cours d'exécution, l'ajout d'une prise en charge multigpu n'est pas vraiment compliqué.