Crie uma matriz local dinâmica dentro do kernel do OpenCL

Eu tenho um kernel OpenCL que precisa processar uma matriz como vários arrays, onde cada soma de subarray é salva em uma matriz de cache local.

Por exemplo, imagine o array de aves:

[[1, 2, 3, 4], [10, 30, 1, 23]]
Cada grupo de trabalho recebe um array (no exemplo temos 2 grupos de trabalho);

Cada item de trabalho processa dois índices de matriz (por exemplo, multiplique o índice de valor de local_id), em que o resultado do item de trabalho é salvo em uma matriz compartilhada de grupo de trabalho.

__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];
    }
}

O problema é que eu não posso definir o tamanho da matriz de cache usando um parâmetro do kernel, mas eu preciso para ter um kernel dinâmico.

Como posso criá-lo dinamicamente? como função malloc em c ...

Ou a única solução disponível é enviar um array temporário para a minha função de kernel?

questionAnswers(1)

yourAnswerToTheQuestion