2015-05-28 2 views
2

В CUDA C нетрудно определить общую память размера, указанного во время выполнения. Как я могу это сделать с Numba/NumbaPro CUDA?Объем памяти Numba CUDA во время работы?

То, что я сделал до сих пор, привело только к ошибкам с сообщением «Форма аргумента» должна быть постоянной ».

EDIT: Просто чтобы прояснить, что я хочу, это эквивалентно следующему в C CUDA (пример взят и адаптирован из here:

__global__ void dynamicReverse(int *d, int n) 
{ 
    extern __shared__ int s[]; 

    // some work in the kernel with the shared memory 
} 

int main(void) 
{ 
    const int n = 64; 
    int a[n]; 

    // run dynamic shared memory version 
    dynamicReverse<<<1,n,n*sizeof(int)>>>(a, n); 

} 
+0

Возможно, вы должны спросить континуум-аналитический (это их продукт), но я предполагаю, что они не поддерживают его. – talonmies

ответ

4

Я нашел решение (через очень полезный Continuum Analytics поддержки пользователей). Мы определяем общую память, как обычно, но устанавливаем форму равным 0. Затем, чтобы определить размер общего массива, мы должны указать его как четвертый параметр (после идентификатора потока) на Например:

@cuda.autojit 
def myKernel(a): 
    sm = cuda.shared.array(shape=0,dtype=numba.int32) 

    # do stuff 

arga = np.arange(512) 
grid = 1 
block = 512 
stream = 0 
sm_size = arga.size * arga.dtype.itemsize 
myKernel[grid,block,stream,sm_size](arga) 
Смежные вопросы