人気ブログランキング | 話題のタグを見る

雑多な趣味の記録帳

tom01h.exblog.jp

メモリマップ BNN アクセラレータを小型化する

BNN アクセラレータはかなり高速なのですが、それにデータをくべる CPU が鈍足なので性能を生かしきれいていません。
回路の量はさほど気にはしていないのですが、メモリアクセス幅が 1024bit っていうのは、無駄遣いするのはちょっとなぁと思います。そんなわけで、アクセラレータを時分割動作に変更しようと思います。
具体的には、現状 32bit 幅の回路を 32個インスタンスしていますが、これを 8個に減らして 4サイクル繰り返し動作にします。メモリアクセス幅は 256bit になります。実際は、8サイクル動作(128bit)にしても大した性能低下はないと思っているのですが、将来 CPU が高速化することを夢見て…
メモリマップ BNN アクセラレータを小型化する_f0054075_16510081.png
上が 32bit 分のアクティベーションを作る波形です。上から、クロック、BNNのリクエスト、データRAMアクセスリクエスト、ユニットビジーの負論理、BNN動作中、の信号です。まだスカスカです。
左から、最初に1個が BNN 初期化、3+3+4 の波が 9画素分の畳み込みとプーリング、それを4回繰り返した後にノーマライズとアクティベーションのちょっと長めの波が来ます。
この変更で、今までウェイト制御を気にせずに済ませていたメモリアクセス論理(ペリフェラルだけは気にしていたけど)にウェイト制御を追加しました。
セットアップも含めた1枚の画像を推論するプログラムの実行時間が 1637165 サイクルから 1639325 サイクルになりました。
ちなみに自由度は減りますが、カーネルサイズ3x3固定、入力チャンネル数32bitに固定したらこれくらいにはなります。
メモリマップ BNN アクセラレータを小型化する_f0054075_17263859.png

by tom01h | 2018-05-18 22:20