cl :: Image3D — ошибки на nVidia TITAN black, но не на устройстве Intel openCL?

Все,
У меня есть следующие строки кода для настройки 3D-изображения в OpenCL:

const size_t NPOLYORDERS = 16;
const size_t NPOLYBINS = 1024;cl::Image3D my3DImage;

cl::ImageFormat imFormat(CL_R, CL_FLOAT);

my3Dimage = cl::Image3D(clContext, CL_MEM_READ_ONLY, imFormat, NPOLYORDERS, NPOLYORDERS, NPOLYBINS);

Код работает нормально, когда я использую драйвер процессора Intel OpenCL (путем создания контекста с помощью CL_DEVICE_TYPE_CPU), но завершается ошибкой, когда я использую драйвер nVidia с черным TITAN (создавая контекст с помощью CL_DEVICE_TYPE_GPU).

Все это на RHEL6.4 с ядром 2.6.32-358, использующим последнюю доступную версию драйвера nVidia, с использованием среды выполнения Intel OpenCL 14.1_x64_4.4.0.118 и 2014_4.4.0.134_x64 Intel OpenCL SDK.

Весь другой код работает на устройстве nVidia. Я могу скомпилировать ядро, создать контексты, буферы и т. Д., Но кажется, что этот конструктор не работает. Я проверил, какие максимальные размеры, допустимые для Image3D, использовали cl :: Device :: getInfo, и он сообщает, что ограничения HxWxD равны 4096x4096x4096, поэтому я значительно ниже предела с моим размером изображения 16x16x1024.

Я также проверил, чтобы убедиться, что типы CL_R и CL_FLOAT являются поддерживаемыми форматами, какими они кажутся.

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

Лучшее, что я смог определить по обратной трассировке GDB, — это проблема в строке 4074 файла CL / cl.hpp:

#0 0x000000000000 in ?? ()
#1 0x00000000004274fe in cl::Image3D::Image3D (this=0x7fffffffffdcb0, context=...,
flags=140737488345384, format=..., width=0, height=140737488345392, depth=1024, row_pitch=0,
slice_pitch=0, host_ptr=0x0, err=0x0) at /usr/include/CL/cl.hpp:4074
#2 0x0000000000421986 in clCorrelationMatrixGenerator::initializeOpenCL (
this=0x7fffffffffdfa8) at ./libs/matrix_generator/OpenCLMatrixGenerator.cc:194

Как вы можете видеть, аргументы width и height в конструкторе Image3D выглядят странно, но я не уверен, что это реальные значения, а не оптимизированные значения из-за компилятора.

Мои вопросы таковы:

Что-то не так с картами nVidia, которые не применимы к драйверу Intel CPU OpenCL? Существует ли известная двоичная несовместимость между Intel SDK и nVidia OpenCL ICD?

2

Решение

Как указали некоторые комментаторы, реализация OpenCL nVidia не поддерживает clCreateImage, который используется базовым конструктором cl :: Image. Это потому, что nVidia поддерживает только до OpenCL 1.1, а рассматриваемые функции являются частью OpenCL 1.2.

Однако есть способ обойти это без серьезного рефакторинга кода. Cl.hpp в Intel SDK поддерживает использование OpenCL 1.1 для функциональных возможностей реализации openCL в C ++. Это можно включить, определив CL_USE_DEPRECATED_OPENCL_1_1_APIS.

2

Другие решения


По вопросам рекламы [email protected]