首页 > 解决方案 > CUDA 执行时间与块大小的比较

问题描述

目标很简单:使用 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 是否会导致结果出现问题?

标签: cudanvidia

解决方案


因此,这些线程块中的每一个都将被转换为扭曲,并且当您将每个线程块的线程数增加 32 时,您每次都会减少发散线程的百分比。例如,如果您为每个线程块启动 33 个线程,则每个线程块将有 1 个扭曲,所有 32 个通道都处于活动状态,另一个只有 1 个通道处于活动状态。因此,在测试的每个增量中,您并没有增加发散量,您只是在该线程块中增加了 1 个活动扭曲。

如果您也没有正确扩展您的应用程序,那么无论如何您的所有工作都将能够同时安排,因此不会对执行时间产生任何影响。

希望这可以帮助!


推荐阅读