Algoritma SPIKE

Dari testwiki
Loncat ke navigasi Loncat ke pencarian

Algoritma SPIKE adalah solver paralel hibrida untuk sistem linear berpita yang dikembangkan oleh Eric Polizzi dan Ahmed Sameh.Templat:RefTemplat:NoteTemplat:Ref

Ikhtisar

Algoritma SPIKE berkaitan dengan sistem linear AX = F , di mana A adalah sebuah banded n×n matriks bandwidth jauh lebih sedikit daripada n, dan F adalah n×s matriks yang mengandung s sisi kanan. Ini dibagi menjadi tahap preprocessing dan tahap postprocessing.

Tahap preprocessing

Pada tahap preprocessing, sistem linear AX = F dipartisi menjadi bentuk tridiagonal blok

[๐‘จ1๐‘ฉ1๐‘ช2๐‘จ2๐‘ฉ2๐‘ชp1๐‘จp1๐‘ฉp1๐‘ชp๐‘จp][๐‘ฟ1๐‘ฟ2๐‘ฟp1๐‘ฟp]=[๐‘ญ1๐‘ญ2๐‘ญp1๐‘ญp].

Asumsikan, untuk saat ini, bahwa blok diagonal Templat:Math (Templat:Math dengan Templat:Math) adalah nonsingular. Tentukan matriks blok diagonal

Templat:Math,

maka Templat:Math juga nonsingular. Kiri-mengalikan Templat:Math untuk kedua sisi sistem memberi

[๐‘ฐ๐‘ฝ1๐‘พ2๐‘ฐ๐‘ฝ2๐‘พp1๐‘ฐ๐‘ฝp1๐‘พp๐‘ฐ][๐‘ฟ1๐‘ฟ2๐‘ฟp1๐‘ฟp]=[๐‘ฎ1๐‘ฎ2๐‘ฎp1๐‘ฎp],

yang harus diselesaikan pada tahap postprocessing. Penggandaan-kiri oleh Templat:Math setara dengan pemecahan p sistem formulir

Templat:Math

(menghilangkan Templat:Math dan Templat:Math untuk j=1, dan Templat:Math dan Templat:Math untuk j=p), yang dapat dilakukan secara paralel.

Karena sifat berpita Templat:Math, hanya beberapa kolom paling kiri dari setiap Templat:Math dan beberapa kolom paling kanan dari masing-masing Templat:Math dapat berupa nol. Kolom ini disebut spike.

Tahap postprocessing

Tanpa kehilangan sifat umum, asumsikan bahwa setiap lonjakan mengandung tepat m kolom (m jauh lebih sedikit dari n) (bantalan spike dengan kolom nol jika perlu). Partisi paku di semua Templat:Math dan Templat:Math ke

[๐‘ฝj(t)๐‘ฝj๐‘ฝj(b)] and [๐‘พj(t)๐‘พj๐‘พj(b)]

dimana Templat:Math, Templat:Math, Templat:Math dan Templat:Math adalah dari dimensi m×m. Partisi juga semua Templat:Math dan Templat:Math menjadi

[๐‘ฟj(t)๐‘ฟj๐‘ฟj(b)] and [๐‘ฎj(t)๐‘ฎj๐‘ฎj(b)].

Perhatikan bahwa sistem yang dihasilkan oleh tahap preprocessing dapat direduksi menjadi sistem pentadiagonal blok dengan ukuran yang jauh lebih kecil (ingat bahwa m jauh lebih sedikit dari n)

[๐‘ฐm0๐‘ฝ1(t)0๐‘ฐm๐‘ฝ1(b)00๐‘พ2(t)๐‘ฐm0๐‘ฝ2(t)๐‘พ2(b)0๐‘ฐm๐‘ฝ2(b)00๐‘พp1(t)๐‘ฐm0๐‘ฝp1(t)๐‘พp1(b)0๐‘ฐm๐‘ฝp1(b)00๐‘พp(t)๐‘ฐm0๐‘พp(b)0๐‘ฐm][๐‘ฟ1(t)๐‘ฟ1(b)๐‘ฟ2(t)๐‘ฟ2(b)๐‘ฟp1(t)๐‘ฟp1(b)๐‘ฟp(t)๐‘ฟp(b)]=[๐‘ฎ1(t)๐‘ฎ1(b)๐‘ฎ2(t)๐‘ฎ2(b)๐‘ฎp1(t)๐‘ฎp1(b)๐‘ฎp(t)๐‘ฎp(b)],

yang kami sebut sistem tereduksi dan dilambangkan dengan Templat:Math.

Setelah semua Templat:Math dan Templat:Math ditemukan, semua Templat:Math dapat dipulihkan dengan paralelisme sempurna via

{๐‘ฟ1=๐‘ฎ1๐‘ฝ1๐‘ฟ2(t),๐‘ฟj=๐‘ฎj๐‘ฝj๐‘ฟj+1(t)๐‘พj๐‘ฟj1(b),j=2,,p1,๐‘ฟp=๐‘ฎp๐‘พp๐‘ฟp1(b).

Templat:Reflist

Bacaan lanjutan