具有比CPU慢的GPU的C ++ AMP

时间:2012-08-06 21:08:21

标签: c++ visual-c++ c++-amp

我刚刚开始学习C ++ AMP,并且我已经获得了一些我用VS 2012 RC构建的示例,但我发现GPU的性能比CPU慢。例如,凯特格雷戈里的例子:http://ampbook.codeplex.com/releases/view/90595(与她即将出版的书http://www.gregcons.com/cppamp/相关)。她在演讲中展示了她们,通过使用她的笔记本电脑的GPU(我相信她说它是6650)与CPU(不知道她有什么CPU)相比,她在第4章的例子中获得了约5倍的性能提升。我已经尝试过自己测试这个例子以及几个系统配置(如下所示)我总是发现CPU更快。我还测试了其他例子并发现了相同的例子。难道我做错了什么?性能低于预期的原因是否有原因?有没有人有一个肯定会表明GPU更快的例子?

  • 系统1:带有板载显卡的Intel i7 2600K(我希望这是 慢)
  • 系统2:采用Intel HD的Intel i7 2630QM可与AMD切换 6770(我让它在性能模式下运行所以它应该使用 6770)
  • 系统3:采用2xCrossfire AMD HD 5850的Intel i5 750

结果示例:第4章项目结果为1.15ms CPU,2.57ms GPU,2.55ms GPU平铺。

修改

Doh,我想我刚刚找到了原因 - 她在讲座中使用的矩阵大小的值是不同的。网站上的样本使用M = N = W = 64。如果我在讲座中使用64,512和256,那么我的性能会相应提高~5倍。

1 个答案:

答案 0 :(得分:7)

似乎您的首要问题是为什么将内容移动到GPU并不总能为您带来好处。答案是复制时间。想象一下,计算需要一段时间才能达到n平方。复制需要与n成比例的时间。你可能需要相当多的n才能花费时间复制到GPU和从GPU复制到实现计算时节省的时间。

本书在前几章简要提到了这一点,第7章和第8章都是关于性能和优化的。第7章现在正在进行粗略削减;第8章应该很快就会出现。 (其代码已经在Codeplex上 - 减少案例研究。)

我刚刚检查了第4章代码的更新,该代码使用的是Tech Ed起始编号,而不是以前的编号。较小的矩阵会丢失太多时间来复制GPU;较大的那些花费太长时间才能成为一个好的演示。但是你可以随意玩这些尺码。让它们变得更大,因为你不介意一两分钟的“死气”,看看会发生什么。