1 / 20 · 概念
内積を処理要素に割り当てる
行、列、縮約の添字を区別し、小さな参照行列を計算します。
レッスンは無料で読めます。受講登録すると進捗を保存できます。
スケジュールの前に計算を確定する
Aの形状をM×K、BをK×Pとします。積Cの形状はM×Pです。添字iは出力行、jは出力列を選び、kは和の中の縮約添字です。このコースではすべての添字をゼロから始めます。
出力固定の設計では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になり、行と列の取り違えを示す有用な特徴となります。
| PE | k=0の項 | k=1の項 | 結果 |
|---|---|---|---|
| (0,0) | 5 | 14 | 19 |
| (0,1) | 6 | 16 | 22 |
| (1,0) | 15 | 28 | 43 |
| (1,1) | 18 | 32 | 50 |
期待する行列は[[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です。