Отладка NSight очень медленная при любом выделении памяти - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь отладить ядро, которое использует некоторые поверхностные объекты и массивы cuda. Для этого я использую NVIDIA NSight с VS2017, отлаживая в режиме Next-Gen. Тем не менее, требуется бесконечно (подождать 10 минут, затем отменить запуск), чтобы выполнить cudaMallocArray вызовов, которые являются необходимыми вызовами до запуска моего ядра. Есть ли способ обойти это?

Следующий минимальный код, который на самом деле ничего не делает, кроме размещения указанных массивов, выполняется с отладкой NSight вечно.

main.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-разрядная (версия 1803, сборка 17134,829)
  • GPU: GeForce GTX 780 (обычный, без «Ti» или чего-либо еще)
  • Драйвер графического процессора 430.86
  • CUDA v. 10.1.168
  • Nsight v. 2019.2.0.19109

Edit2:

После дальнейшего изучения я остановил выполнение моей простой программы (с 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.

1 Ответ

1 голос
/ 03 июля 2019

Я получил ответ от работодателя NVidia о том, что Next-Gen не поддерживается архитектурой Kepler, как мой GTX 780. Должно быть соответствующее сообщение об ошибке, но его не было.

Подробный списокчто поддерживается где:

https://developer.nvidia.com/nsight-visual-studio-edition-supported-gpus-full-list#SupportedComputeConfigs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...