2013-08-02 2 views
58

Я новичок в программировании на GPU. У меня есть ноутбук с картой NVIDIA GeForce GT 640. Я столкнулся с двумя дилеммами, предложения приветствуются.Программирование на GPU, CUDA или OpenCL?

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

  2. CUDA or OpenCL - Теперь это, вероятно, более сложно, чем мой первый вопрос! Я в основном сталкиваюсь с проектами GPGPU с использованием CUDA/Nvidia, но OpenCL, вероятно, является следующим лучшим вариантом в open source и установка в Ubuntu, вероятно, не будет проблемой, хотя некоторые предложения здесь будут наиболее полезными. Могу ли я принести в жертву любую функциональность, если я пойду за OpenCL и NOT CUDA?

Любая помощь или предложение?

+2

Что касается вашего первого вопроса, я чувствую, что Windows в настоящее время лучше поддерживается для CUDA, а не для Linux. В прошлом я активно использовал CUDA под Linux, но установка всегда была немного сложной. Что касается вашего второго вопроса, я думаю, вы могли бы найти много материала простым поиском google, например [CUDA vs OpenCL: Который я должен использовать?] (Http://wiki.tiker.net/CudaVsOpenCL) и [Разница между CUDA и OpenCL 2010] (http://streamcomputing.eu/blog/2010-04-22/difference-between-cuda-and-opencl/). – JackOLantern

+2

Вы можете найти CUDA 5.5 Production Release, легко устанавливаемую в Linux (см. Https://developer.nvidia.com/content/cudacasts-episode-5-install-cuda-55-linux-package-manager). Кроме того, можно отлаживать код CUDA с одним GPU в CUDA 5.5 под Linux, с возможностью вычисления 3.5 или выше. Не ваше дело, но это хорошо для пользователей linux :) Я не знаю о требованиях к отладке Windows. – pQB

ответ

78
  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 настолько гибкий, вы сталкиваетесь с большим количеством опций и способов распределения памяти, передачи и т. Д. В вашей программе. Поэтому, возможно, он может чувствовать себя более сложным.

5

Я думаю, что не очень сложно настроить среду cuda на ubuntu, вы можете попробовать.

Как студент вычислительной архитектуры, я думаю, вам нужно изучить как OpenCL, так и CUDA. И вы должны сначала изучить cuda, потому что CUDA предоставляет больше аппаратных средств и информации о времени выполнения, а аппаратная осведомленность очень важна, когда вы хотите оптимизировать свои графические процессоры.