有没有办法在 Cuda 中打印 dim3 值 - 网格尺寸、块尺寸?

cal*_*vin 4 cuda

我正在尝试打印我已使用的线程数(在我的代码中声明)以及我正在创建的块数。它们的类型为:dim3(我正在使用 C 编程。)

我的代码看起来像下面这样:

//Declared a NxN grid
*int N = 4; //Num of rows
int numThreads = 4;
dim3 dimBlock(numThreads);
dim3 dimGrid((N/dimBlock.x)+(!(N%dimBlock.x)?0:1));
Run Code Online (Sandbox Code Playgroud)

您能帮我了解如何在终端上打印此信息吗?使用 printf,要使用哪个说明符;就像我们使用 %d 表示 int,%f 表示 float 等。

小智 5

在启动内核之前,您可以使用此类代码来显示块中的网格尺寸以及线程中的块尺寸:

dim3 gridDim;
dim3 blockDim;

// here you set gridDim and blockDim to some values

printf("Grid : {%d, %d, %d} blocks. Blocks : {%d, %d, %d} threads.\n",
gridDim.x, gridDim.y, gridDim.z, blockDim.x, blockDim.y, blockDim.z);

kernel<<<gridDim, blockDim>>>();
Run Code Online (Sandbox Code Playgroud)

通过一些研究,您可以轻松找到如何做到这一点。另请记住,您有一个涵盖 dim3 向量类型的文档

该类型是基于 uint3 的整数向量类型,用于指定维度。定义 dim3 类型的变量时,任何未指定的组件都将初始化为 1。

因此,由于它使用无符号整数,您也可以在 printf 调用中使用 %u 而不是 %d。