Требуется ли для C ++ Amp аппаратное обеспечение графического процессора перед его сборкой / выполнением? - PullRequest
0 голосов
/ 23 января 2019

Узнав от предыдущего вопроса , что мой проект 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 Ответ

0 голосов
/ 25 января 2019

Нет, аппаратное обеспечение графического процессора не требуется.После запуска успешно скомпилированной программы, без аппаратного обеспечения графического процессора, система создала «программный» графический процессор, как показано в выводе при отладке.

'Amp2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\d3d11ref.dll'. [...]
GPU Device Created.

Я использовал доступный инструмент диагностики графического процессора для оценки производительности.

CPU/GPU Utilization Chart

...