Может ли кто-нибудь помочь мне точно понять шаг, который здесь не работает?
Я пытаюсь использовать C++-AMP для выполнения параллельных циклов, однако, несмотря на отсутствие проблем или ошибок в моем процессе, я не могу получить свои окончательные данные.
Я хочу вытащить свои данные с помощью их отображения
m_pDeviceContext->Map(pBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource);
{
blah
}
Но я работал над этим целыми днями без единого дюйма прогресса.
Вот все, что я делаю с C++-AMP:
Конструктор: я инициализирую свои переменные, потому что я должен
: m_AcceleratorView(concurrency::direct3d::create_accelerator_view(reinterpret_cast<IUnknown *>(_pDevice)))
, m_myArray(_uiNumElement, m_AcceleratorView)
Я копирую исходные данные в массив C++-AMP
concurrency::copy(Data.begin(), m_myArray);
Я делаю что-то с данными
concurrency::parallel_for_each(...) restrict(amp)
{
blah
}
Вроде все нормально, ошибок нет.
Однако следующим шагом, который я хочу сделать, является извлечение данных из буфера, что, похоже, не работает:
ID3D11Buffer* pBuffer = reinterpret_cast<ID3D11Buffer *>(concurrency::direct3d::get_buffer(m_myArray));
Когда я сопоставляю эти данные (deviceContext->Map), данные внутри 0x00000000
Какой шаг я забыл, что позволит мне прочитать эти данные? Даже когда я пытаюсь установить тип доступа для чтения/записи процессора, я получаю сообщение об ошибке, и я даже не видел, чтобы ни одна из моих ссылок делала это таким образом:
m_Accelerator.set_default_cpu_access_type(concurrency::access_type::access_type_read_write);
Это создает ошибку, говорящую, что «ускоритель не поддерживает нулевое копирование».
Может ли кто-нибудь помочь мне и сказать, почему я не могу прочитать свой буфер и как это исправить?
m_myArray
- это concurrency::array, а не array_view. Вы пробовали array_view? Затем вы можете вызвать синхронизацию(), которая сделает копию за вас. - person acraig5075   schedule 10.11.2014