gpt4 book ai didi

c++ - 使用 cudaMalloc 分配的内存显示为 `?? ?? ??`

转载 作者:行者123 更新时间:2023-11-30 03:27:47 27 4
gpt4 key购买 nike

我下载了 NVIDIA Computing Toolkit(包含 CUDA 9.0 SDK)。在 SDK 中,有一个名为 cppIntegration 的 Visual Studio 项目。

cppIntegration项目中,有char*类型的变量,使用cudaMalloc()分配内存,然后将数据复制到这些使用 cudaMemcpy() 的变量。在 Visual Studio 中调试项目时,我可以看到 char* 变量指向的内存地址,但是当我尝试使用调试器中的内存窗口读取该内存时,我只看到 ?? ?? ?? 重复。

cppIntegration工程中的.cu文件如下(仅展示与问题相关的代码):

extern "C" bool
runTest(const int argc, const char **argv, char *data, int2 *data_int2, unsigned int len)
{
// use command-line specified CUDA device, otherwise use device with highest Gflops/s
findCudaDevice(argc, (const char **)argv);

const unsigned int num_threads = len / 4;
assert(0 == (len % 4));
const unsigned int mem_size = sizeof(char) * len;
const unsigned int mem_size_int2 = sizeof(int2) * len;

// allocate device memory
char *d_data;
checkCudaErrors(cudaMalloc((void **) &d_data, mem_size));
// copy host memory to device
checkCudaErrors(cudaMemcpy(d_data, data, mem_size,
cudaMemcpyHostToDevice));
...
...
...
}

runTest()main() 调用。

我尝试查看 d_data 指向的数据,但它显示为 ?? ?? ??如何查看char*指向的实际内存数据?

最佳答案

您无法在主机(= CPU)调试器中查看此内存。 cudaMalloc 分配设备(= GPU)内存,因此指针返回指向 GPU 内存并且在主机上没有任何意义。从主机的角度来看,设备内存指针只是一个黑盒值。只有设备代码可以取消引用它。

为了能够在调试时查看设备内存的内容,您必须使用设备调试器(例如 NSight 或 cuda-gdb)并在设备代码中放置一个断点。不过,我没有这方面的经验,因此无法提供更多信息。

如果你想在主机上查看这样的内存,你必须将它复制到主机内存中。这就是 cudaMemcpy(..., cudaMemcpyDeviceToHost) 和类似函数的作用。

关于c++ - 使用 cudaMalloc 分配的内存显示为 `?? ?? ??`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47064031/

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