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 № 1Pamięć 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.