Как использовать 3-D массив в ядре OpenCL? - PullRequest
5 голосов
/ 18 июля 2011

Я новичок в OpenCL.Я работал с ядром OpenCL с 1-D данными.Но когда я попытался передать 3-D указатель, он не смог собрать ядро.Если быть точным, я получаю CL_BUILD_PROGRAM_FAILURE .Вот псевдокод для ядра, которое я пытаюсь собрать -

__kernel void 3D_Test(__global float ***array)
{

x = get_global_id(0);
y = get_global_id(1);
z = get_global_id(2);

array[x][y][z] = 10.0;

}

Может кто-нибудь подсказать мне, что не так с кодом?Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 19 июля 2011

Это недопустимый OpenCL C (поэтому он не компилируется), для 3D-массива вам придется использовать линеаризованную версию этого массива, просто создайте обычный массив подходящего размера (sizeX * sizeY * sizeZ)и индексировать его следующим образом:

int index = x + y * sizeX + z * sizeX * sizeY;

Другой вариант - использовать 3D-изображение с clCreateImage3D

0 голосов
/ 18 июля 2011

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

Как объявляется или выделяется ваш массив?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...