Sıralı çarpmadan daha verimli olan paralel matris üs alma algoritmaları var mı?


11

Gerçek sayı matrisinin gücünü (pozitif tamsayı) bulmak için gereklidir. Çok sayıda verimli matris çarpma algoritması vardır (örneğin, bazı paralel algoritmalar Cannon'un, DNS'dir ), ancak matrisin gücünü tam olarak bulmaya yönelik olan ve matris çarpımının sıralı yürütülmesinden daha verimli olan algoritmalar var mı? Özellikle paralel algoritmalarla ilgileniyorum.


1
Ne denedin? Nerede sıkıştın? Hangi araştırmayı yaptınız? Başlığın yanı sıra soru nerede? Sorununuzun karar sürümü için (başlıktan), cevap "evet" dir, ancak zaten biliyorsunuz, değil mi?
Evil

2
@TomR Bu soru muhtemelen ilginizi
çekiyor

1
Belki bir şey böyle ? Yoksa başka bir şey mi arıyorsunuz? Uygulamanızdaki boyutlar ve güçler nelerdir?
Kötülük

1
N ≥ 4 olduğunda n. Gücü n-1'den daha az çarpma ile hesaplayabilirsiniz. Büyük matrisler için, mümkün olan en az çarpma sayısını bulmak genellikle yararlı olacaktır (örneğin, n ^ 15'i 6 ile hesaplamak için basit bir yöntem vardır. çarpma, ancak 5 ile yapılabilir). Daha sonra, daha zor olacak en az sayıda ardışık çarpımı bulmak için aynı prensibi uygulayabilirsiniz.
gnasher729

1
Ayrıca, kullanabileceğiniz paralellik miktarını da göz önünde bulundurmalısınız. "Paralellik", aksi takdirde kullanılmayan kaynaklardan yararlanmakla ilgilidir. Bir matris çarpımının uygulanması zaten mevcut olan tüm kaynakları verimli bir şekilde kullanabiliyorsa, matrislerin güçlerini hesaplamak için kullanacak başka bir şey yoktur.
gnasher729

Yanıtlar:


5

Paralel olarak çalışabilen birden fazla işlemciniz varsa, k adımında güce (2 ^ k) kadar herhangi bir gücü hesaplayabilirsiniz. Örneğin: hesaplamak için şunları hesaplarsınız:M15

Aşama 1: M 2'yi hesaplayınM2

Aşama 2: ve M 4 = M 2M 2'yi hesaplayınM3=M2*MM4=M2*M2

Aşama 3: ve M 8 = M 4M 4 hesaplayınM7=M4*M3M8=M4*M4

Aşama 4: M 15 = M 8M 7'yi hesaplayınM15=M8*M7

Bu hesaplama birden çarpma fazlasıdır üç çarpım ve yetiştirme M 5 diğer iki çarpım üçüncü güce, ancak iki işlemci varsa daha hızlı olmalıdır. Keyfi yüksek güçler için daha fazla işlemciye ihtiyacınız olacak.M5M5

Çarpma için bir kaba kuvvet algoritması kullanırsanız, satır sütunu çarparak, bir ürünün bir satırını hesaplayıp bir sonraki ürün için bu satırı hemen kullanarak biraz zaman kazanabilirsiniz. Bu hesabında yardımcı olacağını biz hesaplanması başlayabilirsiniz nerede M 3 yakında ilk satırı olarak M 2 hesaplanmıştır; M 2'nin hem satırlarına hem de sütunlarına ihtiyacımız olduğu için M 4 ile bu kadar yardımcı olmaz . Büyük güçler için, muhtemelen hangi güçlerin hesaplanacağını düzenleyebilirsiniz.M3M3M2M4M2

Ve bu yazdıktan sonra o çok kolay çoklu işlemciler için son derece açıktır: Sen ilk satırı hesaplayarak başlamak . O satır varsa, size ilk satırı hesaplamak için gereken tüm bilgilere sahip M 3 = M 2 * M Eğer ikinci sırasını hesaplamak, böylece M 2 ve ilk satırı M 3 paralel. Daha sonra üçüncü satır hesaplayabilir M 2 , ikinci satırda M 3 ve ilk satır M 4 paralel olarak ve böyle devam eder.M2=M*MM3=M2*MM2M3M2M3M4

