N >> 3 или n & 3 дают какое-либо преимущество перед n / 8 или n% 8 соответственно? - PullRequest
1 голос
/ 16 марта 2020

В моей программной памяти и времени процессора есть ограничения, также этот расчет будет выполняться примерно 50000 раз каждую секунду. Будет ли увеличение производительности, если побитовые операторы будут использоваться вместо арифметических c?

Ответы [ 2 ]

3 голосов
/ 16 марта 2020

Маловероятно, что это что-то изменит; Процессоры не будут заботиться о подобных вещах в течение десятилетий.

В общем, если вы беспокоитесь о производительности, прежде чем у вас есть какие-либо реальные данные о том, что производительность ниже ваших потребностей - вы будете иметь плохое время. Современное аппаратное обеспечение и оптимизирующий код JVM настолько невероятно сложны, что даже сами инженеры JVM по производительности отмечают, что им очень тяжело просто посмотреть на код и потом догадаться, можно ли его сделать быстрее с помощью дешевых уловок, таких как попытка заменить деление на битовое смещение.

Решение состоит в том, чтобы просто никогда не заниматься такими вещами: если у вас есть потребности в производительности, запишите их и используйте профилировщики, чтобы выяснить, где искать (потому что обычно 99% Ресурсы ЦП расходуются на 1% или менее кода - поэтому перед началом измерения производительности необходимо знать что измерить).

Как только вы знаете, используйте JMH для проверки производительности. Вот для чего это.

IF JMH говорит вам, что битовое смещение быстрее (я в этом сильно сомневаюсь), знайте, что этот результат не обязательно переводится в другую архитектуру ЦП.

1 голос
/ 16 марта 2020

Мои наблюдения за проведением некоторого простого тестирования указывают на то, что да, это имеет значение. Нет, я не использовал JMH, поэтому я знаю, что верну немного pu sh. Но независимо от порядка тестирования побитовые операции всегда выполнялись быстрее. Я не могу сказать, если быстрое равно преимуществу, но пока не доказано иное, я буду продолжать отдавать им предпочтение, когда это возможно.

  • (i&1) == 1 быстрее, чем i%2 == 1
  • i>>3 это быстрее, чем i/8

И я уже видел это в коде API, документирован как более быстрый, но я не пробовал.

  • a<<6 + a<<5 + a<<2 vs a*100

И вот это для сдвига битов.

Arithemeti c Контрольный показатель

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