我正在尝试使用 VS 2010 的 Parallel Nsight 2.1 版本来优化我的 CUDA 程序。
我的程序在带有 GTX 480 板的 Windows 7(32 位)机器上运行。我已经安装了 CUDA 4.1 32 位工具包和 301.32 驱动程序。
程序中的一个周期包括将主机数据复制到设备、执行内核以及将结果从设备复制到主机。
正如您在下面的分析器结果图片中看到的那样,内核在四个不同的流中运行。每个流中的内核依赖于“流 2”中复制到设备的数据。这就是为什么 asyncMemcpy 在不同流中启动内核之前与 CPU 同步的原因。
图片中让我恼火的是第一次内核启动结束(10.5778679285)和内核执行开始(10.5781500)之间的巨大差距。启动内核大约需要 300 我们,这在不到 1 毫秒的处理周期中是一个巨大的开销。
此外,内核执行和将结果的数据复制回主机没有重叠,这进一步增加了开销。
这种行为有什么明显的原因吗?