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»

Есть ли способ получить значение глобальной переменной, объявленной в ядре на хост, или каким-либо образом обойти эту проблему другим подходом?

0

Решение

Было 3 проблемы:

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]