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 проблемы:

  1. Глобальная переменная должна быть объявлена ​​вне области ядра.
  2. Архитектура должна быть установлена ​​на sm_30 и выше (это относится только к этому конкретному случаю и детали не показаны)
  3. Версия ядра должна быть установлена ​​на 3.0 и выше (это также относится только к этому конкретному случаю и деталям, не показанным в вопросе)

Проблема исправлена.

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