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