C++Amp 在构建/执行之前是否需要 GPU 硬件?
Does C++Amp require GPU hardware before it will build / execute?
从 了解到我的 VS 2017 C++ AMP 项目基本上是正确的,正确的错误消息掩盖了真正的问题,并且问题是某些代码行,我重写了代码如下。通过一次注释掉多行,我了解到
extent<2> e(M,N);
index<2> idx(0,0);
将构建并执行,该代码类似于
array_view<int, 2> c(e, vC);
for (idx[0] = 0; idx[0] < e[0]; idx[0]++)
将构建,但如果 运行 将抛出异常,并且该代码类似于
c[idx] = a[idx] + b[idx];
甚至不会构建。请注意,我还没有调用任何并行函数。
这让我问:并发运行时或 C++ AMP 是否需要安装 GPU 硬件才能构建 and/or 正确执行?
我的机器有两个多核 CPU 处理器,但尚未安装 GPU 硬件。不过,我认为我可以使用并行结构来利用我现有的处理器。
#include "pch.h"
#include <iostream>
#include "amp.h"
#include <vector>
using namespace Concurrency;
int main() {
const int M = 1024; const int N = 1024; //row, col for vector
std::vector<int> vA(M*N); std::vector<int> vB(M*N); //vectors to add
std::vector<int> vC(M*N); //vector for result
for (int i = 0; i < M; i++) { vA[i] = i; } //populate vectors
for (int j = N - 1; j >= 0; j--) { vB[j] = j; }
extent<2> e(M, N); //uses AMP constructs but
index<2> idx(0, 0); //no parallel functions invoked
array_view<int, 2> a(e, vA), b(e, vB);
array_view<int, 2> c(e, vC);
for (idx[0] = 0; idx[0] < e[0]; idx[0]++) {
for (idx[1] = 0; idx[1] < e[1]; idx[1]++) {
c[idx] = a[idx] + b[idx];
c(idx[0], idx[1]) = a(idx[0], idx[1]) + b(idx[0], idx[1]);
}
}
}
不,不需要 GPU 硬件。启动成功编译的程序后,在没有 GPU 硬件的情况下,系统创建了一个 "software" GPU,如调试时的输出所示。
'Amp2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\d3d11ref.dll'. [...]
GPU Device Created.
我使用了可用的 GPU 诊断工具来查看性能。
从
extent<2> e(M,N);
index<2> idx(0,0);
将构建并执行,该代码类似于
array_view<int, 2> c(e, vC);
for (idx[0] = 0; idx[0] < e[0]; idx[0]++)
将构建,但如果 运行 将抛出异常,并且该代码类似于
c[idx] = a[idx] + b[idx];
甚至不会构建。请注意,我还没有调用任何并行函数。 这让我问:并发运行时或 C++ AMP 是否需要安装 GPU 硬件才能构建 and/or 正确执行?
我的机器有两个多核 CPU 处理器,但尚未安装 GPU 硬件。不过,我认为我可以使用并行结构来利用我现有的处理器。
#include "pch.h"
#include <iostream>
#include "amp.h"
#include <vector>
using namespace Concurrency;
int main() {
const int M = 1024; const int N = 1024; //row, col for vector
std::vector<int> vA(M*N); std::vector<int> vB(M*N); //vectors to add
std::vector<int> vC(M*N); //vector for result
for (int i = 0; i < M; i++) { vA[i] = i; } //populate vectors
for (int j = N - 1; j >= 0; j--) { vB[j] = j; }
extent<2> e(M, N); //uses AMP constructs but
index<2> idx(0, 0); //no parallel functions invoked
array_view<int, 2> a(e, vA), b(e, vB);
array_view<int, 2> c(e, vC);
for (idx[0] = 0; idx[0] < e[0]; idx[0]++) {
for (idx[1] = 0; idx[1] < e[1]; idx[1]++) {
c[idx] = a[idx] + b[idx];
c(idx[0], idx[1]) = a(idx[0], idx[1]) + b(idx[0], idx[1]);
}
}
}
不,不需要 GPU 硬件。启动成功编译的程序后,在没有 GPU 硬件的情况下,系统创建了一个 "software" GPU,如调试时的输出所示。
'Amp2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\d3d11ref.dll'. [...]
GPU Device Created.
我使用了可用的 GPU 诊断工具来查看性能。