5‐04 スループットを決める(続き)

●1ライン演算するのにかかる時間

 1層目の入力は30×30画素ありますが、カーネルが3x3なので図5‐24のように、3ラインぶんのメモリがあれば畳み込み演算ができます。同図のように30画素×3ラインから出力の1ライン目(28画素)を計算しますが、それに有する時間は 90ns x 28 =
2.52usです(*1)。

(*1)クロック周波数100MHz (10ns)、9画素読み出すのに90nsかかる

●1層目は入力3ch・・・一つの積和演算器で面倒を見る

 1層目では入力はR/G/Bの3チャネルあり、それらを
一つの積和演算器が受け持つことにします。ただし、3chでは半端なのでダミーchを追加して4chにします(*2)

(*2)ダミーchはカーネルもデータも0、積和演算結果も0になる

図5-24 1層目の出力1chを計算するイメージ

1ライン計算するのに10.08us

 まず入力Rchのデータと係数で積和演算を行い、それで2.52usかかります。次はGchのデータと係数で積和、その次はBchのデータと係数で積和、最後にダミーchを計算して足し込みます。それぞれ2.52usかかるので、合計は2.52us x 4ch =
10.08us で出力の1ライン(28画素)の計算が終了です。


●28ライン、16チャネル計算するのに282.24us

 出力は28×28画素あるのでさらに28倍の時間がかかり、10.08us x 28Line =
282.24us で1画面の演算が終了します。
 1層目入力3chは上述のように1つの積和演算器で逐次的に処理されます。それに対し出力は
16chありますが、それらは16個の演算器で並列に処理されます(ここ参照)。したがって16ch全部にかかる時間は同じで282.24usになります。

●入力が入ってくる時間内に計算して出力できる

 図5‐01にあるように1層目には
320us (VGAのHSYNCの10回ぶん)の周期でCNNの1ブロックが入力されます。したがってスループットは320usになり、各層はその期間内にCNN1ブロックを処理しなければなりません。
 1層目は上記のように282.24usで1ブロック処理するので、320us - 282.24us = 37.76usの余裕をもって終了することになります。

●各層並列化によりスループットに間に合わせる

 まず「スループット」を320usと決め、1層目は16並列(
乗算器16個)でそのペースについていけることが分かりました。同様に他の層も間に合うかどうか、どれくらいの並列度になるか、などを考えていきましょう。


次のページへ


目次へ戻る