Matrix &引用;CudaLaunch返回(0x9)“;,以及节目时间安排问题
我写了一个CUDA程序,关于这个程序我有两个问题Matrix &引用;CudaLaunch返回(0x9)“;,以及节目时间安排问题,matrix,cuda,gpu,timing,Matrix,Cuda,Gpu,Timing,我写了一个CUDA程序,关于这个程序我有两个问题 当我调用内核函数时,我知道block\u len必须是1024。当我使用cuda gdb和Nsight进行调试时,出现了预期的“cudaLaunch returned(0x9)”错误。如果我在没有调试的情况下运行程序,程序运行平稳,计算结果与使用CPU时相同(没有并行性),这表明我的计算是正确的。为什么错误的程序可以得到正确的结果 dim3 dimBlock(length, length); dim3 dimGrid(1, 1); float
dim3 dimBlock(length, length);
dim3 dimGrid(1, 1);
float a2;
cudaEvent_t t1, t2;
cudaEventCreate(&t1);
cudaEventCreate(&t2);
cudaEventRecord(t1, 0);
kernel<<<dimGrid, dimBlock>>>(dev_d, dev_D);
cudaEventRecord(t2, 0);
cudaEventSynchronize(t1);
cudaEventSynchronize(t2);
cudaEventElapsedTime(&a2,t1,t2);
printf("kernel time: %f (ms)\n",a2);
length
>32时,您将非法启动内核,并且您的内核将不会运行或产生任何结果。您可以通过在内核启动之前清除输出数据来确认这一点。例如,如果dev\u D
包含内核的输出,则执行如下操作:
cudaMemset(dev_D, 0, length*length*sizeof(dev_D[0]));
kernel<<<dimGrid, dimBlock>>>(dev_d, dev_D);
cudaMemset(dev_D,0,length*length*sizeof(dev_D[0]);
内核(dev_d,dev_d);
如果这样做,内核无法运行,那么在dev\u D
中肯定会得到0,而不是预期的结果length
参数大于32时,每个块请求的线程数超过1024个,这在CUDA中是非法的。因此内核不运行(如果您想确认这一点,请使用适当的CUDA错误检查。)当内核不运行时,测得的启动时间比内核运行时要短得多我证实了你的说法,你的回答是正确的。多谢各位。
kernel time: 37.341919 (ms)
kernel time: 0.004128 (ms)
cudaMemset(dev_D, 0, length*length*sizeof(dev_D[0]));
kernel<<<dimGrid, dimBlock>>>(dev_d, dev_D);