Ошибка CL_INVALID_KERNEL_NAME после редактирования функции (обновленный файл журнала)

Проблема решена (если вам интересно; вы можете увидеть второй абзац; под чертой). Теперь у меня новый вопрос; Зачем #define BLOCK_DIM 16; вызвать ошибку в функции ниже? Просто используйте 16 Это хорошо .

Вот ошибки

     expected a "]"__local float2 block[BLOCK_DIM * (BLOCK_DIM + 1)] ;
^

line 110: error:
expected a ")"__local float2 block[BLOCK_DIM * (BLOCK_DIM + 1)] ;
^

line 110: error: operand
of "*" must be a pointer
__local float2 block[BLOCK_DIM * (BLOCK_DIM + 1)] ;

error:
expected a ";"int Idout = get_local_id(0)*(BLOCK_DIM+1)+get_local_id(1);
^

и функция

    __kernel void   transpose(
__global float2* dataout,
__global float2* datain,
int width, int height)

// width = N (signal length)
// height = batch_size (number of signals in a batch)

{
// read the matrix tile into shared memory

__local float2 block[32 * (32 + 1)] ;
unsigned int xIndex = get_global_id(0);
unsigned int yIndex = get_global_id(1);

if((xIndex < width) && (yIndex < height))
{
unsigned int index_in = yIndex * width + xIndex;
int Idin = get_local_id(1)*(32+1)+get_local_id(0);
block[Idin]=  datain[index_in];
}

barrier(CLK_LOCAL_MEM_FENCE);

// write the transposed matrix tile to global memory

xIndex = get_group_id(1) * 32 + get_local_id(0);
yIndex = get_group_id(0) * 32 + get_local_id(1);

if((xIndex < height) && (yIndex < width))
{
unsigned int index_out = yIndex * height + xIndex;
int Idout = get_local_id(0)*(32+1)+get_local_id(1);
dataout[index_out] = block[Idout];
}

}

===============================

Я работаю над улучшением производительности 2D FFT на изображениях. После теста; Я переконфигурирую функцию транспонирования — причина замедления работы программы, поэтому я заменяю ее на более оптимизированную.

Но после этого; Я получил код возврата всех функций, которые раньше работали нормально CL_INVALID_KERNEL_NAME, За исключением функции транспонирования и clSetKernelArg в коде хоста; Я больше ничего не меняю. Так что я не в курсе. Надеюсь, вы, ребята, выручите меня 🙂

ОБНОВЛЕНИЕ: вот ошибки. Не обращайте внимания на номер строки 🙂 Эти строки кажутся мне нормальными. Что-то не так ?

ошибка:

     expected a "]"__local float2 block[BLOCK_DIM * (BLOCK_DIM + 1)] ;
^

line 110: error:
expected a ")"__local float2 block[BLOCK_DIM * (BLOCK_DIM + 1)] ;
^

line 110: error: operand
of "*" must be a pointer
__local float2 block[BLOCK_DIM * (BLOCK_DIM + 1)] ;

error:
expected a ";"int Idout = get_local_id(0)*(BLOCK_DIM+1)+get_local_id(1);
^

Здесь файл ядра

Новый :

#define BLOCK_DIM 16

__kernel void   transpose(
__global float2* dataout,
__global float2* datain,
int width, int height)

// width = N (signal length)
// height = batch_size (number of signals in a batch)

{
// read the matrix tile into shared memory

__local float2 block[BLOCK_DIM * (BLOCK_DIM + 1)] ;
unsigned int xIndex = get_global_id(0);
unsigned int yIndex = get_global_id(1);

if((xIndex < width) && (yIndex < height))
{
unsigned int index_in = yIndex * width + xIndex;
int Idin = get_local_id(1)*(BLOCK_DIM+1)+get_local_id(0);
block[Idin]=  datain[index_in];
}

barrier(CLK_LOCAL_MEM_FENCE);

// write the transposed matrix tile to global memory

xIndex = get_group_id(1) * BLOCK_DIM + get_local_id(0);
yIndex = get_group_id(0) * BLOCK_DIM + get_local_id(1);

if((xIndex < height) && (yIndex < width))
{
unsigned int index_out = yIndex * height + xIndex;
int Idout = get_local_id(0)*(BLOCK_DIM+1)+get_local_id(1);
dataout[index_out] = block[Idout];
}

}

1

Решение

Ваш #define вопрос .. им не нужны точки с запятой. По сути, #define X Y заменит все вхождения «X» в «Y» в коде перед компиляцией, если в конце добавить точку с запятой, которая станет частью «Y» и создаст много синтаксических ошибок. #Define — это не утверждение.

На самом деле, это упрощенное объяснение, но его достаточно для охвата этого вопроса (если вы хотите узнать больше, я рекомендую вам взглянуть на учебники и документацию по препроцессору).

0

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

Других решений пока нет …

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