【发布时间】:2010-10-19 20:04:37
【问题描述】:
如果我的算法受到主机到设备和设备到主机内存传输的瓶颈,唯一的解决方案是不同的还是修改后的算法?
【问题讨论】:
如果我的算法受到主机到设备和设备到主机内存传输的瓶颈,唯一的解决方案是不同的还是修改后的算法?
【问题讨论】:
您可以尝试以下几件事来缓解 PCIe 瓶颈:
请注意,这些技术都不能加快传输速度,它们只是减少了 GPU 等待数据到达的时间。
使用cudaMemcpyAsync API 函数,您可以启动传输,启动一个或多个不依赖传输结果的内核,同步主机和设备,然后启动内核正在等待传输完成。如果您可以构建算法,以便在传输过程中进行高效工作,那么异步副本是一个很好的解决方案。
使用cudaHostAlloc API 函数,您可以分配可以直接从 GPU 读取和写入的主机内存。这更快的原因是需要主机数据的块只需要等待一小部分数据被传输。相比之下,通常的方法是让所有块等到整个传输完成。映射内存本质上是将大型单片传输分解为一堆或更小的复制操作,因此延迟减少了。
您可以在CUDA Programming Guide 的第 3.2.6-3.2.7 节和CUDA Best Practices Guide 的第 3.1 节中阅读有关这些主题的更多信息。 OpenCL Best Practices Guide 的第 3 章解释了如何在 OpenCL 中使用这些功能。
【讨论】:
您确实需要进行数学运算,以确保您将在 GPU 上进行足够的处理,从而值得在主机和 GPU 之间传输数据。理想情况下,您应该在设计阶段执行此操作,然后再进行任何编码,因为这可能会破坏交易。
【讨论】: