高速行列乗算のメモリ要件


12

行列を乗算するとします。低速行列乗算アルゴリズムは、時間O n 3)で実行され、O n 2メモリを使用します。時間で最速の行列乗算の実行のn ω + O 1 ωは線形代数一定であるが、そのメモリの複雑性について知られていますか?n×nO(n3)O(n2)nω+o(1)ω

高速行列乗算消費すること先験的可能かもしれないと思われるメモリ。O n 2メモリで実行できるという保証はありますか?現在知られている行列乗算アルゴリズムはO n 2メモリを使用するのですか?nωO(n2)O(n2)

(私は実際に長方形行列の乗算に興味がありますが、その場合の答えは正方形の場合と同じであり、正方形の場合の方がよく研究されていると思います。)

回答:


16

すべてのStrassenのようなアルゴリズム(つまり、行列乗算のランクの代数的上限に基づくアルゴリズムのスペース使用量は、最大でです。Coppersmith–Winogradアルゴリズムのスペースの複雑さを参照してくださいO(n2)

しかし、以前の回答で、スペース使用量が理由を説明していないことに気づきました...そこで、ここでは手作業で説明します。Strassenのようなアルゴリズムの機能を検討してください。定数c < 3に対してK c乗算を使用するK × K行列乗算の固定アルゴリズムから始まります。特に、このアルゴリズム(とにかく)は、次のようにWLOGを作成できます。O(n2)K×KKcc<3

  1. 最初の行列Aのエントリにさまざまなスカラーを乗算する異なる行列L 1L K cと、同様の形式の2番目の行列BからのK c行列R 1R K cを計算します。KcL1,,LKcAKcR1,,RKcB

  2. これは、それらの線形結合乗じ、その後、LiRi

  3. それ乗算エントリ、種々のスカラーにより、次に得るために項目別アップこれらすべての行列を追加A BをLiRiAB

(これはいわゆる「双線形」アルゴリズムですが、すべての「代数」行列乗算アルゴリズムはこのように記述できることがわかります。)ごとに、このアルゴリズムは現在の製品L IR Iと電流値A B空間の使い方があるので、任意の時点でメモリ内に(最初にすべてゼロに設定)O K 2i=1,,KcLiRiABO(K2)

この有限のアルゴリズム与えられ、それは、次いで、任意に拡張されたに大きな行列を破壊することによって、行列K × Kの大きさのブロックKの- 1 × Kの- 1、印加有限K × Kアルゴリズムブロックに行列、および2つのブロックを乗算する必要があるときは常にアルゴリズムを再帰的に呼び出します。再帰の各レベルでは、我々は、維持する必要がO K 2 メモリ内のフィールド要素(記憶Oを1 K×KK×KK1×K1K×KO(K2)O(1)異なる行列)。以下のための空間の使用と仮定Kのℓを- 1 × Kのℓは、- 1行列乗算であるS - 1 、この再帰アルゴリズムの空間使用量は、S S - 1 + O K 2 S 1 = 2 K 2の場合K×KK1×K1S(1)S()S(1)+O(K2)S(1)=2K2解くS()O(K2)


いずれかのStrassenスタイルのアルゴリズムの場合、これは私には正しいようです。しかし、銅細工-ウィノグラードもまで取得することを証明した、実際にどんどん近づいて本当の指数になり、それぞれがStrassenのスタイルのアルゴリズムの無限のシーケンスを、必要とします。実際、CWスタイルのアルゴリズムとCUスタイルのアルゴリズムの両方が、このようなシーケンスを提供します(ただし、ωに近づいていない限り)。有理式では、そのようなシーケンスで使用される定数が非常に急速に増加する可能性があるため、「nωアルゴリズムはω n 2空間を使用することになります。nωωnωω(n2)
ジョシュアグロチョフ

1
...しかし、あなたの引数によって、人は常に時間にアルゴリズムを得ることができますとスペースO N 2任意のためのδ > 0O(nω+δ)O(n2)δ>0
ジョシュアグロチョフ

@Joshua、これらのStrassen型アルゴリズムのメモリ要件はになります。ここで、iはアルゴリズムのインデックス番号で、fは計算可能です。したがって、これらのアルゴリズムをi = 0から検索するとKおよびkがnのゆっくり成長している関数であり、その後の作業になり、N ω + O 1 とメモリであるN 2 + O 1 f(i)n2i=0,...,knω+o(1)n2+o(1)
デビッドハリス

@DavidHarris:確かに、fに比べて十分にゆっくりと成長している限り、つまり、kはせいぜいf 1と同じ速さで成長しなければなりません。問題は、どの家族にとっても、fとは何か、kはどのくらい速く成長するかです。しかし、という保証はありませんkは全体的に得るために十分ゆっくりと成長するN 2 + O 1 メモリ使用量は...kfkf1fkkn2+o(1)
ジョシュアGrochow

nkknf(k(n))=no(1)k(n)nnω+o(1) as well.
David Harris

4

More generally, fast matrix multiplication can be done on p processors in O(n2/p) memory per processor. However, the communication between processors is then suboptimal. Optimal communication can be achieved by using more memory. As far as I know, it is not known whether optimal communication and optimal memory can be achieved simultaneously. Details are in http://dx.doi.org/10.1007/PL00008264

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.