【问题标题】:C++AMP ARRAY_VIEW in matlab slow GPUmatlab慢速GPU中的C++AMP ARRAY_VIEW
【发布时间】:2014-03-22 21:33:26
【问题描述】:
void Addx(float *z, float *x, float *y, size_t m, size_t n)
{
vector<float > vx(m*n); 
vector<float > vy(m*n);
vector<float > vz(m*n);

vx.assign(x, x + n*m);
vy.assign(y, y + n*m);
pick_accelerator();

extent<2> e(m, n);
array_view<const float, 2> xg(e, vx), yg(e, vy);
array_view<float, 2> zg(e, vz);
zg.discard_data();
parallel_for_each(e, [=](index<2> idx) restrict(amp)
{
zg[idx] = xg[idx] + yg[idx];
});

zg.synchronize();

for (int count = 0; count < m*n; count++)
{
    z[count] = vz[count];

}
}

我的 GPU 是 HD 7790,该程序在 matlab mex 中实现。 C++AMP。 我看到这个程序比 CPU Phenom II X6 (1055T) 2.8GHZ 慢。

Size Array 1024x1024
GPU Elapsed time is 0.026684 seconds. 
CPU Elapsed time is 0.004970 seconds.

我看到程序比 CPU Phenom II X6 (1055T) 800MHZ(慢 4 倍)慢。

Size Array 1024x1024
GPU Elapsed time is 0.064891 seconds.
CPU Elapsed time is 0.009650 seconds.

CPU 和 GPU 传输内存之间的关系。 我如何加速 GPU 程序?

CPU 130 Gflops AIDA64x FP (Phenom II X6 1055T)
GPU 1820 Gflops AIDA64x FP (HD 7790 OC)

【问题讨论】:

  • 如何在 MATLAB 中访问地址内存 GPU Radeon

标签: c++ arrays matlab visual-studio-2012 c++-amp


【解决方案1】:

我认为您在 GPU 上进行的计算不足以抵消复制数据的额外成本。您正在复制每个数组 4Mb 的数据,并且只在 GPU 上执行 1024 * 1024 加法操作。对于这样一个简单的算法,也没有机会使用 tile 静态内存(比全局内存快得多)。所以从几个方面来说,这对于任何 GPU 解决方案来说都是最糟糕的情况。

由于额外的复制时间,这可能永远不会比在 CPU 上更快。我假设这只是一个“hello world”测试程序,而您实际上将要实现一些更复杂的东西。在这种情况下,您应该会看到更好的结果。

注意:您正确使用了discard_data()array_view&lt;const float, 2&gt;,因此您已经将所需的副本数量降至最低。

确保您正在使用适当的编译器优化标志测试发布版本,以获得最佳时机。

墨西哥

关于 MEX(我从未使用过),我不确定它是否有任何特殊功能可以让您访问 GPU 内存或资源,而不是通过 C++AMP 或 CUDA 等 API。以下论文可能有用,Accelerating MATLAB Code Using GPUs。如果您的应用程序使用也在 GPU 上运行的另一个框架,则可以映射到 DirectX 缓冲区和 C++AMP array 实例。这在 Interoperability between Direct 3D and C++ AMPC++ AMP Book 的第 11 章中有介绍。

【讨论】:

  • 谢谢。如何使用 mex 在 MATLAB 中访问地址内存 GPU C++AMP?
  • 所以你问的是不同的问题吗?所以可能最好单独发布。我认为这只是涵盖从 CPU 到 GPU 的一般复制性能问题。我为 MEX 部分的答案添加了一个链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
相关资源
最近更新 更多