Bu, gerekenden çok daha fazla işlem yapacaktır (örneğin, için dört aşamalı yöntemin en az 5 veya 6 yerine 14 matris çarpımı ). Güç, işlemci sayısına kıyasla büyük değilse, bu daha hızlı olacaktır. Ancak bu yöntemi kullanarak dört işlemciyle M 1000 hesaplamak verimsiz olacaktır; bunu en uygun şekilde yapmak ilginç bir problem olacaktır.M15M1000

Yaklaşımları birleştirme: Örneğin dört işlemci kullanarak, her bir ürünü bir seferde bir satır hesaplayarak AB, ABC, ABCDE ve ABCDE'yi neredeyse paralel olarak hesaplayabilirsiniz. Bu dört hesaplamak sağlar için M 5 , bir işlemci ile tek bir ürün ile aynı zamanda dört işlemci kullanan.M2M5

Bu dört sonuçları göz önüne alındığında ve orijinal M, sen matrisleri dört hesaplayabilir için M 25 yine aynı süre içinde, matrisler birbirlerinden en fazla beş güçlerin altındadır sağladı. Böylece, M 25'e kadar olan her bir güç , tek bir işlemci matris ürününün yaklaşık iki katı süresinde hesaplanabilir.M6M25M25

Bu matrisler hesaplandığında, dört işlemcinin mevcut olması halinde , kadar olan tüm matrisler ve M 125'e kadar olan bazı matrisler, tek bir matris ürünü süresinin üç katında hesaplanabilir. K işlemcilerde bu en azından k ( k + 1 ) 2 gücüne yükselmelidir .M108M125k(k+1)2


4

Paralel hızlanmaları matris üsüyle analiz edebileceğiniz iki seviye vardır: Hangi matrislerin çarpılacağına karar veren "makro-algoritmik" seviye ve çarpımları paralellik ile hızlandırabileceğiniz "mikro-algoritmik" seviye.

İkincisi için, Ara düşündürmektedir bir çarpımı için ile n matris biz bir karmaşıklık elde edebilirsiniz O ( log 2 ( n ) ) sınırsız bir işlemci sayısı veya teorik olarak O ( n ) , daha gerçekçi bir paralel algoritması ile.nnÖ(günlük2(n))Ö(n)

(Not: wikipedia sayfası genel matris hesaplaması içindir. Bir matrisin karesini aldığımız bilgileri kullanarak bunun daha da paralel hale getirilip getirilemeyeceğinden emin değilim.)

İlk amaçla gerekli olan kaç tur matris çarpım içine sorusu döner hesaplamak için bazı matris için A ? (Yuvarlar diyorum, çünkü belirli bir turdaki tüm çarpmalar paralel olarak yapılabilir).birmbir

Diğer cevaplarda belirtildiği gibi atmak için sıralı algoritma, kareleme ile üs almadır . Bu hesaplamak için izin verir içinde O ( log ( k ) ) çarpma.birkÖ(günlük(k))

Soru şudur: Bunu paralellikle yenebilir miyiz? Cevabın hayır olduğunu iddia ediyorum.

Bunun basit nedeni, kare ile üstelimin esasen dinamik bir programlama algoritması olmasıdır; alt sonuçları yeniden kullanarak tüm işi atlamanızı sağlar, ancak bu da paralelliğe izin vermeyen bir veri bağımlılığı yaratır. Veri bağımlılığından kurtulursak, ancak yapmamız gereken iş miktarını da büyük ölçüde artırırız.

k

bir1bir2bir3bir4bir5...birk

Bunu paralelleştirmenin doğal yolu açıktır, yapmak için ilişkiyi kötüye kullanmalısınızk2

(bir1bir2)(bir3bir4)(bir5bir6)...(birk-1birk)

kÖ(günlük(k))

Ancak, bu şekilde üs alma işlemini gerçekleştirseydik, şöyle görünecektir:

(birbir)(birbir)(birbir)...(birbir)

bir2

birknnbirÖ(günlük2(n)günlük(k))Ö(ngünlük(k))


3

mgünlükm2m

bir=SΛS-1birm=SΛmS-1
mÖ(1)m
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.