Разработка с OpenCl на ATI и Nvidia одновременно - PullRequest
3 голосов
/ 02 ноября 2010

наша рабочая группа медленно пробует немного OpenCl в стороннем проекте.До сих пор «все» работают над NVIDIA Quadro FX 580. Теперь мы планируем купить новые компьютеры для новых колледжей, и вместо FX 580 мы могли бы вместо этого купить ATI FirePro V4800, который стоит всего 15Eur больше и дать нам 1Gig вместо 512Gigо Ram, который будет полезен для наших задач, требующих больших объемов данных.

Итак, насколько сложно разрабатывать код OpenCl одновременно для Nvidia и ATI?

Я прочитал следующий вопрос SO, Запуск OpenCL на оборудовании от смешанных поставщиков , который очень пессимистично относился к разработке для / для различных поставщиков.С другой стороны, этому вопросу уже год.

Что вы рекомендуете?

Ответы [ 4 ]

2 голосов
/ 02 ноября 2010

Ранее я много работал с языком программирования CUDA.

Я планировал начать разработку приложений с использованием OpenCL.Как вы упомянули, одна из лучших функций OpenCL работает на оборудовании многих поставщиков (Intel, AMD и Nvidia).

Один проект, который мне приходилось встречать, который широко использовал openCL для крупномасштабной разработки, - http://sourceforge.net/projects/hypgad/. Возможно, было бы неплохо взглянуть на исходный код из этой группы и понять, как они разработали свое приложение на столь многих аппаратных средствах, включая процессор sony cell.

Другой подход заключается в использовании PyOPENCL, который обеспечивает более высокую абстракцию, чем OpenCL, и может значительно сократить усилия по написанию кода.

0 голосов
/ 13 декабря 2010

Разработка для ATI и NVIDIA на самом деле не так уж сложна, если вы избегаете использования какой-либо части SDK любого из поставщиков.Придерживайтесь OpenCL, как это определено в спецификации OpenCL.( www.khronos.org / opencl ) и ваш код останется переносимым синтаксисом.Из-за различий в базовой архитектуре переносимость производительности может быть проблемой.Местные и глобальные рабочие размеры действительно должны быть определены независимо для каждой карты, чтобы максимизировать производительность.Другая вещь, на которую следует обратить внимание, это используемые типы.Векторные типы (float2, float4) особенно полезны на картах ATI, поскольку каждый элемент обработки фактически содержит 4 исполнительных блока (по одному для каждого цветового канала RGB плюс aplha).

0 голосов
/ 03 ноября 2010

Самая большая проблема - размеры рабочей группы. Некоторые карты ATI, которые я использовал, дают сбой выше 64, но это могут быть драйверы Apple OSX 10.6, которые я использую.

0 голосов
/ 02 ноября 2010

Вам нужен код, чтобы работать без изменений на обоих битах аппаратного обеспечения? Если это так, возможно, вам придется разработать ограниченное подмножество общих функций.

Если вы можете запускать несколько разные коды для каждого, вы, вероятно, получите лучшую производительность - в CUDA / OpenCL вам, как правило, приходится настраивать алгоритмы на количество оперативной памяти, количество ядер GPU, так что это не должно быть намного работать также для настройки NVidia / AMD

...