Previous: Other Algorithms, Up: Algorithms [Index]
GMPのアセンブラサブルーチンは,小~中サイズの多倍長演算を高速に実行するための中核です。 大サイズ用の演算にはアルゴリズムの選択の方が重要となりますが,基盤ルーチンが高速化できれば当然,計算のサイズに関わらずパフォーマンスは良くなります。
GMPで重要なのは桁上がり・桁下がり(キャリー操作)や乗算数のサイズ広域化で,これはC では簡単に実現できるものではありません。GCCの asm
ブロックをlonglong.hに記述してこれらの高速化を行っていますが,それだけでは足りず,職人芸的にアセンブラコードを書くことで,汎用Cコードに比べて2倍から10倍程度の高速化を達成しています。
• Assembly Code Organisation: | アセンブラコードの構成 | |
• Assembly Basics: | アセンブラコードの基本 | |
• Assembly Carry Propagation: | 桁上がり・桁借り上げ処理 | |
• Assembly Cache Handling: | キャッシュ制御 | |
• Assembly Functional Units: | 関数ユニット | |
• Assembly Floating Point: | 浮動小数点演算 | |
• Assembly SIMD Instructions: | SIMD命令 | |
• Assembly Software Pipelining: | ソフトウェアパイプライン | |
• Assembly Loop Unrolling: | ループ展開 | |
• Assembly Writing Guide: | アセンブラコードの書き方 |