Utwórz dynamikę tablicy lokalnej w jądrze OpenCL

Mam jądro OpenCL, które musi przetwarzać tablicę jako wiele tablic, w których każda suma macierzy jest zapisywana w lokalnej macierzy pamięci podręcznej.

Na przykład wyobraź sobie tablicę fowling:

[[1, 2, 3, 4], [10, 30, 1, 23]]
Każda grupa robocza otrzymuje tablicę (w przykładzie mamy 2 grupy robocze);

Każdy element pracy przetwarza dwa indeksy tablicy (na przykład pomnóż indeks wartości local_id), gdzie wynik elementu pracy jest zapisywany w tablicy współdzielonej grupy roboczej.

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

Problem polega na tym, że nie mogę zdefiniować rozmiaru macierzy pamięci podręcznej za pomocą parametru jądra, ale muszę mieć dynamiczne jądro.

Jak mogę to zrobić dynamicznie? jak funkcja malloc w c ...

Albo jedynym dostępnym rozwiązaniem jest wysłanie tablicy tymczasowej do mojej funkcji jądra?

questionAnswers(1)

yourAnswerToTheQuestion