【发布时间】:2018-05-06 10:41:22
【问题描述】:
请帮忙。 1)我需要使用 memcpy 来移动分配在 gpu 上的数组。我不能使用 std::memcpy 因为它“没有 acc 例程”(编译器输出)。我的代码是
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) 我从主机调用
#pragma acc data copy(cp)
{
cudaMemcpy(&particles[cp01[0][0]],&particles[cp01[1][0]],cp*sizeof(Particle),cudaMemcpyDeviceToDevice);
}
我使用标题
#include <cuda_runtime.h>
用于使用 CUDA。并将项目构建为
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 上?
【问题讨论】:
标签: openacc