Я недавно играл с OpenCL, и я могу писать простые ядра, которые используют только глобальную память. Теперь я хотел бы начать использовать локальную память, но я не могу понять, как использовать get_local_size()
и get_local_id()
для вычисления одного «блока» вывода за раз.
Например, допустим, я хотел преобразовать пример ядра Apple OpenCL Hello World в нечто, использующее локальную память. Как бы вы это сделали? Вот исходный код ядра:
__kernel square(
__global float *input,
__global float *output,
const unsigned int count)
{
int i = get_global_id(0);
if (i < count)
output[i] = input[i] * input[i];
}
Если этот пример не может быть легко преобразован в нечто, показывающее, как использовать локальную память, подойдет любой другой простой пример.