gpt4 book ai didi

c++ - 使用 C++-AMP 访问缓冲区

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:01 35 4
gpt4 key购买 nike

有人可以帮我准确理解这里不起作用的步骤吗?

我正在尝试使用 C++-AMP 执行并行 for 循环,但是尽管在我的过​​程中没有遇到任何问题或错误,但我无法获得最终数据。

我想通过映射的方式提取我的数据

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

我忘记了哪一步可以让我读取这些数据?即使当我尝试设置 CPU 读/写访问类型时,我也会收到错误消息,而且我什至没有看到我的任何引用都是这样做的:

m_Accelerator.set_default_cpu_access_type(concurrency::access_type::access_type_read_write);

这会产生一个错误,提示“加速器不支持零拷贝”

任何人都可以帮助我并告诉我为什么我无法读取我的缓冲区,以及如何解决它?

最佳答案

以下代码应该适用于此。您还应该检查您的 DX 设备和 C++AMP 加速器是否与相同的硬件相关联。

HRESULT hr = S_OK;
array<int, 1> arr(1024);
CComPtr<ID3D11Buffer> buffer;
IUnknown* unkBuf = get_buffer(arr);
hr = unkBuf->QueryInterface(__uuidof(ID3D11Buffer), reinterpret_cast<LPVOID*>(&buffer));

这个问题的答案告诉你如何做相反的事情。

Reading Buffer Data using C++ AMP

关于c++ - 使用 C++-AMP 访问缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26830118/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com