OpenCL: ATI + NVidia, текущее состояние дел (windows)

По случаю выхода ATI Stream SDK 2.01, описанное в предыдущей статье несколько устарело. Теперь все иначе, по меньшей мере под Windows.

OpenCL.DLL устанавливается и драйверами NVidia (поверх имеющегося) и ATI SDK (только если в системе такого нет? если в системе есть более старый?) . При этом тот вариант, который ставят драйвера NVidia 196.xx - хороший, позволяющий работать и с NVidia и с ATI картами без каких-то избыточных телодвижений, а вот ATI-шный в двухкарточном варианте у меня вызывал непонятные проблемы.

Другими словами, надежнее после установки ATI SDK установить свежие драйвера NVidia еще раз.

Поддержка OpenCL ICD наконец то заработала, поэтому находятся следующие устройства:

  • Если к обоим картам подключены мониторы, а в пути (PATH) находится atiocl.dll (atiocl64.dll на 64-битной системе), то будут найдены оба GPU (+CPU-устройство, обеспечиваемое драйверами ATI).
  • Если от NVidia отключить монитор, то устройство пропадает из списка найденных (трюк с запуском PhysX на такой карте не работает, собственно такой настройки нет).
  • Если отключить монитор от ATI-карты, то Platform остается в списке устройств, однако судя по скорости расчета - он происходит на CPU.

Кроме того, интеграция с OpenGL полностью работает только если карта NVidia сделана primary display (скажем, в примере oclNbody отрисовка параметров работает во всех случаях, а отрисовка результатов расчетов - только на primary display).

Все остальное, что я сумел проверить - работает как ожидается: вычисления запускаются на нужном устройстве и все вообще соответствует ожиданиям, вроде бы получается считать и на двух устройствах сразу.

Tags: 

Comments

Какие именно драйвера надо

Какие именно драйвера надо поставить на NVidia картах? При установке nvdrivers_2.3-winvista_64_190.89_general у меня слетает wallpaper с рабочего стола и перестают запускаться cuda-программы, заявляя что нет устройств, поддерживающих CUDA. OpenCL код тоже не работает, вылетает при попытке выделить память, хотя и определяет все OpenCL-совместимые устройства.

Последние WHQL - 196.21 (по

Последние WHQL - 196.21 (по меньшей мере для Win7, а других виндов у меня нету).

С ними все нормально. С драйверами "для Nexus" (195.62) - все уже достаточно странно. Более старые я и не пытался смотреть.

Спасибо, но я стал понимать

Спасибо, но я стал понимать еще меньше.

Я так понимаю, что либо CUDA 2.3, либо OpenCL?
Либо Cuda 3.0 beta + OpenCL?

Ну у меня SDK/Toolkit -

Ну у меня SDK/Toolkit - 3.0beta. В 2.3 нету OpenCL, насколько я помню (могу путать). Там в одном флаконе все нужное для OpenCL, CUDA и DX11 (DirectCompute)

Но Opencl.dll - идет с драйверами ((и компилятор OpenCL который часть драйвера - тоже), не с toolkit. А приложения CUDA 2.3 с новыми драйверами тоже (естественно) работают.

Кроме того, никто вообще не мешает собирать OpenCL-приложения с помощью AMD-шной opencl.lib - и они будут работать под NVidia драйверами (+- interoperability с OpenGL/DX).

Да, а собственно

Да, а собственно содержательные openCL-ные вызовы находятся в nvcuda.dll (в случае NVidia). opencl.dll - это только роутер (ну и всякие getPlatformIDs - тоже там).

Да в NVIDIA драйверах OpenCL

Да в NVIDIA драйверах OpenCL реализовано через CUDA, поэтому работает на 10% медленнее чем CUDA. Но меня бы больше интересовала статья ICD: AMD, NVIDIA, Intel. А в статье ни слова, что opencl.dll должен реализовывать ICD.

Ну про ICD уже везде

Ну про ICD уже везде написано, и у AMD и у NVidia и даже у Intel.

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

Про OpenCL в отличие от CUDA

Про OpenCL в отличие от CUDA кстати достаточно мало информации и она в основном разрознена. Непомешали бы посты хотя бы с ссылками на полезную инофрмацию.

Про ICD все бы еще хотелось бы пост, оссобенно с примером использования расширения cl_khr_icd.

В 1.1 это ведь уже не

В 1.1 это ведь уже не расширение, а часть стандарта?

clGetPlatformIDs, clGetPlatformInfo, clCreateContextFromType - это же оно?