膨大なコードの最適化を開始しようとしていますが、モジュラス演算子が使用されたときにどの操作が実行されるかを正確に知る必要があります。かなり長い間検索してきましたが、その背後にあるマシン コードについては何も見つかりません。何か案は?
3 に答える
知る必要がある場合
モジュラス演算子が使用されたときに実行される正確な操作
それなら、「やり方が間違っている」と思います。
モジュラスは、OS および基盤となるアーキテクチャによって異なる場合があります。異なる場合もそうでない場合もありますが、実装に依存する必要がある場合は、他の場所で時間を費やすのが最善の方法です。実装が同じままであること、または異なるマシン間で一貫していることは保証されていません。
モジュラスが計算の主要なソースであると考える理由は何ですか? 実装に関係なく、操作は一定である可能性が非常に高くなります。つまり、定数時間よりも大きい big-O を持つアルゴリズム内で操作している場合は、最初にアルゴリズムを最適化します。
最適化が必要な理由を自問してください。計算に予想よりも (大幅に) 時間がかかっていますか?
次に、計算の 90 ~ 99% が費やされている場所を自問してください。時間が費やされている場所を知っていると思われる場合でも、プロファイラーを使用して数値を取得してみてください。それはあなたに手がかりを与えたり、バグに光を当てるかもしれません.
整数のモジュラス演算子は、ほとんどのプラットフォームに組み込まれています。除算と同等のタイミングで命令を実行し、剰余を生成します。
コンパイラは、2 の累乗である除数の最適化を実行できます。たとえば、の剰余を実行する代わりにx % 512
、コンパイラは潜在的に高速な を使用できますx & 0x01FF
。
何か案は?
はい、時間を無駄にしないでください。コンパイラ自身の仕事でコンパイラを打ち負かそうとするよりもはるかに改善できるコードが他にもあるでしょう。