假设我有一个如下所示的 CPU 端数据源:
vector< vector<int> > cpuBlobOData;
假设里面的每个行向量都具有相同的大小(一个锯齿状的二维向量,不是锯齿状的)。
我想将其复制到数组内的单个 GPU 内存块。有没有办法逐行执行此操作?像这样的东西:
array<int, 2> gpuArray(cpuBlobOData.size(), numColumns);
for(size_t i=0; i<cpuBlobOData.size(); ++i)
{
auto cpuRow = cpuBlobOData[i];
concurrency::copy(cpuRow.begin(), cpuRow.end(), &gpuArray[i]);
}
我知道这不会编译,它显示了我正在尝试做的事情。有什么东西可以做到这一点吗?我能找到的唯一解决方案是将 cpu 向量复制到一维向量中,并将其映射到 array_view,或者将其复制到数组中。
这行得通,但很浪费,而且对于某些算法,连续的一维向量可能不适合剩余的内存空间。
欢迎任何建议,因为我正在努力找出 AMP。