Программирование на GPU

#openmp #opencl #gpu

#openmp #opencl #графический процессор

Вопрос:

Я хочу немного заняться программированием на GPU. Каким образом здесь можно поступить? Я хочу изучить что-то «открытое», кроссплатформенное и на «более высоком» языке. Я не хочу привязываться только к поставщику GPU или ОС, платформе и т.д.

Какой у меня здесь выбор? Cuda, OpenCL, OpenMP, другое? Каковы плюсы / минусы для них?

Как насчет G / HLSL и PhysX?

Я собираюсь заняться программированием «общего назначения», некоторой математикой, обработкой чисел, симуляциями и т.д. Может быть, выплюнуть какую-нибудь красивую графику, но не конкретно графическое программирование.

Комментарии:

1. Я потратил около года на OpenCL. Из-за этого забыл, как программировать на C . Оказывается, большинство заявлений о производительности GPU не соответствуют действительности. Для двойной плавающей точки вы могли бы также забыть об этом. Для одной плавающей точки есть преимущество перед процессором, возможно, в 5 раз. Это все еще важно, но требует больших инвестиций. Я не знаю о целых числах. Графические процессоры AMD популярны в биткойнинге не просто так. Сейчас я в основном использую OpenMP и SIMD на процессоре. AVX-512 выйдет через несколько лет, и я думаю, что Intel сократит отставание по single float и будет доминировать на double.

Ответ №1:

Ответ, отмеченный как правильный, теперь устарел и неверен. В частности, OpenMP 4.0 поддерживает ускорение GPU.

Ответ №2:

OpenMP — это только CPU, но его легко реализовать, CUDA — это в основном только GPU. Ati Stream поддерживает оба, но только на графических процессорах Ati / AMD. OpenCL — ваш единственный «открытый» вариант, который поддерживает оба.

Комментарии:

1. Спецификация OpenMP в настоящее время охватывает только однородные SMP-системы. Однако, когда выйдет спецификация OpenMP версии 4.0 (примерно через год), она, скорее всего, будет охватывать гетерогенные системы (которые должны включать графические процессоры). Насколько я знаю, CUDA в настоящее время доступна только для Nvidia. OpenCL кажется лучшим выбором на данный момент.

2. Есть люди, работающие над трансляторами кода для таких языков, как C и Fortran OpenMP для CUDA.

3. Этот ответ теперь устарел. OpenMP 4.0 поддерживает ускорение GPU.

Ответ №3:

В настоящее время — 2013/2014 — существует C ускоренный массовый параллелизм (AMP) от Microsoft. Это язык высокого уровня, который компилируется в High Level Shader Language (HLSL), поэтому вам не нужно писать код ядра и т.д.

Простое и понятное сравнение OpenCL и C AMP выполнено специалистами AMD и находится здесь (нажмите!).

Ответ №4:

Поддержка GPU для OpenMP будет доступна в ближайшем будущем:

http://openmp.org/sc14/Booth-Sam-IBM.pdf

Ответ №5:

Если вы хотите работать с GPU на более высоком уровне, чем OpenCL, вы можете обратиться к Matlab. Существует возможность программировать графические процессоры с помощью Matlab, и вам не нужно изучать более низкие модели, такие как OpenCL и CUDA. CUDA будет более эффективным, поскольку вы, вероятно, собираетесь программировать карту NVIDIA. Однако OpenCL является стандартом для GPGPU, и способ кодирования довольно похож. Хотя использование CUDA или OpenCL может показаться вам не очень сложным, на самом деле вам будет гораздо сложнее их оптимизировать.

Я надеюсь, что это поможет.

Ответ №6:

Open CL открыт, но я слышал, что недостатком этого является отсутствие документации. ATI может быть лучшим между NVIDIA и ATI, поскольку, как сообщается, в 2009 году он был быстрее, но я не уверен, что эти статистические данные по-прежнему верны.