Next: Assembly Carry Propagation, Previous: Assembly Code Organisation, Up: Assembly Coding [Index]
mpn_addmul_1
関数とmpn_submul_1
関数が最も重要なルーチンで,これがGMPのパフォーマンス全般に効いてきます。
すべての乗算の除算はこの二つの関数を繰り返し使用して実装されています。
mpn_add_n
関数,mpn_sub_n
関数,mpn_lshift
関数,mpn_rshift
関数は2番目に重要な関数です。
いくつかのCPUでは,基盤的内部関数である
mpn_mul_basecase
関数と mpn_sqr_basecase
関数は,主として関数呼び出しによるオーバーヘッドを避けることで結構なスピードアップを図ることができます。つまり, スーパースカラープロセッサをうまく使うことで,
mpn_addmul_2
関数や mpn_addmul_4
関数のようにより幅の広い数を扱う基盤関数を使うのと同じぐらいの有効利用ができる可能性が出てきます。
計算元の値と,計算結果の格納先が同じメモリ領域を使用しないように制限することで
(see Low-level Functions),実装をより良いものにすることができるようになります。例えば,
mpn_add_n
関数にそのような制限をかけることで,スーパースカラープロセッサ上で書き込むより先に読み取りを行うことができ,桁上がり・桁下がり処理の有無にもよりますが,ループ展開してベクトルプロセッサ対応させることができるようになります。