web-dev-qa-db-fra.com

Programmation GPU, CUDA ou OpenCL?

Je suis un débutant à la programmation GPU. J'ai un ordinateur portable avec la carte NVIDIA GeForce GT 640. Je suis confronté à 2 dilemmes, les suggestions sont les bienvenues.

  1. Si je choisis CUDA - Ubuntu ou Windows Clairement, CUDA convient mieux à Windows, mais il peut s'agir d'un problème grave à installer sur Ubuntu. J'ai vu des articles de blog qui prétendent avoir installé CUDA 5 sur buntu 11.1 et buntu 12.04 . Cependant, je n'ai pas réussi à les faire travailler. En outre, manuels CUDA standard préfèrent travailler dans le domaine Windows et sont plus ou moins silencieux en ce qui concerne l’installation et le fonctionnement d’Unix/Ubuntu.

  2. CUDA ou OpenCL - C'est probablement plus compliqué que ma première question! J'ai surtout rencontré des projets GPGPU utilisant CUDA/Nvidia mais OpenCL est probablement la meilleure option en open source et l'installation sous Ubuntu ne posera probablement pas problème, bien que certaines suggestions ici soient des plus utiles. Suis-je en train de sacrifier des fonctionnalités si je choisis OpenCL et PAS CUDA?

Une aide ou des suggestions?

72
Arkapravo
  1. Si vous utilisez OpenCL, vous pouvez facilement l'utiliser à la fois sous Windows et Linux, car disposer de pilotes d'affichage suffit pour exécuter des programmes OpenCL. Pour la programmation, vous devez simplement installer le SDK. CUDA a plus d'exigences sur des versions spécifiques de GCC, etc. Mais l'installation n'est pas beaucoup plus difficile sur Linux également.

  2. Sous Linux, CUDA a des exigences étranges telles que l’utilisation de GCC 4.6 ou 4.7. Si vous utilisez une version différente de GCC, vous ne pourrez plus compiler votre programme. Si vous utilisez OpenCL, vous pouvez utiliser n’importe quel compilateur car il vous suffirait de vous connecter à la bibliothèque OpenCL commune. Donc, OpenCL est plus facile à installer, utiliser et compiler. Une fois que vous compilez un programme OpenCL, celui-ci peut être exécuté sur n’importe quel matériel (à condition qu’il soit codé), même s’il a été compilé à l’aide du kit de développement OpenCL SDK d’une autre marque.

Vous pouvez écrire des programmes OpenCL qui fonctionneront sur le matériel Nvidia, AMD et Intel, sur les GPU, les processeurs et les accélérateurs. Encore plus, Altera travaille sur le support d'OpenCL sur les FPGA! Si vous utilisez CUDA, vous devrez utiliser uniquement les GPU Nvidia et réécrire votre code à nouveau en OpenCL ou dans un autre langage pour d’autres plateformes. Une limitation sérieuse de l’utilisation de CUDA et une perte de temps considérable à long terme.

Je vois que quelqu'un a posté d'anciennes références entre CUDA et OpenCL, mais elles sont anciennes! Lorsque ces documents ont été publiés, seul AMD a correctement pris en charge OpenCL. Depuis 2013, OpenCL est pris en charge par ARM, Altera, Intel, etc. et est devenu un standard de l'industrie.

Le seul inconvénient est que, OpenCL étant très flexible, vous disposez de plus d'options et de moyens pour coder les allocations de mémoire, les transferts, etc. dans votre programme. Par conséquent, cela peut sembler plus compliqué peut-être.

92
Evren Yurtesen

Je pense qu’il n’est pas très difficile de configurer cuda environment sur Ubuntu, vous pouvez l’essayer.

En tant qu'étudiant en architecture informatique, je pense que vous devez apprendre à la fois OpenCL et CUDA. Et vous devriez tout d'abord apprendre cuda car CUDA expose davantage de matériel et d'informations d'exécution. La connaissance du matériel est très importante lorsque vous souhaitez optimiser vos codes GPU.

8
Xiaolong Xie