1

在 Nvida CUDA C 编程指南 4.0 的第 3.2.5.5.4 节中,它说如果在它们之间发出设备到设备的内存副本,则来自不同流的两个命令不能同时运行。我不确定它到底是什么意思。希望有人能澄清我的困惑。

假设我的程序有两个流,流 0 和流 1。以下是内核启动到这些流的顺序。

内核 0.0(流 0;假设执行时间为 10 毫秒)

内核 1.0(流 1;假设执行时间为 1 毫秒)

内核 1.1(流 1;假设执行时间为 3 毫秒)

内核 1.2(流 1;此内核导致设备到设备的内存复制,假设执行时间为 1 毫秒)

内核 1.3(流 1;假设执行时间为 6 毫秒)

我们还假设程序没有其他开销,并且 GPU 有足够的 SM 来同时运行这些内核。我的问题是内核 0.0 是否可以与内核 1.2 和内核 1.3 同时运行?整个程序的运行时间是多少?

4

1 回答 1

1

如前所述,设备到设备的内存复制是使用cudaMemcpy()主机完成的;内核可以随意读写全局内存。如果内核在不同的流中,它们可能会重叠,但不能保证。确切的加速将取决于每个内核的 SM 利用率。Nvidia 建议使用事件来计时内核执行(启动和停止计时器)以确定重叠版本是否比顺序版本快。您可以将此输出与将内核切换到流 0 或在分析器中运行您的应用程序进行比较,这会序列化内核执行。

于 2012-05-11T14:46:25.133 回答