• に登録
  • 歴史・時代・伝奇

やらかしました

モンゴメリ・リダクションの実装。たいへんやらかしました。

いや、実装は正しいんですよ。問題は無駄な処理。
明日公開の話で終了、コードコミットは今日で終わり、の予定だったんだけども、これはちょっと許容できないな、と言うわけでゴリッと対処しました。
仕方がないので最終話にちょっと手を入れ最適化の話を追加。最終話のコードコミットはないはずだったんだけどなあ。

とはいえこのモンゴメリ・リダクションの最適化で中国剰余定理のありなしで3倍違うようになりました。理論値に近づいてホッとしています。

余談ですが一番効いたのがミラー・ラビンテスト。通常の実装とモンゴメリ・リダクション適用とでおおよそ10倍速だったのが最適化後は70倍速になりました。
モンゴメリ・リダクションの最適化だけでそこからさらに7倍……。
いや、モンゴメリ・リダクション適用で10倍速くなったんでいやっふーしたのが間違いだったんです。でも脳汁出ちゃうよね。10倍ですよ10倍。
今回の追加で追い脳汁出ましたけど、最初から出せよって話です。
さらに公開鍵計算においてもモンゴメリ・リダクション最適化前後で3倍違いました。

ホントやらかしですわね……orz

4件のコメント

  • 10倍来たらそこで脳汁出てやめますね。うん。でもそこからさらに3倍かぁ。効き目ありますねぇ。
  • ・処理時間の8割はコード全体の2割が食う
    ・ループ最奥の処理を疑え

    まんまこの原則通りでした。
    安全側に振ってあってコピー上等だったんですが、表に出ないならインプレース化でよいですし、そもそもモンゴメリ領域の演算上、中でオーバーランしないので入口でチェックしたら後は正当性チェックいらないし……というそういう最適化ですね。
    ほんとやらかしです。
  • 中国の古い算術書に記されてた例題が、計算負荷を大きく削減するヒントになってるというのが面白いですねぇ。
  • 結局重たい処理は除算というか剰余計算で、モンゴメリ・リダクションも中国剰余定理もとにかくそこをどうにかしようというアイディアなんですよね。
    頭のいい人はすごいなあ(小並感)

    ただ公開鍵側の処理はどうにもできないのでべき乗の計算条件で高速化しよう、というものになっています。
    ここは理由付けとして無理やりフェルマーに敬意を、としてF4を採用していますけどもここは私の意識が入っています。

    16ビットCPUで65537はどうなのよ……w
コメントの投稿にはユーザー登録(無料)が必要です。もしくは、ログイン
投稿する