Programmation GPU, CUDA ou OpenCL?

Je suis un débutant dans 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 vais pour CUDA – Ubuntu ou Windows, clairement CUDA est plus adapté à Windows alors qu’il peut être un problème grave à installer sur Ubuntu. J’ai vu des articles de blog prétendant avoir installé CUDA 5 sur Ubuntu 11.10 et Ubuntu 12.04 . Cependant, je n’ai pas pu les amener à travailler. En outre, les 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 – Maintenant, 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 prochaine meilleure option en open source et l’installation dans Ubuntu ne sera probablement pas un problème, même si certaines suggestions seront très utiles. Est-ce que je sacrifie une fonctionnalité si je vais pour OpenCL et NOT CUDA?

Toute aide ou suggestion?

  1. Si vous utilisez OpenCL, vous pouvez facilement l’utiliser à la fois sous Windows et Linux, car il est suffisant d’avoir des pilotes d’affichage pour exécuter les programmes OpenCL. Pour la programmation, vous devrez simplement installer le SDK. CUDA a plus d’exigences sur les versions spécifiques de GCC, etc. Mais ce n’est pas beaucoup plus difficile à installer sur Linux également.

  2. Dans 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 comstackr votre programme. Si vous utilisez OpenCL, vous pouvez utiliser n’importe quel compilateur car il vous suffirait de créer un lien avec la bibliothèque OpenCL commune. Ainsi, OpenCL est plus facile à configurer, à utiliser et à comstackr. Une fois que vous comstackz un programme OpenCL, il peut être exécuté sur n’importe quel matériel (à condition qu’il soit codé pour le faire) même s’il a été compilé à l’aide d’OpenCL SDK d’une autre marque.

Vous pouvez écrire des programmes OpenCL qui fonctionneront sur les matériels Nvidia, AMD et Intel, sur les GPU, les CPU et les accélérateurs. Plus encore, 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 dans OpenCL ou un autre langage pour les autres plates-formes. Une sérieuse limitation de l’utilisation de CUDA et une perte de temps importante à long terme.

Je vois que quelqu’un a publié de vieilles références entre CUDA et OpenCL, mais elles sont vieilles! Lorsque ces documents étaient sortis, seul AMD supportait correctement OpenCL. Depuis 2013, OpenCL est pris en charge par ARM, Altera, Intel, etc. et est devenu un standard de l’indussortinge.

Le seul inconvénient est qu’OpenCL est tellement flexible que vous avez plus d’options et de moyens pour coder les allocations de mémoire, les transferts, etc. dans votre programme. Par conséquent, cela peut être plus compliqué peut-être.

Je pense qu’il n’est pas très difficile de configurer l’environnement cuda 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 devez d’abord apprendre cuda car CUDA expose plus d’informations sur le matériel et le runtime, la connaissance du matériel est très importante lorsque vous souhaitez optimiser vos codes GPU.