Разработка с OpenCl на ATI и Nvidia одновременно

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

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

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

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

4 ответа

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

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

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

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

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

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

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

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

Другие вопросы по тегам