cuda - NSight 调试在任何内存分配上都非常慢
问题描述
我正在尝试调试使用一些表面对象和 cuda 数组的内核。为此,我将 NVIDIA NSight 与我的 VS2017 一起使用,在下一代模式下进行调试。但是,在我的内核启动之前,它需要永远(等待 10 分钟,然后取消运行)来运行cudaMallocArray
必要的调用。有什么办法吗?
下面的最小代码实际上除了分配所述数组之外什么都不做,它需要永远执行 NSight 调试。
主.cpp:
#include <cuda_runtime.h>
int main() {
int width = 800;
int height = 600;
// Allocate CUDA arrays in device memory
cudaChannelFormatDesc colorDescription = cudaCreateChannelDesc(8, 8, 8, 8, cudaChannelFormatKindUnsigned);
cudaChannelFormatDesc depthDescription = cudaCreateChannelDesc(32, 0, 0, 0, cudaChannelFormatKindFloat);
cudaArray *colorArray;
cudaMallocArray(&colorArray, &colorDescription, width, height, cudaArraySurfaceLoadStore);
cudaArray *depthArray;
cudaMallocArray(&depthArray, &depthDescription, width, height, cudaArraySurfaceLoadStore);
return 0;
}
更新:
我设法用普通的替换表面cudaMalloc
——结果相同。
规格详情:
- 系统:Windows 10 Pro,64 位(v. 1803,内部版本 17134.829)
- GPU:GeForce GTX 780(普通,没有'Ti'或任何东西)
- GPU 驱动程序 430.86
- CUDA 诉 10.1.168
- Nsight诉2019.2.0.19109
编辑2:
经过进一步调查,我停止了我的简单程序(cudaMalloc
而不是数组)的执行,调用堆栈显示了这一点:
ntdll.dll!00007ffc9b69b1e4() Unknown
kernel32.dll!00007ffc9aecb093() Unknown
kernel32.dll!00007ffc9af096f5() Unknown
nvcuda.dll!00007ffc4037a38c() Unknown
nvcuda.dll!00007ffc4037a532() Unknown
nvcuda.dll!00007ffc40379dae() Unknown
nvcuda.dll!00007ffc40377b05() Unknown
nvcuda.dll!00007ffc40374515() Unknown
nvcuda.dll!00007ffc405cd13b() Unknown
nvcuda.dll!00007ffc40442807() Unknown
nvcuda.dll!00007ffc4054bb84() Unknown
nvcuda.dll!00007ffc4055abed() Unknown
nvcuda.dll!00007ffc4055aee6() Unknown
nvcuda.dll!00007ffc4055a022() Unknown
nvcuda.dll!00007ffc4054b163() Unknown
nvcuda.dll!00007ffc4040b4c7() Unknown
nvcuda.dll!00007ffc4040ea85() Unknown
nvcuda.dll!00007ffc4030588c() Unknown
nvcuda.dll!00007ffc4049a3e8() Unknown
NSightSlow.exe!cudart::contextStateManager::initPrimaryContext(struct cudart::device *) C++
NSightSlow.exe!cudart::contextStateManager::tryInitPrimaryContext(struct cudart::device *) C++
NSightSlow.exe!cudart::contextStateManager::initDriverContext(void) C++
NSightSlow.exe!cudart::contextStateManager::getRuntimeContextState(class cudart::contextState * *,bool) C++
NSightSlow.exe!cudart::doLazyInitContextState(void) C++
NSightSlow.exe!cudart::cudaApiMalloc(void * *,unsigned __int64) C++
NSightSlow.exe!cudaMalloc() C++
> NSightSlow.exe!main() Line 10 C++
NSightSlow.exe!invoke_main() Line 79 C++
NSightSlow.exe!__scrt_common_main_seh() Line 288 C++
NSightSlow.exe!__scrt_common_main() Line 331 C++
NSightSlow.exe!mainCRTStartup() Line 17 C++
kernel32.dll!00007ffc9aec4034() Unknown
ntdll.dll!00007ffc9b6d3691() Unknown
它似乎与第一个 CUDA 函数调用上的(惰性)上下文创建有关。可能与cudaMalloc
具体无关。
解决方案
我从 NVidia 雇主那里得到反馈,开普勒架构不支持下一代,比如我的 GTX 780。应该有适当的错误消息,但没有。
有一个详细的列表,其中支持以下内容:
推荐阅读
- javascript - 如何在单击静态 HTML 表单时停留在当前页面
- javascript - 未捕获的 ReferenceError:未定义工具提示
- python - 列表(或元组)的 __str__ 显示 Datetime 的 __repr__ ,因此不可读
- mysql - 数据库表中某些组的 MySQL 自动增量
- javascript - 比较字符串 firestore 和 React Native
- python - 比较两个日期时间列每次都会产生不同的结果
- python - 当托管在 pypi 上时,请求返回不同的 ip
- html - 按类使用 div 作为背景图像
- mysql - MySQL 版本 8.0.17 - 仅替换字符串中的第一个空格
- python - 如何从 URL 格式 YYYY-MM-DD.csv 转换成 csv