次のような CPU 側のデータのソースがあるとします。
vector< vector<int> > cpuBlobOData;
内部のすべての行ベクトルが同じサイズ (ギザギザではないギザギザの 2D ベクトル) であると仮定します。
これを配列内の 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 ベクトルを 1D ベクトルにコピーし、それを array_view にマップするか、配列にコピーすることでした。
それは機能しますが、無駄が多く、一部のアルゴリズムでは、連続する 1D ベクトルが残りのメモリ空間に収まらない場合があります。
私はAMPを理解するのに苦労しているので、どんなアドバイスも大歓迎です.