Можно ли начать программировать OpenCL, не загружая SDK?

Я пытаюсь получить программу, которая будет работать как на ATI, так и на NVidia, и поэтому я хочу избежать использования SDK. Можно ли это сделать без SDK, используя только VS2010 и Windows (XP или 7)?

Если да, то как настроить компоновщик VS2010, чтобы он работал?


person Daniel Whiddon    schedule 08.06.2011    source источник


Ответы (3)


Строго говоря, SDK не нужен. На самом деле SDK не нужен, так как SDK NVIDIA и AMD/ATI привязывают код к своей среде и, соответственно, к своему оборудованию. Что вам нужно, так это:

1) Графический процессор, который будет запускать код OpenCL. См. этот вопрос: Список ЦП/ГП, совместимых с OpenCl

2) библиотека OpenCL (libOpenCL.so в Linux); обычно он включен и установлен вместе с графическим драйвером, который можно загрузить с сайта AMD или NVIDIA.

3) Заголовочные файлы OpenCL. Их можно получить на Khronos.org, но они включены во все SDK OpenCL, которыми я пользуюсь. в курсе. В системе Linux они обычно находятся в каталоге /usr/include/CL.

SDK NVIDIA и AMD предоставляют ряд утилит и оболочек, которые упрощают использование OpenCL API, но они не требуются для написания кода OpenCL или выполнения вызовов API. Эти обертки и утилиты не переносимы. Если вы заинтересованы в написании переносимого кода, придерживайтесь спецификации OpenCL, также доступной на Khronos.org.

Чтобы написать код, все, что вам нужно сделать, это включить opencl.h в вашу основную программу, а затем выполнить вызовы API, необходимые для настройки среды OpenCL и запуска вашей программы OpenCL. Кроме того, не забудьте сделать ссылку на библиотеку OpenCL (укажите gcc флаг -lOpenCL в Linux).

person virtuallinux    schedule 09.06.2011
comment
поэтому я должен загрузить SDK и просто не использовать какие-либо его функции, а просто использовать информацию OpenCL внутри него? Основная проблема, с которой я сталкиваюсь, заключается в том, что когда я включаю файл opencl.h (VS2010, W7), он ссылается на ‹CL/cl.h›, который не определен, если я включу заголовки в свою программу. - person Daniel Whiddon; 09.06.2011
comment
Да и SDK полезен, только избегайте API вендора. К сожалению, я не очень хорошо знаком с Visual Studio. Я предполагаю, что если вы поместите каталог CL в системный путь включения (не знаю, что это для VS), ссылка на ‹CL/cl.h› разрешится. Если у меня будет время, я посмотрю на это. - person virtuallinux; 10.06.2011
comment
Хорошо, я взял копию VS C++ 2010 Express. Мне удалось правильно настроить пути, перейдя в Project > свойства project_name. В разделе «Свойства конфигурации» > «Каталоги VC++» я отредактировал «Включить каталоги», добавив путь к каталогу, в котором находится каталог CL (обратите внимание, что я не указал путь к самому CL). Кроме того, я ошибочно написал, что вы должны включить ‹openCl.h›, хотя на самом деле нужно включить ‹CL/opencl.h›. Все заголовки OpenCL должны находиться внутри каталога CL. - person virtuallinux; 10.06.2011

OpenCL является стандартом. Он только определяет соглашения. Чтобы использовать его, вам нужен драйвер для вашей графической карты. NVidia, AMD (ATI) и Apple предоставляют такие драйверы. Вам определенно нужен SDK.

person Charles Brunet    schedule 08.06.2011
comment
Но если Khronos предоставляет заголовки C++, почему я не могу их использовать, или я упускаю что-то еще? - person Daniel Whiddon; 09.06.2011
comment
ответ virtuallinux более полный, чем мой. Я думаю, он прав. - person Charles Brunet; 09.06.2011

@virtuallinux намекает на правильный ответ: если вы беспокоитесь о случайном использовании некоторых расширений, специфичных для конкретного поставщика, получите Khronos SDK.

person Ben Voigt    schedule 09.06.2011
comment
Я беспокоюсь о том, что моя программа работает не так хорошо, как может, на разных платформах. - person Daniel Whiddon; 09.06.2011
comment
@Daniel: Khronos SDK не привязан к какому-либо оборудованию или ОС. Они пишут стандарт, они не строят видеокарты. - person Ben Voigt; 09.06.2011