2012-02-02 100 views
2

我想问一下在CUDA中写入全局内存的效果。众所周知,全局内存读取通常会对性能产生很大影响(合并,缓存,存储体冲突),因为它们可能需要相当多的周期来等待传入的内存,这可能会暂时阻止执行。在CUDA中写入全局内存

但是,在CUDA中写入内存怎么样?它是否遭受任何类型的内存写入模式?总成本是否直接是内核中所有写入的总和?

任何相关的参考文献和意见,将不胜感激。

+4

这正是那种使用实验程序探索会很有趣的问题。您可以编写基本的OpenCL或CUDA程序,以各种模式执行数百万次的读写操作。在循环中反复运行测试,并查看平均得到的结果。这可能是学习每个API的无聊部分来引导的好方法。 – James 2012-02-02 05:56:20

+0

感谢詹姆斯的评论! – Zk1001 2012-02-04 10:50:02

回答

2

一般来说,您的问题的答案是“是”,商店类似于负载。不同之处在于,由于商店是“火并且遗忘”的,如果有工作要做并不取决于存储的地址,那么在发布商店之后,多处理器可以立即运行该商店,并且只有当遇到读写后依赖性。

有关完整的详细信息,我建议阅读最新CUDA programming guide的5.3.2节。

有关不同架构系列的具体信息,另请参阅该文档的附录F.例如,计算能力1.x比计算能力2.x(费米)设备具有更多的性能“悬崖”。

+0

感谢您的回答。我意识到这个理论的大部分可以通过微观基准来证实。然而,当费米来到现场时,很少有事情会变得混乱。我注意到在费米之前,有记忆合并的性能计数器,但现在它们已经消失了!这背后有什么理由吗?我不认为记忆合并对Fermi完全没有影响(对于读写),而是它的概念由于缓存的贡献而变得复杂。所以,我的猜测,这就是NVIDIA为什么要移除这些计数器。任何人都有这个想法吗? – Zk1001 2012-02-04 10:59:27

+0

是的,这是正确的。计数器被缓存命中/未命中计数器替换。最新的可视化剖析器版本(4.1)通过从计数器中构建有用的指标而非显示原始计数器数据,可以更轻松地解释这些数据。在Fermi上,这取决于获取的缓存行数量,而不是合并的内存段数量。 – harrism 2012-02-06 00:24:28