Question

Je joue avec la mise en œuvre ATI OpenCL dans leur version bêta 2.0 flux. Le OpenCL dans la version bêta actuelle utilise uniquement la CPU pour l'instant, la prochaine version est censée soutenir les noyaux GPU. J'ai téléchargé flux parce que j'ai un GPU ATI dans ma machine de travail.

Je vous écris un logiciel qui bénéficierait grandement des gains en utilisant le GPU. Toutefois, ce logiciel fonctionne sur les machines des clients, je n'ai pas le luxe (comme de nombreux environnements informatiques scientifiques ont) de choisir le matériel exact de développer pour et optimiser pour cela. Donc, ma question est, si je distribuerai la mise en œuvre ATI OpenCL avec ma demande, est-ce que cela signifie qu'il ne sera jamais en mesure d'utiliser par exemple NVidia cartes vidéo? Et si j'utilise le SDK OpenCL NVidia, qu'il ne sera jamais fonctionner de manière optimale sur les puces AMD (ATI étant donné le lien / AMD)?

En d'autres termes, qui est en fin de compte responsable de fournir la mise en œuvre OpenCL? Est-ce que les utilisateurs pourront par exemple installer un « pilote » OpenCL pour leur carte vidéo NVidia, à côté d'un qui leur donne « conducteur » des performances optimales sur leur CPU AMD?

En aparté, yat il des forums de soutien bons / actifs pour OpenCL en dehors des panneaux de message Khronos, ou est-ce l'endroit où aller? Je l'ai vu que ATI a un conseil d'administration et NVidia a sans doute eux-mêmes, d'où vient la communauté des utilisateurs / développeur OpenCL traîner? At-il déjà consolidé en un seul endroit?

Était-ce utile?

La solution

En fin de compte, OpenCL fonctionnera de la même manière que OpenGL. Autrement dit, les utilisateurs installer les pilotes actuels de leurs fournisseurs de matériel (ATI, NVIDIA, Intel). Vous en tant que développeur simplement un lien à une bibliothèque OpenCL lors de la construction de vos applications. Lorsque les utilisateurs exécutent votre application, l'application va rediriger vers les bibliothèques spécifiques des fournisseurs appropriés fournis par les pilotes.

Ceci est la façon dont il fonctionne, mais il ne fonctionne pas encore de cette façon.

Une autre chose importante à garder à l'esprit est que vous aurez sans doute encore de fournir des chemins fournisseurs de code spécifiques code en cours d'exécution sur la CPU en utilisant OpenCL utilisera probablement les paramètres noyau différents optimisés que le code en cours d'exécution sur le GPU. La même chose est probablement vrai pour les différences entre les fournisseurs de GPU.

Autres conseils

Je sais que c'est une vieille question avec de vieilles réponses ci-dessus. Je pensais le mettre à jour avec une réponse à la date.

Oui, une mise en œuvre des noyaux et le code OpenCL fonctionnera sur une grande variété d'appareils aujourd'hui avec la plate-forme écrite correctement et le code de l'énumération appareil. Il est assez facile d'écrire du code correct de l'énumération de la plate-forme et le dispositif, la partie la plus délicate consiste à sélectionner quelle plate-forme ou un dispositif. Vous devriez probablement présenter une option de configuration dans votre application où l'utilisateur peut sélectionner l'un, ou d'exécuter un microbenchmark contre chacun et sélectionner dynamiquement une seule et mettre en cache le résultat du banc.

Les gens peuvent et auront plus d'une plate-forme. Par exemple, mon système a GTX 580 SLI, il dispose de deux appareils dans la plate-forme NVidia. Il a également le SDK Intel OpenCL, donc mon Corei7 990x Extreme CPU est également livré comme un périphérique dans la plate-forme Intel.

Oui binaire développé et construit en utilisant, par exemple, le SDK OpenCL NVidia, travaillera sur ATI ou Intel OpenCL, et vice versa. Pas besoin de se soucier de ça.

De toute évidence, un utilisateur final pourrait ne pas avoir OpenCL que ce soit, vous devrez peut-être retarder la charge ou LoadLibrary opencl.dll et liens dynamiques.

Je suggère stronly tester votre code contre le SDK Intel OpenCL, sur les GPU NVidia, ET sur les GPU AMD. Vous trouverez probablement des bugs qui causent des problèmes sur une plate-forme, mais fonctionne très bien sur les autres. Vous trouverez sans doute aussi que le code tout à fait bien ne mystérieusement donne pas de résultats corrects sur l'une de ces plates-formes, à cause de bogues du pilote.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top