本リポジトリは「ソフトウェア技術者のためのFPGA入門 機械学習編」で解説しているSDSo 2017.2で使用できるワーキングフォルダとなっています。
次のようにリポジトリをクローン又はダウンロードしてSDSoCに取り込むことで使用することができます。
git clone git://github.com/CNNFPGA
SDSoCを起動します。
SDSoC起動時にワーキングスペースをクローンしたフォルダにします。
- 起動時に「Select a directory as workspace」ダイアログが表示される場合はここの「Workspace」に下記のフォルダを指定します。
- 起動時に「Select a directory as workspace」ダイアログが表示さずにSDSoCが起動した場合は、[File]-[Switch Workspace]-[Other...]を選択し、下記のようにワークスペースを指定します。
/home/hoge/CNNFPGA
最初はSDSoCの「Project Explorer」には何もプロジェクトが表示されていませので[File]-[Open Projects from File Systems...]を選択し、「Import Projects from File System or Archive」ダイアログで「Import source」を上記のフォルダに指定します。
フォルダの指定が行えると「Folder」タブにCNN_Test0〜40までのフォルダ一覧が表示されるのでチェックされていることを確認して「Finish」ボタンをクリックします。
指定したフォルダのインポートが完了すると「Project Explorer」にCNN_Test0〜40までのプロジェクトが表示されます。
-
ケース0:ソフトウェアのみのSDSoCプロジェクト
-
ケース1:CalcConvolution関数をFPGA化するSDSoCプロジェクト(mem_attributeプラグマの適用)
-
ケース2:CalcConvolution関数をFPGA化するSDSoCプロジェクト(access_patternプラグマの適用)
-
ケース3:Convolution関数をFPGA化するSDSoCプロジェクト
-
ケース4:Convolution関数及びPooling関数をFPGA化するSDSoCプロジェクト
-
ケース5:CNNLayer関数をFPGA化するSDSoCプロジェクト
-
ケース10:Convolution関数をFPGA化し、トレース機能の追加したSDSoCプロジェクト
-
ケース11:Convolution関数のデータ用バッファをmemcpyで一旦、コピーする改修をしてFPGA化し、トレース機能の追加したSDSoCプロジェクト
-
ケース12:ケース12をCNNLayer関数に変更してFPGA化し、トレース機能の追加したSDSoCプロジェクト
-
ケース13:ケース13のCNNLayer関数のデータ用バッファを移動してFPGA化し、トレース機能の追加したSDSoCプロジェクト
-
ケース20:CNNLayer関数にPIPELINEプラグマを適用したSDSoCプロジェクト
-
ケース21:CNNLayer関数にUNROLLプラグマを適用したSDSoCプロジェクト
-
ケース22:CNNLayerの全展開
-
ケース23:CNNLayerの全展開+PIPELINEプラグマ
-
ケース30:CNN処理全体(CNN3レイヤ+全結合)をFPGA化したSDSoCプロジェクト
-
ケース31:ケース13を元にCNN処理全体(CNN3レイヤ+全結合)をFPGA化したSDSoCプロジェクト
-
ケース32:ケース5を元にSDSoCプロジェクト
-
ケース33:CNNLayer0のみケース12を適用したSDSoCプロジェクト
-
ケース34:CNNLayerを使用したSDSoCプロジェクト
-
ケース40:Convolution関数をエミュレータで確認するSDSoCプロジェクト
-
ケース50:ケース30をZCU102のSDSoCプロジェクト
本プロジェクトは関数のFPGA化は行わず、開発したソフトウェアが正常にコンパイルを通せるのかを確認するためのプロジェクトです。 本プロジェクトのソースコードはPCで開発されたソースコードをSDSoCへ適用する第一歩のプロジェクトの位置付けです。
本プロジェクトはCalcConvolution関数をFPGA化します。 CalcConvolution関数は本アプリケーションの再下位層の関数です。 最下位層から関数のFPGA化が行えるか試みるプロジェクトです。
本関数でデータ転送を行うfiltter、input_dataにmem_attributeプラグマを適用してFPGA化を試みます。
本プロジェクトはCalcConvolution関数をFPGA化します。 ケース1と違う点は本関数でデータ転送を行うfiltter、input_dataに適用するプラグマをaccess_patternに変更した点です。
本プロジェクトはConvolution関数をFPGA化します。 本関数はCalcConvolution関数の上位関数であり、本関数がFPGA化が可能なのか試みます。
本プロジェクトはConvolution関数とPooling関数の2関数をFPGA化します。 本プロジェクトは複数関数のFPGA化を試みます。
本プロジェクトはCNNLayer関数をFPGA化するプロジェクトです。 本関数はConvolution関数及びPooling関数の上位関数になります。
本関数のFPGA化によって効果があるのか確認するプロジェクトです。
本プロジェクトはConvolution関数をFPGA化し、本関数へのアクセスタイミングをトレースし確認するプロジェクトです。
本プロジェクトはケース10で得られたトレース結果から、Convolution関数の配列を関数内で一時バッファリングするように改修し、その効果があることを確認するプロジェクトです。
本プロジェクトではケース11で得られた結果から、Convolution関数の上位かんすであるCNNLayer関数について、配列を一時バッファリングするように改修し、その効果があることを確認するプロジェクトです。
本プロジェクトではPILELINEプラグマを指定して効果があるか確認するプロジェクトです。
本プロジェクトではUNROLLプラグマを指定して効果があるか確認するプロジェクトです。