由于线程触发的顺序,并行打印使得跟踪变量变得非常困难。
因此,我在一行中打印了许多变量进行测试。
我正在尝试从 printf 中的 bool 数组打印 45 个索引,如下所示:
printf( "[%hu%hu%hu%hu%hu][%hu%hu%hu%hu%hu][%hu%hu%hu%hu%hu]\n"
"[%hu%hu%hu%hu%hu][%hu%hu%hu%hu%hu][%hu%hu%hu%hu%hu]\n"
"[%hu%hu%hu%hu%hu][%hu%hu%hu%hu%hu][%hu%hu%hu%hu%hu]\n\n",
u[0],
u[1],
u[2],
u[3],
u[4],
u[5],
u[6],
u[7],
u[8],
u[9],
u[10],
u[11],
u[12],
u[13],
u[14],
u[15],
u[16],
u[17],
u[18],
u[19]
u[20],
u[21],
u[22],
u[23],
u[24],
u[25],
u[26],
u[27],
u[28],
u[29],
u[30],
u[31],
u[32],
u[33],
u[34],
u[35],
u[36],
u[37],
u[38],
u[39],
u[40],
u[41],
u[42],
u[43],
u[44],
u[45]);
这显然是在内核中运行的,并且它可以工作,但输出如下:
这里的每个线程输出都用双线分隔。
到目前为止我尝试过的:
size_t sz = 1048576 * 10000;
cudaDeviceSetLimit(cudaLimitPrintfFifoSize, sz);
不知道为什么我最后会得到垃圾值——我最好的猜测是堆栈本身已经耗尽了内存?
有谁知道如何在 cuda 内核中 printf 45 个参数?
注意:我只使用纯 C 版本,直接使用 nvcc 和 Visual Studio 的 cl.exe 进行编译