【发布时间】:2019-03-26 03:11:15
【问题描述】:
目标很简单:使用 CUDA 绘制块大小对执行时间的影响。人们期望看到的是,对于每个 32 的倍数的块大小,执行时间最短,在这些倍数之后(例如 33、65、97、129,...),执行时间应该会增加。然而,这不是我得到的结果。执行时间只是下降然后变平。
我在 NVIDIA GeForce 940M 上运行 CUDA 运行时 10.0。
我尝试了几种获取执行时间的方法。 CUDA 文档中推荐的内容说以下应该可以工作:
cudaEventCreate(&gpu_execution_start);
cudaEventCreate(&gpu_execution_end);
cudaEventRecord(gpu_execution_start);
kernel<<<n_blocks,blocksize>>> (device_a, device_b, device_out, arraysize);
cudaEventRecord(gpu_execution_end);
cudaEventSynchronize(gpu_execution_end);
然而,这种计时方式会产生前面提到的结果。
问题是否在于执行时间?或者特定的 GPU 是否会导致结果出现问题?
【问题讨论】:
-
你的内核实际上做了什么?你是保持线程的总数不变,只是改变你使用的块数,还是保持块的数量不变,只是继续向块添加线程?如果你正在做的是增加线程的总数,那么额外的线程会做什么?
-
在我的一个应用程序中,8x8x8 块需要 8 秒,9x9x9 块需要 5 秒,10x10x10 需要 11 秒。块大小与时间没有通用答案,取决于内核。