CUDA: Почему иногда используются побитовые операторы быстрее, чем логические операторы?

Когда я пытаюсь выжать из ядра последние биты производительности, я обычно обнаруживаю, что замена логических операторов( &&и ||) на побитовые операторы( &и |) делают ядро ​​немного быстрее. Это было замечено при просмотре сводки времени ядра в CUDA Visual Profiler.

Итак, почему побитовые операторы быстрее, чем логические операторы в CUDA? Должен признать, что они не всегдабыстрее, но во много раз. Интересно, какую магию может дать это ускорение.

Отказ от ответственности: мне известно, что логические операторы имеют короткое замыкание, а побитовые операторы — нет. Я хорошо знаю, как эти операторы могут использоваться неправильно, что приводит к неправильному коду. Я использую эту замену с осторожностью только тогда, когда результирующая логика остается прежней, есть ускорение, и полученное таким образом ускорение имеет значение для меня :-)

11
задан Ashwin Nanjappa 28 March 2012 в 11:42
поделиться