Перевод встроенного asm CUDA с ГАЗА на Intel - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть некоторый код C-CUDA, который содержит встроенную сборку PTX , которая компилирует нормально в Linux с бэкэндом g ++.

Мне нужно собрать его под Windows, и, очевидно, бэкэнд MSVC делаетне распознает inline asm должным образом - выдает ошибки типа "не строка asm".Я предполагаю, что это связано с синтаксисом, в котором написана эта сборка PTX, например:

    asm volatile ("subc.cc.u32 %0, %0, "q2_s";": "+r"(c[2]));
    asm volatile ("subc.cc.u32 %0, %0, "q3_s";": "+r"(c[3]));

Я не очень разбираюсь в сборке, и мне интересно - есть ли какой-то переводчик из стиля GAS (at & t) вСинтаксис Intel?

Или есть какой-то обходной путь для сборки ядер CUDA для PTX в Linux, а затем для сборки PTX и ссылки на оставшийся код в Windows?Я пробовал это, но PTX-компилятор в linux дает функциям ядра некоторые неузнаваемые _Z-начальные имена, а компоновщик не знает, как связать материал.

1 Ответ

1 голос
/ 18 апреля 2019

Оказывается, проблема была не во встроенном asm, а в предварительной обработке, например, asm string

asm volatile ("subc.cc.u32 %0, %0, "q2_s";": "+r"(c[2]));

, опирающейся на это определение

#define q2_s "0xAF48A03B"

В Linux он компилируется безошибки, но в Windows выдало ошибку «ожидается строка asm».Таким образом, обходной путь для Windows заключался в жестком кодировании шестнадцатеричных значений в asm-строках, и он не имеет ничего общего с синтаксисом сборки, извините за неправильное указание.

...