Програмування графічного процесора, CUDA чи OpenCL? [зачинено]


74

Я новачок у програмуванні графічних процесорів. У мене є ноутбук з картою NVIDIA GeForce GT 640. Я зіткнувся з двома дилемами, пропозиції дуже вітаються.

  1. Якщо я піду на CUDA - Ubuntu або Windows Очевидно, що CUDA більше підходить для Windows, хоча це може бути серйозною проблемою для встановлення на Ubuntu. Я бачив деякі публікації в блогах, які стверджують, що встановили CUDA 5 на Ubuntu 11.10 та Ubuntu 12.04 . Однак мені не вдалося змусити їх працювати. Крім того, стандартні підручники CUDA вважають за краще працювати в домені Windows і більш-менш мовчать щодо стурбованості установкою та роботою Unix / Ubuntu.

  2. CUDA або OpenCL - Зараз це, мабуть, складніше, ніж моє перше запитання! Я переважно стикався з проектами GPGPU, що використовують CUDA / Nvidia, але OpenCL - це, мабуть, наступний найкращий варіант у відкритому коді, і встановлення в Ubuntu, ймовірно, не буде проблемою, хоча деякі пропозиції тут будуть найбільш корисними. Чи я жертвую якоюсь функціональністю, якщо піду на OpenCL, а НЕ CUDA?

Будь-яка допомога чи пропозиції?


2
Щодо вашого першого запитання, я відчуваю, що Windows зараз краще підтримується для CUDA, а не для Linux. Раніше я широко використовував CUDA під Linux, але встановлення завжди було дещо складним. Що стосується Вашого другого питання, я думаю, що Ви могли б знайти багато матеріалів за допомогою простого пошуку в Google, наприклад CUDA проти OpenCL: Що мені використовувати? та різниця між CUDA та OpenCL 2010 .
JackOLantern

2
Ви можете легко встановити виробничий випуск CUDA 5.5 у Linux (див. Developer.nvidia.com/content/… ). Крім того, можливо налагодити код CUDA з одним графічним процесором в CUDA 5.5 під Linux, з можливістю обчислень 3,5 або вище. Не у вашому випадку, однак це хороша новинка для користувачів Linux :) Я не знаю про вимоги щодо налагодження Windows.
pQB

1
@Arkapravo Я використовував Ubuntu. Щодо CUDA проти OpenCL, то важко відповісти. Це питання думок. По суті, я почав використовувати CUDA з самого початку і ніколи не знайшов сильної мотивації рухатися до OpenCL. Можливо, спрощуючи, OpenCL надасть вам більшу портативність, а CUDA - більшу продуктивність. Але сприйміть це твердження з достатньою кількістю солі.
JackOLantern

1
Я проголосував, щоб закрити це - це абсолютно суб'єктивно і не по темі. Stack Overflow - це не місце для видачі порад та відкритих дискусій, воно призначене для конкретних питань програмування та їх відповідей.
talonmies

2
@talonmies Я новачок у цій темі, я провів достатнє дослідження (як показують посилання, які я надав), але я шукаю справжню пораду від людей, які цим займалися. Я захищаю своє запитання, воно, безумовно, має чітку відповідь, і це також не за темою.
Arkapravo

Відповіді:


94
  1. Якщо ви використовуєте OpenCL, ви можете легко використовувати його як в Windows, так і в Linux, оскільки наявності драйверів дисплея достатньо для запуску програм OpenCL, а для програмування вам просто потрібно буде встановити SDK. CUDA має більше вимог до конкретних версій GCC тощо. Але встановити на Linux також не набагато складніше.

  2. У Linux CUDA має дивні вимоги, такі як використання GCC 4.6 або 4.7. Якщо ви використовуєте іншу версію GCC, ви більше не зможете компілювати свою програму. Якщо ви використовуєте OpenCL, ви можете використовувати будь-який компілятор, тому що вам просто потрібно буде встановити зв'язок із загальною бібліотекою OpenCL. Тож OpenCL простіше налаштувати, використовувати та компілювати для. Після компіляції програми OpenCL її можна запустити на будь-якому обладнанні (якщо вона закодована для цього), навіть якщо вона була скомпільована з використанням OpenCL SDK іншої марки.

Ви можете писати програми OpenCL, які працюватимуть на апаратному забезпеченні Nvidia, AMD та Intel, на графічних процесорах, центральних процесорах та прискорювачах. Більше того, Altera працює над підтримкою OpenCL на FPGA! Якщо ви використовуєте CUDA, вам доведеться використовувати лише графічні процесори Nvidia і повторно писати код знову на OpenCL або іншою мовою для інших платформ. Серйозне обмеження використання CUDA та причина серйозної втрати часу в довгостроковій перспективі.

Я бачу, що хтось розміщував деякі старі посилання між CUDA та OpenCL, але вони старі! Коли ці документи виходили, лише AMD належним чином підтримувала OpenCL. З 2013 року OpenCL підтримується ARM, Altera, Intel тощо і став галузевим стандартом.

Єдиним недоліком є ​​те, що оскільки OpenCL настільки гнучкий, у вашій програмі з’являється більше можливостей та способів кодування розподілу пам’яті, передачі тощо. Тому, можливо, це може бути складнішим.


1
Поки ви не плануєте використовувати власні Nvidia речі, такі як ядра тензора / трасування, OpenCL є настільки ж швидким, як CUDA при правильній оптимізації. Плюс ви отримуєте тонну апаратної гнучкості на графічних процесорах Nvidia / AMD / Intel, процесорах AMD / Intel / ARM, FPGA тощо, а також чудову сумісність у Windows, Linux та MacOS.
ProjectPhysX

9

Я думаю, це не дуже складно налаштувати середовище cuda на ubuntu, ви можете спробувати.

Як студент обчислювальної архітектури, я думаю, вам потрібно вивчити OpenCL та CUDA. І ви повинні вивчити cuda спочатку, оскільки CUDA надає більше інформації про апаратне забезпечення та час роботи, інформованість про обладнання дуже важлива, коли ви хочете оптимізувати свої графічні коди.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.