Next: , Previous: , Up: Assembly Coding   [Index]


15.8.2 アセンブラコードの基本

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関数にそのような制限をかけることで,スーパースカラープロセッサ上で書き込むより先に読み取りを行うことができ,桁上がり・桁下がり処理の有無にもよりますが,ループ展開してベクトルプロセッサ対応させることができるようになります。