C++ 从CPU到设备的结构向量的深度拷贝
我有一个结构向量,如下所示:C++ 从CPU到设备的结构向量的深度拷贝,c++,cuda,gpgpu,C++,Cuda,Gpgpu,我有一个结构向量,如下所示: struct nuc{ double Ax; double Ay; double Az; }; struct Cont{ int owner_ID; nuc A; double c[20]; double e[20]; int am; int size; double nrn; }; struct L{
struct nuc{
double Ax;
double Ay;
double Az;
};
struct Cont{
int owner_ID;
nuc A;
double c[20];
double e[20];
int am;
int size;
double nrn;
};
struct L{
int n1;
int n2;
int n3;
};
struct Atomic_Orbital{
L ag;
Cont cont;
};
vector<Atomic_Orbital> B;
B.resize(100);
for(int i=0; i<100; i++)
{
.........
}
struct-nuc{
双斧;
双Y;
双Az;
};
结构控制{
int所有者ID;
nuc A;
双c[20];
双e[20];
国际调幅;
整数大小;
双nrn;
};
结构L{
int-n1;
int n2;
int n3;
};
结构原子轨道{
L银;
续续;
};
载体B;
B.调整大小(100);
对于(int i=0;istd::vector
而言,它在内存中连续存储其元素,基本上是一个普通数组,添加了奇特的访问器和大小调整器。而且,由于所讨论的所有结构都是可复制的(它们只包含POD类型,没有自定义的复制/移动构造函数),cudaMemcpy
可以很好地复制它们。所以您可以这样做:
Atomic_Orbital *devPtr;
size_t size = B.size() * sizeof(Atomic_Orbital);
cudaMalloc(&devPtr, size);
cudaMemcpy(devPtr, B.data(), size, cudaMemcpyHostToDevice);
(省略了错误检查、琐碎的强制转换等)
要将数据从设备复制回主机,只需使用相反的复制方向:
cudaMemcpy(B.data(), devPtr, size, cudaMemcpyDeviceToHost);
std::vector
将其元素连续存储在内存中,它基本上是一个普通数组,添加了奇特的访问器和大小调整器。而且由于所有相关结构都是可复制的(它们只包含POD类型,没有自定义的复制/移动构造函数),cudaMemcpy
可以很好地复制它们。所以您可以这样做:
Atomic_Orbital *devPtr;
size_t size = B.size() * sizeof(Atomic_Orbital);
cudaMalloc(&devPtr, size);
cudaMemcpy(devPtr, B.data(), size, cudaMemcpyHostToDevice);
(省略了错误检查、琐碎的强制转换等)
要将数据从设备复制回主机,只需使用相反的复制方向:
cudaMemcpy(B.data(), devPtr, size, cudaMemcpyDeviceToHost);
非常感谢您的回答(输入:CudaMemcpyHostToDevice->CudaMemcpyHostToDevice),我如何将数据带回CPU?非常感谢您的回答(输入:CudaMemcpyHostToDevice->CudaMemcpyHostToDevice),我如何将数据带回CPU?