Crear una matriz local dinámica dentro del kernel de OpenCL

Tengo un núcleo OpenCL que necesita procesar una matriz como múltiples matrices donde cada suma de sub-matriz se guarda en una matriz de caché local.

Por ejemplo, imagina la serie de aves de corral:

[[1, 2, 3, 4], [10, 30, 1, 23]]
Cada grupo de trabajo obtiene una matriz (en el ejemplo tenemos 2 grupos de trabajo);

Cada elemento de trabajo procesa dos índices de matriz (por ejemplo, multiplica el índice de valor de local_id), donde el resultado del elemento de trabajo se guarda en una matriz compartida de grupo de trabajo.

__kernel void test(__global int **values, __global int *result, const int array_size){
    __local int cache[array_size];

    // initialise
    if (get_local_id(0) == 0){
        for (int i = 0; i < array_size; i++)
            cache[i] = 0;
    }

    barrier (CLK_LOCAL_MEM_FENCE);

    if(get_global_id(0) < 4){
        for (int i = 0; i<2; i++)
            cache[get_local_id(0)] += values[get_group_id(0)][i] * 
                                                         get_local_id(0);
    }

    barrier (CLK_LOCAL_MEM_FENCE);

    if(get_local_id(0) == 0){
        for (int i = 0; i<array_size; i++)
            result[get_group_id(0)] += cache[i];
    }
}

El problema es que no puedo definir el tamaño de la matriz de caché usando un parámetro del kernel, pero necesito hacerlo para tener un kernel dinámico.

¿Cómo puedo crearlo dinámicamente? Como función malloc en c ...

¿O la única solución disponible es enviar una matriz temporal a la función de mi kernel?

Respuestas a la pregunta(1)

Su respuesta a la pregunta