FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io

AWS EC2 F1インスタンスを使ったハードウェア開発の勉強 (10. 整数行列計算回路の実装)

AWS F1インスタンス HDK の勉強を続けている。 目標としては、以下の部分にAXIマスタを接続してDRAMにアクセスし、データをフェッチする。

  1. DMAでホストからデータをDDR4メモリに格納する。
  2. AXIマスタデータをフェッチする
  3. 演算し、結果を格納する。

として、例えば行列積のアクセラレータをF1インスタンス上で動作させてみたい。

f:id:msyksphinz:20180516232156p:plain

というわけで、とりあえず簡易的な行列演算回路、というか Dot Product Accelerator を作ってみた。 これでシミュレーションを実行してみる。 まずは簡単に、16x16の行列積を計算するための、16要素同士の32bit整数のDot Productを計算する。これをホストから16×16回アドレスを変えながら実行し、行列積を実行する。

f:id:msyksphinz:20180524004101p:plain

とりあえず256要素分を全部計算すると時間がかかるので、以下の青色の部分だけを計算するようにプログラムを切り替えてシミュレーションを実行した。

f:id:msyksphinz:20180524004850p:plain

計算結果のログを抽出すると、以下のようになる。正しく計算できていることが確認できた。

今度は計算性能を上げる改造と、F1インスタンスを使ったFPGAでの動作を確認していく。

            35594000 : [matrix] result FIFO read     0000000000008a20
            38094000 : [matrix] result FIFO read     0000000000008aa8
            40878000 : [matrix] result FIFO read     0000000000008b30
            43270000 : [matrix] result FIFO read     0000000000008bb8
            45778000 : [matrix] result FIFO read     00000000000167a8
            48642000 : [matrix] result FIFO read     0000000000024730
            50750000 : [matrix] result FIFO read     00000000000328b8
            53262000 : [matrix] result FIFO read     0000000000040c40