При записи PTX в отдельный файл параметр ядра может быть загружен в регистр с помощью:
.reg .u32 test;
ld.param.u32 test, [test_param];
Однако, при использовании встроенного PTX, Использование встроенной сборки PTX в CUDA (версия 01) примечание к приложению описывает синтаксис, в котором загрузка параметра тесно связана с другой операцией.Он предоставляет такой пример:
asm("add.s32 %0, %1, %2;" : "=r"(i) : "r"(j), "r"(k));
, который генерирует:
ld.s32 r1, [j];
ld.s32 r2, [k];
add.s32 r3, r1, r2;
st.s32 [i], r3;
Во многих случаях необходимо разделить две операции.Например, может потребоваться сохранить параметр в регистре вне цикла, а затем повторно использовать и модифицировать регистр внутри цикла.Единственный способ сделать это - использовать дополнительную инструкцию mov, чтобы переместить параметр из регистра, в который он был загружен неявно, в другой регистр, который я смогу использовать позже.
Есть ли способизбежать этой дополнительной инструкции mov при переходе от PTX в отдельном файле к встроенному PTX?