GSは次のような構造をすれば、前記したアルゴリズムを実現できる。
64ビットの浮動小数点数レジスタ: a,b,c
32ビットの正数レジスタ: k,N(λ)
ここでは、
SUB,MUL,DIV はそれぞれ加算器、乗算器、除算器をあらわす。
データフロー
最初に、GL が各GSのレジスタ a,b,k に固有値探索範囲の初期値と求める固有値の番
号kを入れる。GSは1クロック毎にαiとβi-1をメモリーから読み込み、
gi(λ)を計算する。block1 は g(i) <= 0 となる時、N(λ)を1つ
増やすように構成される(αとβが入る前にN(λ)はあらかじめ0に初期化され
る)。N(λ)の結果に基づいて、block2 が a,b の次の値を決定する。具体的に
N(λ) >= n-k なら aにcを代入し、bは変えない。そうでなければ、bにcを
代入し, aは変えない。
この操作がR回繰り返されるとレジスタcにk番目の固有値λkが入る。
各GSが独立に計算できるためには、それぞれのGSにαiとβiを保持
するメモリを持たせる必要がある。1個のメモリの容量は
(2n+1)×8バイト
で、行列の次元nが10 000の場合ほほ160[kbyte]になる。
戻る