Я хотел бы попробовать следующий пример кода C++ AMP из документации Microsoft:
(Второй пример кода на https://msdn.microsoft.com/en-us/library/hh265136.aspx, немного адаптированный для превращения в программу):
#include "stdafx.h"
#include <amp.h>
#include <iostream>
using namespace concurrency;
const int size = 5;
void CppAmpMethod() {
int aCPP[] = { 1, 2, 3, 4, 5 };
int bCPP[] = { 6, 7, 8, 9, 10 };
int sumCPP[size];
// Create C++ AMP objects.
array_view<const int, 1> a(size, aCPP);
array_view<const int, 1> b(size, bCPP);
array_view<int, 1> sum(size, sumCPP);
sum.discard_data();
parallel_for_each(
// Define the compute domain, which is the set of threads that are created.
sum.extent,
// Define the code to run on each thread on the accelerator.
[=](index<1> idx) restrict(amp)
{
sum[idx] = a[idx] + b[idx];
}
);
// Print the results. The expected output is "7, 9, 11, 13, 15".
for (int i = 0; i < size; i++) {
std::cout << sum[i] << "\n";
}
}
int main()
{
CppAmpMethod();
return 0;
}
К сожалению, при компиляции (с использованием Visual Studio 2015) и выполнении это вызывает исключение времени выполнения для первой из конструкций array_view.
'ConsoleApplication2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\nvwgf2um.dll'. Cannot find or open the PDB file.
'ConsoleApplication2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\psapi.dll'. Cannot find or open the PDB file.
Exception thrown at 0x0F9CC933 (vcamp140d.dll) in ConsoleApplication2.exe: 0xC0000005: Access violation reading location 0xCDCDCDCD.
Мне интересно, как такой простой пример кода мог так сильно потерпеть неудачу. Это пример кода неверен или это компилятор? Конечно, это также может быть что-то особенное для моей системы, поскольку, в конце концов, использование C++ AMP может включать низкоуровневое взаимодействие с графическим драйвером и т. д., что может вызвать там ошибки. Любая помощь будет принята с благодарностью!