도와주세요. 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);
}
에서 부른다.
cmake ../src -DCMAKE_CXX_COMPILER=pgc++ -DCMAKE_CXX_FLAGS="-acc -Minfo=all -Mcuda=llvm"
프로그램을 컴파일하지만 작동하지 않습니다. 콘솔 행에 출력되지 않고 중단됩니다. 장치에 할당 된 배열을 이동하는 방법 (cudaMemcpy 또는 다른 방법으로)? CUDA를 사용하기에 충분합니까? 프로젝트를 올바르게 빌드합니까 (-Mcuda = llvm이 필요합니까?)? 2) 내가 또 다른 질문이 있습니다 : 하나는
#pragma acc parallel loop
for(int i=0; i<N; ++i)
{...}
변수 N
는 호스트에 할당해야하거나 GPU에서도있을 수 있습니다 쓴다면?