为何Nsight Systems无法识别8GB数据的CUDA统一内存迁移?
问题:Nsight Systems为何无法识别8GB数据量下的CUDA统一内存迁移操作?
我的CUDA代码如下:
float *dev; size_t size = 1024 * 1024 * 1024; // size_t size = 1024 * 1024 * 1024 * 2L; cudaMallocManaged((void**)&dev, size *sizeof(float)); initialData(dev, size); // 由CPU初始化数据 TestKernel<<<>>>(dev, size);
我通过cudaMallocManaged分配统一内存,先由CPU初始化dev指针(此时数据存储在主机内存),之后调用cudaMemPrefetchAsync将所有数据预取至GPU,理论上应该触发Host-To-Device(HtoD)的数据迁移。
以下是4GB和8GB数据量下的Nsight Systems分析结果:
4GB数据量的分析结果
迁移记录清晰可见:
[5/9] Executing 'cuda_gpu_mem_time_sum' stats report Time (%) Total Time (ns) Count Avg (ns) Med (ns) Min (ns) Max (ns) StdDev (ns) Operation -------- --------------- ----- -------- -------- -------- -------- ----------- --------------------------------- 100.0 163,782,529 2,048 79,971.9 79,903.0 79,711 92,415 813.2 [CUDA Unified Memory memcpy HtoD] [6/9] Executing 'cuda_gpu_mem_size_sum' stats report Total (MB) Count Avg (MB) Med (MB) Min (MB) Max (MB) StdDev (MB) Operation ---------- ----- -------- -------- -------- -------- ----------- --------------------------------- 4,294.967 2,048 2.097 2.097 2.097 2.097 0.000 [CUDA Unified Memory memcpy HtoD]
8GB数据量的分析结果
无任何迁移相关记录,所有内存数据检测项均被跳过:
[5/9] Executing 'cuda_gpu_mem_time_sum' stats report SKIPPED: /data00/home/mem_test/report14.sqlite does not contain GPU memory data. [6/9] Executing 'cuda_gpu_mem_size_sum' stats report SKIPPED: /data00/home/mem_test/report14.sqlite does not contain GPU memory data. [7/9] Executing 'um_sum' stats report SKIPPED: /data00/home/mem_test/report14.sqlite does not contain CUDA memory transfers data. [8/9] Executing 'um_total_sum' stats report SKIPPED: /data00/home/mem_test/report14.sqlite does not contain CUDA memory transfers data. [9/9] Executing 'um_cpu_page_faults_sum' stats report SKIPPED: /data00/home/mem_test/report14.sqlite does not contain CUDA Unified Memory CPU page faults data.
附上Nsight Systems的GUI截图:
请问为何Nsight Systems无法识别8GB数据量下的CUDA统一内存迁移操作?
内容的提问来源于stack exchange,提问作者xiaobin
相关产品推荐
相关产品推荐

