使用 cudaMemcpy 时,如果尝试访问 cudaMemcpy 函数外部的设备指针,则可能会发生分段错误。这是因为,即使设备指针是通过引用传递的,也禁止在主机代码中取消引用它们。
要解决此问题,您必须按照以下步骤操作:
# Allocate device memory for host pointer cudaMalloc((void**)&A, sizeof(float)); # Copy host pointer value to device pointer cudaMemcpy(&A, &(Grid_dev->cdata[i]), sizeof(float *), cudaMemcpyDeviceToHost); # Update host pointer to point to device array CurrentGrid->cdata[i] = new float[size]; # Copy device array to host cudaMemcpy(CurrentGrid->cdata[i], A, size*sizeof(float), cudaMemcpyDeviceToHost);
以上是为什么 cudaMemcpy 会导致分段错误,以及如何修复设备指针取消引用错误?的详细内容。更多信息请关注PHP中文网其他相关文章!