четверг, 20 мая 2010 г.

Сем раз проверь, один раз паникуй

Вот такую штуку надо запомнить.
К чему это я, спросите Вы. А вот к чему:

Два месяца думал что за ерунда приключилась с OpenCL'ем - не работает и все тут. Проверял двумя способами:
  1. примерами из NVIDIA GPU Computing SDK v 2.3b
  2. примером из библиотеки CLxx
И первый и второй вариант выдавали INVALID_PLATFORM при попытке создать контекст с помощью clCreateContext.

Так бы я и продолжал думать, если бы случайно не нашел на сайте нвидии новый GPU Computing SDK версии 3.0. Скачал, поставил, скомпилировал OpenCL'ные примеры, запустил - работают.

После этого в голове начался мыслительный процесс, который сводился к поиску ошибку в библиотеке CLxx. Это предположение оказалось ложным, ибо в библиотеки-то ошибки не было. Зато оказалось, что в спецификации к ф-ии clCreateContextFromType есть такая хитрая строчка, относящаяся к первому параметру, принимаемому данной ф-ей:
properties can be NULL in which case the platform that is selected is implementation-defined
То есть получается, что нвидиевские драйвера, вместо того, чтобы, как подсказывает логика, взять первую доступную платформу, возвращают INVALID_PLATFORM.

Дальше были развлечения с модификацией того самого примера из CLxx, но это уже совсем другая история...

Комментариев нет:

Отправить комментарий