Altifigence Academy

1 / 20 · 概念

内積を処理要素に割り当てる

行、列、縮約の添字を区別し、小さな参照行列を計算します。

スケジュールの前に計算を確定する

Aの形状をM×K、BをK×Pとします。積Cの形状はM×Pです。添字iは出力行、jは出力列を選び、kは和の中の縮約添字です。このコースではすべての添字をゼロから始めます。

Ci,j=∑k=0K−1Ai,kBk,jC_{i,j}=\sum_{k=0}^{K-1} A_{i,k}B_{k,j}

出力固定の設計ではC(i,j)をPE(i,j)に割り当てます。その処理要素は部分和を保持し、Aは右へ、Bは下へ移動します。移動によって再利用が可能になり、式が乗算してよいオペランドを定めます。クロックのタイミングは別に定義し、スケジュールの誤りが意図した数学を密かに変えないようにします。

参照値を最後まで計算する

A=[[1,2],[3,4]]、B=[[5,6],[7,8]]を使います。PE(0,1)は行[1,2]と列[6,8]を組み合わせます。1×6=6と2×8=16を累積し、22を得ます。代わりにBの2行目[7,8]を使うと23になり、行と列の取り違えを示す有用な特徴となります。

PEk=0の項k=1の項結果
(0,0)51419
(0,1)61622
(1,0)152843
(1,1)183250

期待する行列は[[19,22],[43,50]]です。各PEが2回の有効なMACを実行するため、アレイ全体では8 MACです。乗算と加算を別々に数える慣例なら16算術演算と報告します。スループットを比較する際は必ず単位を示してください。

座標と記憶位置を結び付ける

行優先の記憶形式では、A(i,k)の要素オフセットはiK+k、B(k,j)はkP+jです。この例の列j=1では、Bのオフセットは1と3です。したがって、連続した行を供給するメモリインターフェースからアレイ上端へ列を供給するには、バッファリングまたは並べ替えが必要です。

算術の参照モデルは広い整数で構築し、選択した出力変換を後で適用します。この小さな正の入力はオーバーフローを試していません。後のテストには負の値、最小の負のオペランド、長い縮約を追加する必要があります。Bが単位行列ならAが再現され、Aの全ゼロ行からはCの全ゼロ行が得られるはずです。最終和だけでなく各PEのk項の一覧も記録してください。そうすれば、2つの誤りが数値的に相殺していても、項の欠落や重複が見えるようになります。

自分で考えてみましょう

A=[[2,-1],[0,3]]、B=[[4,5],[-2,1]]について、C、MAC数、行優先形式でのB(1,0)の要素オフセットを求めてください。

解説を見る

C=[[10,9],[-6,3]]です。4つの和は8+2、10−1、0−6、0+3です。MAC数は2×2×2=8です。B(1,0)の要素オフセットは1×2+0=2です。

選択はこのブラウザに適用されます。フッターからいつでも変更できます。