none
C++ AMP: error C3861: _Access: идентификатор не найден RRS feed

  • Вопрос

  • Код взят из журнала MSDN «C++ Введение в C++ AMP».

    #include <amp.h>             // заголовочный файл C++ AMP
    #include <iostream>          // для std::cout и т. д.
    using namespace concurrency; // так меньше набирать кода :)
    using std::vector;// то же самое; берется из <vector> в amp.h
    
    void perform_calculation(
    vector<int> & vA, vector<int> & vB,
    vector<int> & vC, int M, int N)
    {
    	extent<2> e(M, N);
    	array_view<int, 2> a(e, vA), b(e, vB);
    	array_view<int, 2> c(e, vC);
    	c.discard_data();
    	index<2> idx(0, 0);
    	parallel_for_each(e, [=](index<2> idx) restrict(amp)
    	{
    		c[idx] = a[idx] + b[idx];
    	});
    	c.synchronize();
    }
    
    void do_it()
    {
    	// Строки и столбцы для матрицы
    	const int M = 1024;
    	const int N = 1024;
    	// Создаем хранилище для матрицы указанных размеров
    	vector<int> vA(M * N);
    	vector<int> vB(M * N);
    	// Заполняем матричные объекты
    	int i = 0;
    	std::generate(vA.begin(), vA.end(), [&i]() {return i++; });
    	std::generate(vB.begin(), vB.end(), [&i]() {return i--; });
    	// Выходное хранилище для матричных вычислений
    	vector<int> vC(M * N);
    	perform_calculation(vA, vB, vC, M, N);
    }
    
    int main()
    {
    	do_it();
    	std::cout << "Hit any key to exit..." << std::endl;
    	std::cin.get();
    }

    Код пытаюсь запустись в среде Visual Studio 2019. Предварительно никаких ошибок не находит, но при компиляции выдаёт:

    amp.h(2616): error C3861: _Access: идентификатор не найден.

    error C3588: приведение "unknown-type" к "void *" не поддерживается в коде, ограниченном AMP

    Не совсем понимаю, что я делаю не так, если даже код с сайта MSDN не компилируется. Пробовал на нескольких компьютерах — выдаёт одну и ту же ошибку.

    14 августа 2019 г. 9:14

Ответы

  • Нашёл решение проблемы.

    В amp.h на 2616 строчке перед _Access нужно было добавить this->

    void * _Ptr = this->_Access(_Read_write_access, _Index);

    После этого проблема была устранена.

    • Помечено в качестве ответа Miralius 14 августа 2019 г. 12:13
    14 августа 2019 г. 12:13