我下载了NVIDIA计算工具包(包含CUDA 9.0 SDK)。在SDK中,有一个名为cppIntegration的Visual项目。
在cppIntegration项目中,有类型为char*的变量使用cudaMalloc()分配内存,然后使用cudaMemcpy()将数据复制到这些变量中。在Visual中调试项目时,我可以看到char*变量指出的内存地址,但是当我试图使用调试器中的内存窗口读取该内存时,我只会反复看到?? ?? ??。
.cu项目中的cppIntegration文件如下(仅显示与问题相关的代码):
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***?** 所指向的实际内存数据?
发布于 2017-11-01 21:43:16
您无法在主机(= CPU)调试器中查看此内存。cudaMalloc分配设备(= GPU)内存,因此指针返回到GPU内存中,在主机上没有任何意义。从主机的角度来看,设备内存指针只是一个黑匣子值.只有设备代码才能取消引用。
要想在调试时查看设备内存的内容,必须使用设备调试器(如NSight或cuda)并在设备代码中放置断点。我没有这方面的经验,虽然,所以我不能提供更多的信息。
如果要在主机上查看此类内存,则必须将其复制到主机内存中。cudaMemcpy(..., cudaMemcpyDeviceToHost)和类似的函数就是这样做的。
https://stackoverflow.com/questions/47064031
复制相似问题