#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 будет доступна в ближайшем будущем:
Ответ №5:
Если вы хотите работать с GPU на более высоком уровне, чем OpenCL, вы можете обратиться к Matlab. Существует возможность программировать графические процессоры с помощью Matlab, и вам не нужно изучать более низкие модели, такие как OpenCL и CUDA. CUDA будет более эффективным, поскольку вы, вероятно, собираетесь программировать карту NVIDIA. Однако OpenCL является стандартом для GPGPU, и способ кодирования довольно похож. Хотя использование CUDA или OpenCL может показаться вам не очень сложным, на самом деле вам будет гораздо сложнее их оптимизировать.
Я надеюсь, что это поможет.
Ответ №6:
Open CL открыт, но я слышал, что недостатком этого является отсутствие документации. ATI может быть лучшим между NVIDIA и ATI, поскольку, как сообщается, в 2009 году он был быстрее, но я не уверен, что эти статистические данные по-прежнему верны.