Оптимизировано по модулю постоянной во время выполнения - PullRequest
0 голосов
/ 25 июня 2018

Компиляторы часто имеют различные методы для оптимизации деления и по модулю константы на другие операции.Это описано в хакерском восторге (см. Также на этой странице ).

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

Вопрос: можем ли мы во время выполнения предварительно вычислить необходимые константы для такой оптимизированной операции по модулю, чтобы ее можно было использовать для вычисления операции по модулюбыстрее, чем использование инструкции по модулю?

В статье, посвященной восхищению хакеров, основное внимание уделяется делению, а не остатку, хотя, конечно, остаток можно вычислить с использованием rem = n - m * div, где n / m = div + rem / m..

Одна вещь, которая меня беспокоит в связи с этим, заключается в том, что когда это делается с помощью компилятора, константы являются фактическими константами в инструкциях, в то время как если они выполняются во время выполнения, они также будут ссылками на память.Я не знаю, возможно ли генерировать исполняемые инструкции во время выполнения, чтобы преодолеть это.

...