CUDA: Почему побитовые операторы иногда быстрее, чем логические операторы?
Когда я собираюсь выжать из ядра последнюю часть производительности, я обычно нахожу заменулогические операторы (&&
а также||
) с участиемпобитовые операторы (&
а также|
) делает ядро немного быстрее. Это наблюдалось при просмотре сводки времени ядра в CUDA Visual Profiler.
Итак, почему побитовые операторыБыстрее чем логические операторы в CUDA? Я должен признать, что онине всегда быстрее, но много раз они есть. Интересно, что волшебство может дать это ускорение.
Отказ от ответственности: я знаю, что логические операторы короткого замыкания и побитовые операторы не делают. Я хорошо знаю, как эти операторы могут быть использованы неправильно, что приведет к неправильному коду. Я использую эту замену с осторожностью, только когда результирующая логика остается прежней, ускорение и полученное таким образом ускорение имеют для меня значение :-)