/ / Ustawianie __local float w OpenCL - opencl

Ustawianie __local float w OpenCL - opencl

Próbuję ustawić nowy float __local, ale pojawia się błąd, gdy przekazuję rozmiar float jako argument.

Ten kod zawiera błąd:

int TILE_DIM = get_local_size(0)*get_local_size(1);  //local size
__local float buffer[TILE_DIM];

Ten kod nie:

int TILE_DIM = get_local_size(0)*get_local_size(1); //local size
__local float buffer[512];

Odpowiedzi:

2 dla odpowiedzi № 1

Pamięć lokalna musi być zawsze przydzielona przed uruchomieniem jądra. Dlatego nie są możliwe żadne tablice z czasem uruchamiania jądra. Możesz jednak przekazać wskaźnik do (niezainicjowany) __local pamięć jako argument dla jądra. Długość tego można ustawić w clSetKernelArg () połączenie. (Sprawdź powiązaną dokumentację, aby poznać szczegóły na temat lokalnych argumentów jądra pamięci.) Tak więc jest to zmienna długość dla każdego jądra, ale nie dla każdej grupy roboczej.


2 dla odpowiedzi nr 2

Rozmiar __local tablica może zostać przekazana do clBuildProgram w options argument: "-DTILE_DIM=512"

Na przykład: clBuildProgram(program, 1, &device.device_id, "-DTILE_DIM=512", NULL, NULL);

W ten sposób rozmiar lokalnej tablicy może zostać ustalony w czasie kompilacji jądra.