2

複数のプロセッサを使用して (大きな) 定数を法として大きな整数を乗算するための時間の複雑さについて知りたいと思っています。要するに、除算と剰余は乗算を使用して実装することもできるため、基本的には単なる整数乗算です (例:逆数乗算またはバレット削減)。

現在知られている整数乗算アルゴリズムの実行時間は、下限によっておおまかに制限されていることを知っていますo(n * log n)。私の調査では、これがシングル コアまたはマルチ コア マシン用であるかどうかを確認できませんでした。ただし、アルゴリズムは分割統治法を使用しているように見えるため、これはシングルコアマシン用であると考えています。

m私の質問は、コアに実装された並列整数乗算アルゴリズムの時間計算量の現在知られている下限は何ですか? o(n)十分なコアが与えられた場合、下限以下の時間計算量を達成できますか? (つまり ifは ?mに依存しnます) ここでo(n)は、手元にある整数の入力サイズについて説明します。

これまでの私の研究では、並列 FFT 乗算を使用した高速化を主張するいくつかの論文を読みました。残念ながら、これらは経験的な高速化 (たとえば、「これこれのコンピューターで 6 コアを使用して 56% の速度向上」) を主張するだけであり、時間の複雑さの境界で表される理論的な高速化を説明できません。

「最速」の整数乗算アルゴリズムがまだ見つかっていないことは承知しています。これはコンピューター サイエンスの未解決の問題です。私は単に、そのような並列アルゴリズムの現在知られている範囲について調べているだけです。

更新 #1 : ユーザー @delnan がNC 複雑性クラスに関する wiki ページにリンクしました。そのwikiページでは、整数乗算はNCにあると述べています。つまり、プロセッサにO((log n)^c)アルゴリズムが存在します。O(n^k)これは、答えに近づくのに役立ちます。今のところ答えられていない部分は、整数乗算のcおよびk定数とは何か、またどの並列アルゴリズムがこの目的に適しているかということです。

更新 #2 :コーネル大学のコンピューター サイエンス コースのこの PDF ファイルの 12/15 ページによると、NC 複雑度クラスの整数乗算はプロセッサでO(log n)時間がかかります。O(n^2)また、これを行う方法についてのアルゴリズムの例についても説明します。この質問に対する適切な回答をすぐに書きます。

私の好奇心を満たすための最後の質問: "just"またはプロセッサの現在知られている時間の複雑さについて何か知っている人はいO(n)ますか?O(sqrt(n))O(log n)

4

1 に答える 1

1

アルゴリズムの計算の複雑さは、並列化の影響を受けません。

確かに、整数乗算などの問題を取り上げると、問題を解決するためのさまざまなアルゴリズムを見つけることができます。これらのアルゴリズムは、さまざまな複雑さを示します。しかし、プロセッサ上でそれを実行するアルゴリズムを考えるpと、理論的に最良の場合、時間のスピードアップが得られpます。計算の複雑さに関して言えば、これは既存の複雑さを乗算しO(f(n))て を定数で呼び出すようなもので、 を取得しますO((1/p)*f(n))。ご存じのように、複雑さに定数を掛けても、複雑さの分類には影響しません。

別の、おそらくより実用的な議論の行を取ると、プロセッサの数を変更しても、アルゴリズムが特定の問題に対して特定のサイズで実行する基本的な操作の数は変わりません。ただし、操作を調整するために必要な追加の操作は除きます。並列コンポーネントの。

繰り返しになりますが、計算の複雑さは、計算量の非常に理論的な尺度であり、一般に、特定の入力サイズの計算に必要なある種の基本操作の数として測定されることに注意してください。そのような基本演算の 1 つに、(サイズが制限された) 2 つの数値の乗算があります。基本演算の定義を 2 つの数値ベクトル (それぞれサイズが制限されている) の乗算に変更しても、アルゴリズムの複雑さは変わりません。

もちろん、おわかりのように、パラレル アルゴリズムがシリアル アルゴリズムよりも高速に動作できるという多くの経験的証拠があります。

于 2014-10-01T12:28:22.633 に答える