CUDA PTX, драйвер API - как получить глобальную переменную из ядра после выполнения
Вот часть кода ядра - объявление переменных и желаемой операции для каждого потока
.global.f32 sum = 0.0
.reg.f32 reg;
atom.global.add.f32 reg, [sum], val;
Я хочу добавить разные переменные в каждом потоке к глобальной переменной sum. Я полагаю, что приведенный выше код является правильным - все компилируется. Но у меня проблема с получением значения глобальной переменной sum обратно на хост.
У меня есть следующий код для хоста, после выполнения ядра.
CUdeviceptr hostSumPtr;
size_t bytes;
cuModuleGetGlobal(&hostSumPtr, &bytes, hModule, "sum");
но это возвращает код ошибки 500 "CUDA_ERROR_NOT_FOUND"
Есть ли способ получить значение глобальной переменной, объявленной в ядре на хост, или каким-либо образом обойти эту проблему другим подходом?
1 ответ
Решение
Было 3 проблемы:
- Глобальная переменная должна быть объявлена вне области ядра.
- Архитектура должна быть установлена на sm_30 и выше (это относится только к этому конкретному случаю и детали не показаны)
- Версия ядра должна быть установлена на 3.0 и выше (это также относится только к этому конкретному случаю и деталям, не показанным в вопросе)
Проблема исправлена.