4-1 第4章 Winogradのアルゴリズム WinogradのアルゴリズムはGoodのアルゴリズムを基礎としてその乗算回数が減少するように改良 したものである.加算数はかなり増加するので,現在のパソコンのCPUのように,乗算と加算のク ロック数がほぼ同じ計算機では不利となる.その対策として,Winogradの算法の加算数を減らす Split-Algorithmがある. 4.1 Goodのアルゴリズムの記述 Winogradのアルゴリズムを説明するため,Goodのアルゴリズムの主要部を簡潔に記述する. n = p 1 n 2 項のGoodのアルゴリズムは c ϕ 1 ( k 1 , k ) = w p 1 k 1 l 1 w n 2 kl f ψ 1 (l 1 , l ) l = 0 n 2 −1 ∑ l 1 = 0 p 1 −1 ∑ (0 ≤ k 1 < p 1 ,0 ≤ k < n 2 ) である. n 2 = p 2 p 3 と因数分解されるとき,内側の総和にGoodのアルゴリズムを用いて, c ϕ 1 ( k 1 ,ϕ 2 ( k 2 , k 3 )) = w p 1 k 1 l 1 w p 2 k 2 l 2 w p 3 k 3 l 3 f ψ 1 (l 1 , ψ 2 (l 2 ,l 3 )) l 3 = 0 p 3 −1 ∑ l 2 = 0 p 2 −1 ∑ l 1 = 0 p 1 −1 ∑ (0 ≤ k 1 < p 1 ,0 ≤ k 2 < p 2 ,0 ≤ k 3 < n 3 ) である.ここで,3次元配列を c = (c k 1 , k 2 , k 3 = c ϕ 1 ( k 1 ,ϕ 2 ( k 2 , k 3 ) ) 0 ≤ k 1 < p 1 ,0 ≤ k 2 < p 2 ,0 ≤ k 3 < p 3 ∈p 1 × p 2 × p 3 , f = ( f l 1 , l 2 , l 3 = f ψ 1 (l 1 ,ψ 2 (l 2 , l 3 ) ) 0 ≤ l 1 < p 1 ,0 ≤ l 2 < p 2 ,0 ≤ l 3 < p 3 ∈p 1 × p 2 × p 3 と定義すると,Goodのアルゴリズムの主要部(データの再配置を除いた部分)は c k 1 , k 2 , k 3 = w p 1 k 1 l 1 w n 2 kl w p 3 kl f l 1 , l 2 , l 3 l = 0 p 3 −1 ∑ l 2 = 0 p 2 −1 ∑ l 1 = 0 p 1 −1 ∑ (0 ≤ k 1 < p 1 ,0 ≤ k 2 < p 2 ,0 ≤ k < p 3 ) と書ける.この操作を再帰的に行えば一般に,項数 n = p 1 p 2 p m のGoodのアルゴリズムの主要部は m 次元配列 c, f ∈p 1 ×× p m に関する変換 c k 1 , , k m = w p 1 k 1 l 1 w p m k m l m f l 1 , ,l m l m = 0 p m −1 ∑ l 2 = 0 p 2 −1 ∑ l 1 = 0 p 1 −1 ∑ (0 ≤ k i < p i (1 ≤ i ≤ m)) (1.1) である. ◎各次元変換 m 次元配列 c, f ∈p 1 ×× p m の添え字集合を I ( p 1 ,, p m ) = {( k 1 ,, k m ):0 ≤ k i < p i (1 ≤ i ≤ m)} と書く. 行列 A = (a kl ) ∈q i × p i による x ∈p 1 ×× p i ×× p m から y ∈p 1 ×× q i ×× p m への第 i 次元線形変換 y = A (i ) x を y l 1 k i l m = a k i l i x l 1 l i l m l i = 0 p i −1 ∑ ,(l 1 k i l m ) ∈ I ( p 1 ,, q i ,, p m ) (1.2) で定義する. x から y へ,第 i 次元のサイズのみが p i から q i に変化する.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.