Previous: , Up: Algorithms   [Index]


15.8 アセンブラコード

GMPのアセンブラサブルーチンは,小~中サイズの多倍長演算を高速に実行するための中核です。 大サイズ用の演算にはアルゴリズムの選択の方が重要となりますが,基盤ルーチンが高速化できれば当然,計算のサイズに関わらずパフォーマンスは良くなります。

GMPで重要なのは桁上がり・桁下がり(キャリー操作)や乗算数のサイズ広域化で,これはC では簡単に実現できるものではありません。GCCの asmブロックをlonglong.hに記述してこれらの高速化を行っていますが,それだけでは足りず,職人芸的にアセンブラコードを書くことで,汎用Cコードに比べて2倍から10倍程度の高速化を達成しています。