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

●2層目は入力16ch・・・一つの積和演算器では間に合わない

 2層目は入力16チャネルあります。仮にそれらを一つの積和演算器が受け持つとすると、1層目の4倍の時間がかかり、スループットが目標の320usを越えてしまいます。したがって図5‐26のように積和演算器を
4個用意して、それぞれが入力4chを分担することにします。

 同図の一番上の積和演算器は入力ch0〜3を受け持ち、それらを逐次的に処理します。出力の1ラインは26画素なので、90ns x 26 x 4ch = 9.36usで1ライン計算します。
 その下の積和演算器は入力ch4〜7、次はch8〜11、最後はch12〜15を受け持ち、各自同様に処理します。

図5-26 2層目の出力1chの1ラインを計算するイメージ

1ライン計算するのに9.36us (+休み時間で10.08us)

 4個の積和演算器の出力を足し込んでCNN1ブロックの1ラインが計算されます。それらは並列に動くので、それにかかる時間は同じ 2.34us x 4ch =
9.36us になります。
 1層目が1ライン計算するのに10.08usかかり、その周期で2層目の入力のラインバッファが更新されます。2層目は1ライン9.36usなので演算は間に合っています(*1)

(*1)2層目も各ライン10.08usで処理する(ライン単位で1層目とタイミング合わせ)。10.08 - 9.36 = 0.72usは休み時間になる。


●26ライン、32チャネル計算するのに243.36us

 図5‐27のように出力は26×26画素あるので、10.08us x 26Line =
262.08us で1画面の演算が終了します。

 2層目入力16chは上述のように4つの積和演算器で分担されます。そして出力は
32chあるので図5‐26が32組、すなわち積和演算器が4×32=128個必要になります(ここ参照)。それらは並列に動くので、出力32ch全部にかかる時間は同じで262.08usになります。

図5‐27 2層目は26ラインある

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

 各層は
320us (VGAのHSYNCの10回ぶん)のスループットでCNN1ブロックを処理しなければなりません。
 2層目は上記のように262.08usで1ブロック処理するので、320us - 262.08us = 57.92usの余裕をもって終了することになります。

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

 2層目は128並列(
乗算器128個)で動かしてスループットに間に合わせます。ただ、このFPGAには乗算器が87個しかないので、2層目はこのように乗算器を使わない「ビットシフト乗算」で対応します。


次のページへ


目次へ戻る