Хороший способ поделиться полосой переноса флага в сборке AMD GCN? - PullRequest
0 голосов
/ 26 октября 2018

Мне нужно добавить два ulong.

Первая половина (младшие 32 бита) каждого номера сохраняется в дорожках с четным идентификатором, а вторая половина (старшие 32 бита) сохраняется в соседней полосе (следующий нечетный идентификатор).

Таким образом, одна дорожка добавляет младшие 32 бита, а одна дорожка добавляет старшие 32 бита.

Проблема в том, что если у младшей 32-битной суммы есть флаг переноса, мне нужно добавить этот флаг к старшей 32-битной сумме.

Один из способов может быть таким (для a + = b):

v_add_co_u32 %[a], vcc, %[b], %[a]  
v_addc_co_u32 %[carry], vcc, 0, 0, vcc  
v_add_co_u32_dpp %[a], vcc, %[carry], %[a] quad_perm[1, 0, 3, 2]  

Вторая строка нужна, потому что мне нужно перевести флаг переноса в число, чтобы я мог разделить его между строк, используя инструкцию dpp в строке 3.

Есть ли лучший способ сделать это? Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...