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

●5層目の入力データRAM

 4層目の出力はプーリングで4×4画素となり、128チャネルになります。各画素は5ビットなので、図5‐35のようにビット幅が5bit x 128 = 640bit、アドレスが0~15のRAMに格納されます。

図5-35 4層目の出力は4x4画素、128ch、5bit

●5層目の重み係数ROM

 5層目の重み係数は図5‐36のようなROMに入ります。5層目からは
全結合型なので、2048個の入力にこのような2048×128の行列を乗算し、128個の出力を得ます。係数の数は多いですが、種類は4種類(±16、±64)なのでそれぞれ2ビットです。

図5‐36 2048行×128列

●2048回の積和で出力1個が得られる

 図5‐37にタイムチャートを示します。一番上は入力データRAM、2段目は重み行列ROMの読出しで、これらを乗算して累積します。2048個累積したところで積和演算は終了し、出力データが一つ得られます。クロック100MHzとすると、10ns x 2048 =
20.48usになります。

図5‐37 積和演算のタイムチャート

●CNN1ブロックは320us毎に送られてくる

 5層目の出力は128個あるので逐次的に全部計算すると20.48us x 128 = 2621.44usとなり、スループット(320us)を超えてしまいます。そこで図5‐37の3段目以降のように128個の出力を8個づつ、
16並列で計算させます。係数ROM(図5‐36)が16個に分かれているのはそのためです。


●5層目は16並列で間に合わせる

 並列化により、全出力計算にかかる時間は20.48us x 8 =
163.84usとなり、320us - 163.84us = 156.16usの余裕をもって終了することになります。乗算器は16個、それぞれビットシフト型です。


次のページへ


目次へ戻る