Создание массивов в ядре nvidia cuda
привет, я просто хотел знать, возможно ли сделать следующее внутри ядра nvidia cuda
__global__ void compute(long *c1, long size, ...)
{
...
long d[1000];
...
}
или следующее
__global__ void compute(long *c1, long size, ...)
{
...
long d[size];
...
}
Ответы
Ответ 1
Вы можете сделать первый пример, я не пробовал второй.
Однако, если вы можете помочь, вы можете захотеть перепроектировать вашу программу, чтобы это не сделать. Вы не хотите выделять 4000 байт памяти в ядре. Это приведет к большому использованию локальной памяти CUDA, поскольку вы не сможете вместить все в регистры. Локальная память CUDA медленная (400 циклов задержки памяти).
Ответ 2
Вы можете сделать # 1, но будьте осторожны, это будет сделано в КАЖДОЙ теме!
Второй фрагмент не будет работать, поскольку динамическое распределение памяти во время выполнения ядра не поддерживается.
Ответ 3
Динамическое распределение общей памяти при запуске ядра.
__global__ void compute(long *c1, long size, ...)
{
...
extern __shared__ float shared[];
...
}
compute <<< dimGrid, dimBlock, sharedMemSize >>>( blah blah );
Руководство по программированию CUDA:
размер массива определяется во время запуска (см. раздел 4.2.3).
Ответ 4
поддерживается динамическое распределение памяти во время выполнения ядра, проверьте пример sdk, новое удаление.