Точка останова в настоящее время не будет достигнута. Никакой исполняемый код типа целевого кода отладчика не связан с этим файлом - PullRequest
0 голосов
/ 09 января 2020

У меня проблема с отладкой cuda kernal. Однако точки останова в функции Kernal никогда не достигаются. Я пытался удалить этот проект и заново сгенерировать с помощью CMake, но он все еще не работает. Ядро кода выглядит следующим образом:

__global__ void testKernel(int val)
{
    printf("[%d, %d]:\t\tValue is:%d\n", \
        blockIdx.y*gridDim.x + blockIdx.x, \
        threadIdx.z*blockDim.x*blockDim.y + threadIdx.y*blockDim.x + threadIdx.x, \
        val);
}

Я думаю, что проблема связана не с кодом ядра, а с конфигурациями этого проекта. Потому что этот ядро ​​может быть отлажено в проектах CUDA Samples.

Я использую Debug -> Windows -> Modules и нахожу, что моя цель .lib не загружена. Когда я выбираю CUDA Thread, Break Mode показывает:

Ваше приложение перешло в состояние останова, но в настоящее время не выполняется код, поддерживаемый выбранным механизмом отладки (например, только собственный код времени выполнения) выполняется).

1 Ответ

1 голос
/ 10 января 2020

Это потому, что отсутствует -g при компиляции файла .cu с использованием компилятора nvcc. Исходный файл CUDA_NVCC_FLAGS в CMakelists.txt:

SET (CUDA_NVCC_FLAGS $ {CUDA_NVCC_FLAGS}; - gencode arch = compute_75, code = sm_75;)

После исправления :

SET (CUDA_NVCC_FLAGS $ {CUDA_NVCC_FLAGS}; -g; -G; -gencode arch = compute_75, code = sm_75;)

Теперь мы можем использовать Nsight отладить функцию ядра.

...