OpenCL против DirectCompute?
Я ищу сравнения между OpenCL и DirectCompute, но ничего не нашел. Преимущества OpenCL в кроссплатформенности и наличии более широкого спектра поддерживаемых графических процессоров для меня не имеют значения. Я в порядке с кодированием на Windows только против графических процессоров DX11. Предполагая, что, каковы плюсы и минусы каждого API?
Я знаю, что этот вопрос был поднят раньше, но я ищу более подробную информацию.
Меня не интересует CUDA, так как я не хочу ограничиваться только аппаратным обеспечением Nvidia.
5 ответов
Вероятно, самое большое отличие кодера в том, что DirectCompute программируется на языке, похожем на HLSL, а OpenCL программируется на языке C-like.
Другое отличие, которое следует учитывать, заключается в том, что, как правило, для графических процессоров товарного уровня поддержка DirectX лучше (быстрее и с меньшим количеством ошибок), чем поддержка OpenGL в Windows. Это может привести к более стабильной поддержке DirectCompute, но на самом деле это всего лишь предположение.
Ну и главное преимущество OpenCL в том, что он не ограничивается только видеокартами. Вы можете использовать свой многоядерный процессор, графическую карту и, возможно, любое количество других устройств аппаратного ускорения (DSP и т. Д.) - все из одной и той же программы.
Я не уверен, что DirectCompute предоставляет такую свободу.
Кросс-платформенность OpenCL - это не просто деталь, поскольку хост-код (тот, который вызывает API OpenCL и передает ядра) сам по себе может быть кроссплатформенным (см. Текст ссылки, текст ссылки...).
Напишите один раз, запустите на любом GPGPU, где угодно.
В противном случае инструменты OpenCL действительно улучшаются благодаря плагину ATI Stream для Visual Studio, SDK NVidia и ATI, содержащим тонны примеров и т. Д.
Другой вариант теперь - C++ AMP, который предоставляет вам современный синтаксис C++ без необходимости отдельного компилятора, сохраняя при этом переносимость аппаратного обеспечения. Пожалуйста, перейдите по ссылкам отсюда для получения дополнительной информации и не стесняйтесь размещать вопросы по мере их возникновения: http://blogs.msdn.com/b/nativeconcurrency/archive/2011/09/13/c-amp-in-a-nutshell.aspx
Я использую OpenCL, потому что я могу легко перенести свое приложение на Linux, но с DirectCompute это невозможно. Я также думаю, что производительность реализации OpenCL будет со временем увеличиваться (что она будет на том же уровне, что и CUDA для карт NVidia), а также, что ошибки (драйвера) будут (надеемся;)) со временем устраняться.