実数の行列の累乗(正の整数)を見つけるために1つ必要です。効率的な行列乗算アルゴリズムはたくさんありますが(たとえば、一部の並列アルゴリズムはCannonのDNSです)、行列の能力を正確に見つけることを目的としたアルゴリズムであり、行列乗算の逐次実行よりも効率的ですか?特に並列アルゴリズムに興味があります。
実数の行列の累乗(正の整数)を見つけるために1つ必要です。効率的な行列乗算アルゴリズムはたくさんありますが(たとえば、一部の並列アルゴリズムはCannonのDNSです)、行列の能力を正確に見つけることを目的としたアルゴリズムであり、行列乗算の逐次実行よりも効率的ですか?特に並列アルゴリズムに興味があります。
回答:
並列で動作する複数のプロセッサがある場合、kステップで電力(2 ^ k)までの電力を計算できます。例:を計算するには、次のように計算します。
ステージ1:M 2を計算する
ステージ2:およびM 4 = M 2 ∗ M 2を計算する
ステージ3:およびM 8 = M 4 ∗ M 4を計算します
ステージ4:M 15 = M 8 ∗ M 7を計算します
これは、1個の乗算以上の計算よりも 3回の乗算にして引き上げM 5を別の2回の乗算で第三電源にしていますが、2つのプロセッサがあれば高速にする必要があります。任意のハイパワーの場合、より多くのプロセッサが必要になります。
列ごとに行を乗算する乗算にブルートフォースアルゴリズムを使用する場合、製品の1つの行を計算し、すぐにその行を次の製品に使用することで、時間を節約できます。これは、M 2の最初の行が計算されるとすぐにM 3の計算を開始できるの計算に役立ちます。M 2の行と列の両方が必要なため、M 4ではそれほど役に立ちません。大規模なパワーの場合、おそらくどのパワーを計算するかを調整できます。
行列のべき乗で並列スピードアップを分析できる2つのレベルがあります。どの行列を乗算するかを決定する「マクロアルゴリズム」レベルと、並列処理で乗算自体を高速化できる「マイクロアルゴリズム」レベルです。
(注:ウィキペディアのページは一般的なマトリックス計算用です。マトリックスを2乗しているという情報を使用してさらに並列化できるかどうかはわかりません。)
問題は、これを並列処理で打ち負かせることができるかどうかです。私は答えがノーだと主張します。
単純な理由は、二乗によるべき乗は本質的に動的プログラミングアルゴリズムであるためです。サブ結果を再利用することですべての作業をスキップできますが、これにより、並列処理を許可しないデータ依存関係が作成されます。データの依存関係を取り除くだけでなく、実行する必要がある作業量も大幅に増加します。
これを並列化する自然な方法は明白です。結合性を悪用してを実行する必要があります
ただし、この方法でべき乗を実行すると、次のようになります。