是否有可能在其中创建一个列表、数组等?device函数的列表/数组的大小是调用中的参数……或者是在调用时初始化的全局变量?
我想要类似以下列表之一的功能:
unsigned int size1;
__device__ void function(int size2) {
int list1[size1];
int list2[size2];
}
是否有可能做一些聪明的事情来让这样的事情发挥作用?
有 1 种方法可以分配动态共享内存量 - 使用第三个启动内核参数:
__global__ void kernel (int * arr)
{
extern __shared__ int buf []; // size is not stated
// copy data to shared mem:
buf[threadIdx.x] = arr[blockIdx.x * blockDim.x + threadIdx.x];
// . . .
}
// . . .
// launch kernel, set size of shared mem in bytes (k elements in buf):
kernel<<<grid, threads, k * sizeof(int)>>> (arr);
许多数组都有一个 hack:
__device__ void function(int * a, int * b, int k) // k elements in first list
{
extern __shared__ int list1 [];
extern __shared__ int list2 []; // list2 points to the same point as list1 does
list1 [threadIdx.x] = a[blockIdx.x * blockDim.x + threadIdx.x];
list2 [k + threadIdx.x] = b[blockIdx.x * blockDim.x + threadIdx.x];
// . . .
}
您必须考虑:分配给所有块的内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)