Требуется ли для C++Amp аппаратное обеспечение графического процессора перед его сборкой / выполнением?
После изучения предыдущего вопроса о том, что мой проект 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];
не будет даже строить. Обратите внимание, что я еще не вызывал никаких параллельных функций. Это заставляет меня задаться вопросом: требует ли Concurrency Runtime или C++ AMP, чтобы оборудование 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]);
}
}
}
1 ответ
Нет, аппаратное обеспечение графического процессора не требуется. После запуска успешно скомпилированной программы без аппаратного GPU система создала "программный" GPU, как показано в выходных данных при отладке.
'Amp2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\d3d11ref.dll'. [...]
GPU Device Created.
Я использовал доступный инструмент диагностики GPU, чтобы посмотреть на производительность.