我需要为每个线程分配一个数组,但数组的长度只有在运行时才知道。一旦计算出数组长度,它就是一个常数值。 cudaMalloc 似乎不在内核内部工作。 无论如何我可以做到吗?像这样的东西-
__constant__ int length;
__global__ void foo() {
int a[length];
}
int main() {
//do some length calculations here.
//copy the calculated value to length.
foo<<<Blocks, Threads>>>();
}
最好的办法是动态分配共享内存(并学习如何优化它)。这是一篇很好的文章,重点介绍了如何做到这一点:
https://developer.nvidia.com/blog/using-shared-memory-cuda-cc/
还值得注意:请确保牢记记忆库,请关注发布的博客以获取更多详细信息