9

我刚刚开始学习 C++ AMP,并且已经获得了一些使用 VS 2012 RC 构建的示例,但我发现 GPU 的性能比 CPU 慢。例如,Kate Gregory 的例子: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 i7 2630QM 与 Intel HD 可与 AMD 6770 切换(我让它在性能模式下运行,所以它应该使用 6770)
  • 系统 3:Intel i5 750 和 2xCrossfire AMD HD 5850

结果示例:第 4 章项目结果为 1.15 毫秒 CPU、2.57 毫秒 GPU、2.55 毫秒 GPU 平铺。

编辑

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

4

1 回答 1

7

似乎您的首要问题是为什么将事物转移到 GPU 并不总能为您带来好处。答案是复制时间。想象一个计算时间与 n 平方成正比。复制所花费的时间与 n 成正比。您可能需要相当大的 n 才能花时间在 GPU 之间进行复制,而不是在那里进行计算所节省的时间。

本书在前几章中简要提到了这一点,第 7 章和第 8 章都是关于性能和优化的。第 7 章现在是关于粗剪的;第 8 章应该很快就会出现。(它的代码已经在 Codeplex - Reduction 案例研究中。)

我刚刚签入了第 4 章代码的更新,它使用了 Tech Ed 的起始编号,而不是之前的编号。较小的矩阵在向/从 GPU 复制时损失了太多时间;较大的需要太长时间才能成为一个好的演示。但是请随意玩弄这些尺寸。让它们更大,因为你不介意一两分钟的“死气”,看看会发生什么。

于 2012-08-07T11:34:46.333 回答