Воронкообразный сдвиг - что это?
При чтении через Руководство по программированию CUDA 5.0 я наткнулся на функцию под названием "Смещение последовательности", которая присутствует в устройстве с поддержкой вычислений, но не в 3.0. Он содержит аннотацию "см. Справочное руководство", но когда я ищу термин "сдвиг воронки" в руководстве, я ничего не нахожу.
Я попробовал поиск по сайту, но только нашел упоминание в http://www.cudahandbook.com в главе 8:
8.2.3 Смещение воронки (SM 3.5)
GK110 добавил 64-битную инструкцию "сдвиг воронки", к которой можно получить доступ со следующими характеристиками:
__ funnelshift_lc(): возвращает наиболее значимые 32 бита сдвига левой воронки.
__ funnelshift_rc(): возвращает наименее значимые 32 бит правильного сдвига воронки.
Эти встроенные функции реализованы как встроенное устройство функции (используя встроенный ассемблер PTX) в sm_35_intrinsics.h.
... но он все еще не объясняет, что такое "сдвиг левой воронки" или "правый сдвиг воронки".
Итак, что это такое и где он нужен?
Ответы
Ответ 1
В случае CUDA два 32-разрядных регистра объединяются вместе в 64-битное значение; это значение смещено влево или вправо; и наиболее значимые (для сдвига влево) или наименее значимые (для правого сдвига) возвращаются 32 бита.
Внутренние свойства из sm_35_intrinsics.h
следующие:
unsigned int __funnelshift_lc(unsigned int lo, unsigned int hi, unsigned int shift);
unsigned int __funnelshift_rc(unsigned int lo, unsigned int hi, unsigned int shift);
Согласно Энди Глоу (удаленная ссылка удалена), приложения для сдвига воронки включают быструю смещенную memcpy; и, как упоминает njuffa в комментариях выше, его можно использовать для реализации поворота, если два входных слова одинаковы.