OpenCL 2.0 на графическом процессоре AMD

Я пытаюсь инициализировать OpenCL 2.0 на AMD Fury X и смотрю на значение __OPENCL_VERSION__. 120 несмотря ни на что. Я заглядываю в свой драйвер, и там можно найти и #define __OPENCL_VERSION__ 120, и #define __OPENCL_VERSION__ 200.

Нужен ли где-нибудь специальный флаг для включения версии 2.0? У меня следующая платформа и устройство:

Платформа OpenCL «AMD Accelerated Parallel Processing» от Advanced Micro Devices, Inc., версия OpenCL 2.0 AMD-APP (1912.5), FULL_PROFILE
устройство: Advanced Micro Devices, Inc. «Fiji» (версия драйвера: 1912.5 (VM))
Версия OpenCL: OpenCL 2.0 AMD-APP (1912.5)
Версия OpenCL "C": OpenCL C 2.0

ИЗМЕНИТЬ

Ах, глупо. Кажется, помогает указать -cl-std=CL2.0 в параметрах компилятора в clCreateProgramWithSource. Это должно быть ожидаемое поведение?


person the swine    schedule 16.12.2015    source источник


Ответы (1)


Это должно быть ожидаемое поведение?

да. Вот соответствующий абзац из спецификации OpenCL 2.0 (раздел 5.8.4.5 Параметры, управляющие версией OpenCL C):

Если опция сборки –cl-std не указана, при компиляции программы для каждого устройства используется самая высокая версия языка OpenCL C 1.x, поддерживаемая каждым устройством. Приложения должны указывать параметр –cl-std = CL2.0, если они хотят компилировать или собирать свои программы с OpenCL C 2.0.

person jprice    schedule 16.12.2015
comment
Надо было погуглить сложнее. У меня есть еще одна проблема: при такой компиляции и сохранении двоичного файла clCreateProgramWithBinary() приводит к сбою приложения (некоторое нарушение прав доступа внутри вызова). У вас есть опыт в этом? Хорошо работает без -cl-std=CL2.0. - person the swine; 16.12.2015
comment
Нет личного опыта, но любой такой сбой звучит для меня как ошибка. Лучше всего поднять ошибку с AMD непосредственно для этого. - person jprice; 16.12.2015