我正在为 1024 个矩阵运行适应度函数,每个矩阵都有自己的块并且大小相同。每个块都有n*n
线程(矩阵的维度)并且需要n*n
共享内存,以便我可以轻松地进行求和。但是,所有矩阵的维度n
在运行前都是可变的(即可以手动更改,尽管总是 2 的幂,所以求和很简单)。这里的问题是必须使用常量分配共享内存,但我还需要将值从主机传递给内核。我在哪里声明维度n
以便它对 CPU 可见(用于传递给内核)并可用于声明共享内存的大小(在内核内)?
我的代码结构如下:
main.cu
我称内核为:
const int num_states = 1024
const int dimension = 4
fitness <<< num_states, dimension * dimension >>> (device_array_of_states, dimension, num_states, device_fitness_return);
然后在kernel.cu
我有:
__global__ void fitness(
int *numbers,
int dimension,
int num_states,
int *fitness_return) {
__shared__ int fitness[16]; <<-- needs to be dimension * dimension
//code
}
numbers
是一个表示 1024 个矩阵的数组,dimension
是行和列的长度,num_states
是 1024,fitness_return
是一个长度为 1024 的数组,用于保存每个矩阵的适应度值。在内核中,共享内存是用 的平方硬编码的dimension
(dimension
在这个例子中也是 4)。
我在哪里以及如何声明dimension
它可以用来分配共享内存以及调用内核,这样我只需要dimension
在一个地方更新?谢谢你的帮助。