Hızlı matris çarpımı için bellek gereksinimi


12

Farzedelim ki n×n matrisleri çarpmak istiyoruz . Yavaş matris çarpma algoritması zamanında çalışır ve belleği kullanır. En hızlı matris çarpımı zamanında çalışır , burada doğrusal cebir sabiti, ancak bellek karmaşıklığı hakkında bilinenler nelerdir?O ( n 2 ) n ω + o ( 1 ) ωO(n3)O(n2)nω+o(1)ω

Hızlı matris çarpımının bellek tüketmesi bir a priori olabilir . bellekte yapılabileceğine dair bir garanti var mı ? Şu anda bilinen matris çarpma algoritmalarının belleği kullanması söz konusu mudur? O ( n 2 ) O ( n 2 )nωO(n2)O(n2)

(Aslında dikdörtgen matris çarpımı ile ilgileniyorum, ancak bu durumda cevabın kare durumla aynı olacağını ve kare durumun daha iyi çalışıldığını varsayıyorum.)

Yanıtlar:


16

Alanı kullanım en olduğu tüm Strassen benzeri algoritmaları (yani, bu üst cebirsel matris çarpımı rank sınırlama göre). Bakın Coppersmith-Winograd algoritmasının uzay karmaşıklığıO(n2)

Ancak, önceki cevabımda alan kullanımının neden olduğunu açıklamadığımı fark ettim ... işte el-dalgalı bir şey oluyor. Strassen benzeri bir algoritmanın ne yaptığını düşünün. Bunun için sabit bir algoritma başlar K x K matris çarpım kullanan K c bir sabit için çarpma c < 3 . Özellikle, bu algoritma (ne olursa olsun) WLOG yazılabilir, böylece:O(n2)K×KKcc<3

  1. Bu hesaplar farklı matrisler L 1 , ... , L K c ilk matris çoklu girişler A , çeşitli skalerler tarafından K C matrisleri R 1 , ... , R, K c ikinci matris gelen B benzer bir biçimde olan,KcL1,,LKcAKcR,1,...,R,KcB

  2. Bu doğrusal kombinasyonları çarpar ,LbenR,ben

  3. Ve bu çarpma girişleri , çeşitli skalarlar, daha sonra elde etmek için entrywise kadar bu matrisler ekler bir B .LbenR,benbirB

(Bu sözde "bilinear" algoritmasıdır, ancak her "cebirsel" matris çarpım algoritmasının bu şekilde yazılabileceği ortaya çıkar.) Her , bu algoritmanın yalnızca mevcut ürün L ıR ' ı ve mevcut değer bir B alanı kullanımı, bu yüzden herhangi bir noktada bellekte (başlangıçta her sıfıra ayarlanır) O ( K 2 ) .i=1,,KcLiRiABO(K2)

Bu sonlu algoritma göz önüne alındığında, daha sonra rasgele bir şekilde genişletilmiştir içine büyük matrisler kırarak, matrisler K x K boyutları blok K - 1 x K - 1 , uygulama sonlu K x K algoritma bloğuna ve iki bloğu çarpması gerektiğinde algoritmayı tekrar tekrar çağırır. Her özyineleme düzeyinde, yalnızca O ( K 2 ) alan öğelerini bellekte tutmamız gerekir ( O ( 1 ) depolamakK×KK×KK1×K1K×KO(K2)O(1)farklı matrisleri). K - 1 × K - 1 matris çarpımı için alan kullanımının S ( - 1 ) olduğu varsayılarak, bu özyinelemeli algoritmanın alan kullanımı S ( ) S ( - 1 ) + O ( K 2 ) için olan S ( 1 ) = 2 K 2K×KK1×K1S(1)S()S(1)+O(K2)S(1)=2K2için çözer .S()O(K2)


Herhangi bir Strassen tarzı algoritma için, bu benim için doğru görünüyor. Ancak Coppersmith-Winograd, aslında her biri gerçek üsse yaklaşan ve yaklaşan Strassen tarzı algoritmaların sonsuz bir dizisini gerektirdiğini kanıtladı . Gerçekten de, hem CW tarzı algoritmalar hem de CU tarzı algoritmalar bu sekansları sağlar ( bildiğimiz kadarıyla ω'ya yaklaşmasa da ). Gerekçelerde, böyle bir dizide kullanılan sabitlerin çok hızlı bir şekilde büyümesi mümkündür, böylece " n ω algoritması ω ( n 2 ) boşluğu kullanarak sonuçlanabilir . nωωnωω(n2)
Joshua Grochow

1
... Ama argüman tarafından, hep zaman içinde bir algoritma elde edebilirsiniz ve uzay O ( n 2 ) herhangi biri için ö > 0 . O(nω+δ)O(n2)δ>0
Joshua Grochow

@Joshua, bu Strassen tipi algoritmaların bellek gereksinimi , burada i algoritmanın dizin numarasıdır ve f hesaplanabilir. Dan Yani, bu algoritmaları üzerinde arama yaparsanız i = 0 , . . . , k ve k n'nin yavaş büyüyen bir işlevidir, daha sonra çalışma n ω + o ( 1 ) olur ve bellek n 2 + o ( 1 ) olur . f(i)n2i=0,...,knω+o(1)n2+o(1)
David Harris

@DavidHarris: Elbette, f'ye göre yeterince yavaş büyüdüğü sürece , yani k en fazla f - 1 kadar hızlı büyümelidir . Soru, herhangi bir aile için, f nedir ve k ne kadar hızlı büyür. Ancak k'nin genel olarak n 2 + o ( 1 ) bellek kullanımı elde edecek kadar yavaş büyüyeceğine dair bir garanti yoktur ...kfkf1fkkn2+o(1)
Joshua Grochow

@Joshua. Fikir, uzunluğundaki girdilerde , ilk k varsayılan Strassen tipi algoritmaları araştırır , geçerli olup olmadığını doğrular ve en hızlı olanı seçeriz. N'nin bir fonksiyonu olarak k'yi seçin , böylece f ( k ( n ) ) = n o ( 1 ) . Yana k ( n ) ∞ iken , bu herhangi bir Strassen tipi algoritması seçilecektir anlamına gelir n, yeterince büyük. Böylece zaman n ω + o ( 1nkknf(k(n))=no(1)k(n)n de. nω+o(1)
David Harris

4

Daha genel olarak, işlemci başına O ( n 2 / p ) belleğindeki işlemcilerde hızlı matris çarpımı yapılabilir . Bununla birlikte, işlemciler arasındaki iletişim yetersizdir. Daha fazla bellek kullanılarak optimum iletişim sağlanabilir. Bildiğim kadarıyla, optimal iletişimin ve optimal belleğin aynı anda elde edilip edilemeyeceği bilinmemektedir. Ayrıntılar http://dx.doi.org/10.1007/PL00008264pO(n2/p)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.