2017-02-13 5 views
1

Cが2つのn-bitsの整数を乗算するとき、内部で通常のO(n^2)の乗算アルゴリズムを使用していますか、またはKaratsubaの乗算アルゴリズムのバリエーションを使用していますか?Cは内部的にKaratsubaアルゴリズムを使用して2つの整数を掛けますか?

+9

C標準は、それ自体、そのような実装の詳細を指示しません。各コンパイラは、ターゲットアーキテクチャごとに適切な命令を選択するため、その命令セットに依存します。 – StoryTeller

+0

C - no。コンパイラ - おそらくそうではありません。基盤となるHWアーキテクチャ - おそらく。 –

+2

Cにはnビットの整数はありません。 – melpomene

答えて

2

いいえ、Karatsubaアルゴリズムの「ブックキープ」オーバヘッドは高すぎ、複雑すぎます。たとえ機械語レベルでブレーク・アウェイ再帰的な深さを達成したとしても、乗算器よりもはるかに多くのシリコンを消費します。ハードウェア暗号アクセラレータやFPGAは、十分に大きな値をとる価値がありますn。それでも、暗号の必要性に役立つためには、損益分岐点が高すぎるかもしれません。無料のランチはありません。

スペクトルのもう一方の端に、私たちは、漸近的に高速なアルゴリズムが実際に完済し始めるしきい値値を定義GMP librarygmp-mparam.hファイルで見ることができます。 「Karatsuba」は、より一般的なToom-Cookアルゴリズムの2×2のケースです。 BroadwellやSkylake CPUのようなモンスターでさえ、スレッショルドは約28 'ワード、すなわち1792ビットです。これは、(再帰的に)キャリー伝播を伴う3つの結果を一緒に戻すオーバーヘッドが原因です。これらのスレッショルドは、命令のスループットが増加するにつれて高くなります。

関連する問題