"Не удалось разрешить имя" при отладке ядра ALEA с помощью атомарной операции (atomic_add)

Я использую ALEA GPU для программирования на GPU (C#). Если я использую атомарную операцию, такую ​​как atomic_add в ядре, я получаю ошибку "Не удалось разрешить имя" в окне CUDA WarpWatch для моих переменных во время отладки ядра. Я вижу значения blockIdx.x, blockDim.x, threadIdx.x и массивов, но имена переменных не могут быть разрешены. Ядро работает как положено, но во время отладки невозможно отслеживать переменные, что затрудняет исправление любой ошибки. CUDA 8 Toolkit установлен, и я использую Visual Studio 2015.

Есть идеи?

1 ответ

Это происходит из-за некоторых оптимизаций, выполняемых бэкэндом NVIDIA NVVM, независимо от того, скомпилирован ли он в режиме отладки или выпуска. Он присваивает некоторым значениям регистры, и в настоящее время нет способа изменить это значение. Поведение CUDA C очень похоже. Единственный способ получить результаты - записать их в глобальную память, чтобы обмануть распределение регистров, или записать их в консоль ядра, как вы это сделали. На данный момент я не знаю другого подхода.

Другие вопросы по тегам