Skip to content

aquaxis/CNNFPGA

Repository files navigation

ソフトウェア技術者のためのFPGA入門 機械学習編 ワークフォルダ

本リポジトリは「ソフトウェア技術者のための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までのプロジェクトが表示されます。

SDSoCプロジェクト概要

  • ケース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プロジェクト

ケース0:ソフトウェアのみのSDSoCプロジェクト

本プロジェクトは関数のFPGA化は行わず、開発したソフトウェアが正常にコンパイルを通せるのかを確認するためのプロジェクトです。 本プロジェクトのソースコードはPCで開発されたソースコードをSDSoCへ適用する第一歩のプロジェクトの位置付けです。

ケース1:CalcConvolution関数をFPGA化するSDSoCプロジェクト(mem_attributeプラグマの適用)

本プロジェクトはCalcConvolution関数をFPGA化します。 CalcConvolution関数は本アプリケーションの再下位層の関数です。 最下位層から関数のFPGA化が行えるか試みるプロジェクトです。

本関数でデータ転送を行うfiltter、input_dataにmem_attributeプラグマを適用してFPGA化を試みます。

ケース2:CalcConvolution関数をFPGA化するSDSoCプロジェクト(access_patternプラグマの適用)

本プロジェクトはCalcConvolution関数をFPGA化します。 ケース1と違う点は本関数でデータ転送を行うfiltter、input_dataに適用するプラグマをaccess_patternに変更した点です。

ケース3:Convolution関数をFPGA化するSDSoCプロジェクト

本プロジェクトはConvolution関数をFPGA化します。 本関数はCalcConvolution関数の上位関数であり、本関数がFPGA化が可能なのか試みます。

ケース4:Convolution関数及びPooling関数をFPGA化するSDSoCプロジェクト

本プロジェクトはConvolution関数とPooling関数の2関数をFPGA化します。 本プロジェクトは複数関数のFPGA化を試みます。

ケース5:CNNLayer関数をFPGA化するSDSoCプロジェクト

本プロジェクトはCNNLayer関数をFPGA化するプロジェクトです。 本関数はConvolution関数及びPooling関数の上位関数になります。

本関数のFPGA化によって効果があるのか確認するプロジェクトです。

ケース10:Convolution関数をFPGA化し、トレース機能の追加したSDSoCプロジェクト

本プロジェクトはConvolution関数をFPGA化し、本関数へのアクセスタイミングをトレースし確認するプロジェクトです。

ケース11:Convolution関数のデータ用バッファをmemcpyで一旦、コピーする改修をしてFPGA化し、トレース機能の追加したSDSoCプロジェクト

本プロジェクトはケース10で得られたトレース結果から、Convolution関数の配列を関数内で一時バッファリングするように改修し、その効果があることを確認するプロジェクトです。

ケース12:CNNLayer関数のデータ用バッファをmemcpyで一旦、コピーする改修をしてFPGA化し、トレース機能の追加したSDSoCプロジェクト

本プロジェクトではケース11で得られた結果から、Convolution関数の上位かんすであるCNNLayer関数について、配列を一時バッファリングするように改修し、その効果があることを確認するプロジェクトです。

ケース20:CNNLayer関数にPIPELINEプラグマを適用したSDSoCプロジェクト

本プロジェクトではPILELINEプラグマを指定して効果があるか確認するプロジェクトです。

ケース21:CNNLayer関数にUNROLLプラグマを適用したSDSoCプロジェクト

本プロジェクトではUNROLLプラグマを指定して効果があるか確認するプロジェクトです。

ケース30:CNN処理全体(CNN3レイヤ+全結合)をFPGA化したSDSoCプロジェクト

ケース40:Convolution関数をエミュレータで確認するSDSoCプロジェクト

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages