Home

ハード編

ハード編(補足)

MRESの論理改善

楕円暗号では連続でモンゴメリ乗算器を利用することが多い、DPレジスタをカウントアップするXCOUNTは、CMPと重複割り当てになっていてCMPによってカウントアップされてしまう副作用が影響するようになった。 CMP後、MRES命令を出せばいいのだが、MRES信号を優先する論理にすればCMPとMRESを同時できて 性能向上および、マイクロコードの節約が可能となる。


1サイクルで比較して減算の性能

1サイクルで比較して減算することを可能とするためマイクロコードの1サイクルが僅かに長くなっている。 それによる性能低下を問題にする人もあるかもしれない。 しかしRSA暗号や楕円暗号の性能を決める主要因となっているのはモンゴメリ乗算器のサイクルです。 ただマイクロコードの1サイクルとモンゴメリ乗算器のサイクルの比率は整数でないと難しいので、 比率を変更できなければ、性能が低下するということではあります。 ICF3では1対2でしたが、1対4にする案もありました。 1対4が採用されなかった理由はディレイの問題ではなく1対2でもIBMのメインフレームの性能を上回るからでした。


RSA 4096bitについて

現状の1024bitの演算器で4096bitが可能です。 偶然できたOR演算器がここで活躍します。


RSA 4096bitを高速にする方法

現状の1024bitの演算器でRSA 4096bitを演算させると、かなり遅くなる。 それでも、多くの用途では実用上なんとかなるように思っている。 しかしRSA 4096bitを高速に処理したい用途に対応するには、どうしたらいいのかというと、 単純に現状の演算器を2倍の2048bitにするのが簡単。超高速にRSA 4096bitの演算が可能になる。

あまり正確な数字ではないかもしれないが現状の1024bitの演算器でRSA 4096bitをするなら800msだが 演算器を2倍にすると50msくらいで演算が可能になる。


OpenICF3の改良

突貫工事で開発したICF3ですが、良くできていますが、まだ改善の余地のある部分は、 あるようで、いくつか考えているものを列挙します。 検討してやめる可能性が大きいものが含まれています。 これらはOpenICF3 Ver2として採用する予定で、Ver1は1999年のICF3と同一とします。

  • CALLを1段から2~4段に
  • 自身のアドレスに分岐する場合は、遅延分岐しない。
  • 制御命令コードを4bitから5btiに
  • 1024bit固定のコードではなくn bitの演算器用のコードの書き方
  • 演算器の幅(1024bit)の2倍、4倍の演算を用意にする機能

マイクロコード領域を増量

マイクロコードは512ワードまで格納できるが、プログラムカウンタを1bit増やすだけで、768ワードに増量可能。 ただし512~767ワードの領域へ絶対ジャンプすることはできない。 相対ジャンプは可能なので大きなサブルーチンを格納すれば有効に利用できる。


モンゴメリ乗算器の連結改造

ICF3には1024bitのモンゴメリ乗算器が2個ある。 これを連結して1個の2048bitのモンゴメリ乗算器にする改造。 b=2のモンゴメリ乗算器ならではのアイディアになるが、厳しいかもしれないが、可能性はありそう。
この方法だと配線の総数は、それなりに増える。 分散されているので、それほどでもないと思うが、 配線の問題で実装できないことがあるなら、次のことを考える。 モードによって1024bit×2個、2048bit 1個に変更することをあきらめて2048bit 1個のモンゴメリ乗算器とすれば、 現状の実装難度と同程度になるので、ほぼ実装できるのではないかと思う。 マイクロコードが完全互換でなくなるデメリットはある。


I=160命令

命令コードの中でI=160は、ほとんど使われていないため、何か別の効率的な命令に置き換えたほうがいい。 例えばBCF命令はCF=1のとき分岐だが、CF=0のとき分岐する命令にしてもいいかもしれない。


モンゴメリ乗算器の周波数のみ1.5倍にする改造

2017年10月1日追加
ICF3の演算器は1024bitだが、これを2112bitに拡張したW+では、モンゴメリ乗算器の周波数を1.5倍にする改造が有効。 RSA 2048bitを効率的に演算できる。1マイクロサイクル = 3モンゴメリ乗算サイクルになるため、基底をR=2^1026にする必要がある。 ここに比較減算が不要な改良モンゴメリを利用すると、少し高速化可能になる。