ハードウェア概要 ============== BNN-PYNQのアクセラレータの概要を記載する * BNN-PYNQのアクセラレータは、C++のコードからVivado HLSで高位合成で生成 * 学習済みの重みは、全てon-chip(モデルの初期化時にロードする) * アクセラレータへの入出力データはストリーム処理(AXI4-Stream) * DRAMとの接続、レイヤー間の接続は全て64bit幅のストリーム * 各レイヤの入出力のI/FはAXI4-Stream * Binarized Neural NetworkをFPGA最適化するために、計算をビット演算等で近似している * アクセラレータのコアは、行列xベクトルを計算するMVTUというユニット * Fully ConnectedレイヤーもConvolutionレイヤーも、内部ではMVTUを使う * レイヤー毎に最適化されたMVTUを持つ * MTVUは、内部に複数のPE(Processing Element)をもつ * PEは、ビット演算を並列化できる(SIMD) * MVTUは、PEの数とPE内の並列度(SIMD幅)を高位合成時に変更できる * レイヤー毎に最適化することで、モデル全体のボトルネックをなくしてレイテンシを少なくする * Folding * 完全に並列化するのが理想だが、FPGAのリソースには制限がある * そのため、リソース内で最大のハードウェアを用意して、使いまわす仕組み