助けてください。 1)私はgpuに割り当てられた配列を動かすためにmemcpyを使う必要があります。私はstd :: memcpyを使用することはできません。なぜなら、 "accルーチンはありません"(コンパイル出力)ためです。私のコードはopenaccのデバイス配列にmemcpyを使用
const int GL=100000;
Particle particles[GL];
int cp01[2][GL];
#pragma acc declare create(particles,cp01)
...
です。私はcudaMemcpyをopenaccで使用できると読んでいます。 function_device()(not able to fill the array allocated on the gpu)に私はCUDAを使用するためのヘッダ
#include <cuda_runtime.h>
を使用するホスト
#pragma acc data copy(cp)
{
cudaMemcpy(&particles[cp01[0][0]],&particles[cp01[1][0]],cp*sizeof(Particle),cudaMemcpyDeviceToDevice);
}
から呼び出します。
プログラムはコンパイルされますが、動作しません。コンソール回線に出力されずにハングアップします。 デバイスに割り当てられた配列を移動するには(cudaMemcpyを使用するなど)それにはCUDAを使用するのに十分なものが含まれていますか?私はプロジェクトを正しくビルドしますか?(-Mcuda = llvmは必要ですか?) 2)私はまた別の質問を持っている:1は
#pragma acc parallel loop
for(int i=0; i<N; ++i)
{...}
を書き込むと、変数Nは、ホストのみに割り当てなければならないか、それは、GPU上であってもよいですか?