gpt4 book ai didi

c++ - cudaMemcpy 无效参数

转载 作者:行者123 更新时间:2023-11-27 23:01:12 25 4
gpt4 key购买 nike

我在运行 cudaMemcpy 以从我的 GPU 取回一些数据时遇到了一些问题。 cudaErrorString 是“无效参数”,它发生在从设备到主机的 memcpy 上。这是我的独立代码:

//To render particles out of.
GLfloat* particleRenderData = new GLfloat[particleContainer.size() * 4];

//particlePosBuffer lives on GPU and is used to copy updated particle data
//Back to the OpenGL Buffer.
GLfloat *particlePosBuffer;
cudaStatus = cudaMalloc((void**)&particlePosBuffer, particleContainer.size() * sizeof(GLfloat)* 4);
CUDA_CHECK_STATUS;

//CalcBuffer is our points. CUDA will modify it on GPU.
Point3D *calcBuffer;
cudaStatus = cudaMalloc((void**)&calcBuffer, particleContainer.size() * sizeof(Point3D));
CUDA_CHECK_STATUS;
cudaStatus = cudaMemcpy(calcBuffer, &particleContainer[0], particleContainer.size() * sizeof(Point3D), cudaMemcpyHostToDevice);
CUDA_CHECK_STATUS;

update << <1, 1 >> > (calcBuffer, particlePosBuffer, particleContainer.size(), 1.0);
cudaThreadSynchronize();

cudaStatus = cudaMemcpy(particlePosBuffer, particleRenderData, particleContainer.size() * sizeof(GLfloat)* 4, cudaMemcpyDeviceToHost);
CUDA_CHECK_STATUS;

particleContainer是一个Point3D类型的 vector ,是我写的一个类。设备的第一个 memcpy 成功,我比较了主机和设备缓冲区以确保这一点。截至目前,更新可能不是问题。使用或不使用它都会出现此问题。同样与同步。我尝试过许多不同的方法,包括将 particlePosBuffer 和 renderData 转换为 void*,仅传递引用,以及两者。

我在 Visual Studio 2013 中使用 CUDA 6.5。GPU 是 gtx 770,我正在编译 compute_30、sm_30。
我希望有人可以帮助我解决这个问题,我在这里非常困难。

最佳答案

你这里有问题:

cudaStatus = cudaMemcpy(particlePosBuffer, particleRenderData, particleContainer.size() * sizeof(GLfloat)* 4, cudaMemcpyDeviceToHost);

这是从设备到主机的传输。就像 memcpy 一样,cudaMemcpy 的第一个参数总是目标指针。所以你有你的前 2 个参数颠倒了。它应该是这样的:

cudaStatus = cudaMemcpy(particleRenderData, particlePosBuffer, particleContainer.size() * sizeof(GLfloat)* 4, cudaMemcpyDeviceToHost);

particlePosBuffer 是一个设备指针,它是这个操作的

particleRenderData 是一个宿主指针,它是这个操作的目的地

关于c++ - cudaMemcpy 无效参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27474846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com