我想dim3
在我的 CUDA 程序中使用网格,但在初始化时不知道参数(需要先计算它们)。有没有一种简单的方法来解决这个问题?
当然,我可以在内核调用的括号中传递参数,例如,如果我的参数是 m 和 n:kernel<<<m*n, thread_size>>>(...)
但是我需要重新计算索引。
我想dim3
在我的 CUDA 程序中使用网格,但在初始化时不知道参数(需要先计算它们)。有没有一种简单的方法来解决这个问题?
当然,我可以在内核调用的括号中传递参数,例如,如果我的参数是 m 和 n:kernel<<<m*n, thread_size>>>(...)
但是我需要重新计算索引。
dim3
是文件vector_types.h
中定义的整数结构类型
struct __device_builtin__ dim3
{
unsigned int x, y, z;
#if defined(__cplusplus)
__host__ __device__ dim3(unsigned int vx = 1, unsigned int vy = 1, unsigned int vz = 1) : x(vx), y(vy), z(vz) {}
__host__ __device__ dim3(uint3 v) : x(v.x), y(v.y), z(v.z) {}
__host__ __device__ operator uint3(void) { uint3 t; t.x = x; t.y = y; t.z = z; return t; }
#endif /* __cplusplus */
};
您可以将dim3
变量定义为
dim3 grid(256); // defines a grid of 256 x 1 x 1 blocks
dim3 block(512,512); // defines a block of 512 x 512 x 1 threads
并将其用作
foo<<<grid,block>>>(...);
在您感兴趣的情况下,您将拥有
dim3 grid(m*n);
dim3 block(thread_size);
kernel<<<grid,block>>>(...)
从 的定义来看dim3
,不需要显式初始化 和 的grid
字段block
。初始化期间未提供的任何字段都将初始化为 1。
您可以更改grid
和block
分配的字段,例如
grid.x = 512;
block.y = 64;