FC2カウンター FPGAの部屋 Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化14(性能が最大になる設定を探る7、まとめ)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化14(性能が最大になる設定を探る7、まとめ)

メモリベースのラプラシアンフィルタ処理のCソースコードを高位合成した際のラプラシアンフィルタの処理時間をまとめておこう。

PL の各IP に供給されるのは、FCLK_CLK0 の出力周波数は 100 MHz だ。

1.ディレクティブを与えていない状態でのラプラシアンフィルタの処理時間を示す。この時には、FCLK_CLK0からすべてのIP にクロックが供給されている。

Vivado HLS 2014.4で生成したラプラシアンフィルタIPをシミュレーション3(原因が分かった)
ZYBO Linux (Ubuntu 14.04 LTS) 上でMakefile を作ってラプラシアンフィルタIPの制御ソフトをコンパイル4(うまく行った)

項目
Vivado HLS 2014.4 のクロック周期制約10 ns
Vivado HLS 2014.4 のTiming Summary Estimated8.75 ns
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register Slicenone
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブのEnable Data FIFOnone
ラプラシアンフィルタIPのACLKやaxi_mem_intercon_1へ供給するFCLK_FCLK3の周波数FCLK_CLK0に接続
axi_mem_intercon_1のACLKとPS のS_AXI_HP2_ACLKのクロック・リソースFCLK_CLK0
ラプラシアンフィルタ全体の処理時間95.4 ms
ラプラシアンフィルタのみの処理時間80.0 ms
1. のラプラシアンフィルタのみの処理時間との性能比1.00 倍














2.
ラプラシアンフィルタのCソース中の割り算をカウンタで置き換えて、2箇所にPIPELINEディレクティブを追加した状態でのラプラシアンフィルタの処理時間を示す。この時にも、FCLK_CLK0からすべてのIP にクロックが供給されている。

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化2(PIPELINEディレクティブ)
Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化3(PIPELINEディレクティブを実機テスト)

項目
Vivado HLS 2014.4 のクロック周期制約10 ns
Vivado HLS 2014.4 のTiming Summary Estimated8.75 ns
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register Slicenone
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブのEnable Data FIFOnone
ラプラシアンフィルタIPやaxi_mem_intercon_1へ供給するFCLK_FCLK3の周波数FCLK_CLK0に接続
axi_mem_intercon_1のACLKとPS のS_AXI_HP2_ACLKのクロック・リソースFCLK_CLK0
ラプラシアンフィルタ全体の処理時間71.4 ms
ラプラシアンフィルタのみの処理時間60.0 ms
1. のラプラシアンフィルタのみの処理時間との性能比1.33 倍














3.
tu1987 さんのラプラシアンフィルタの高速化Cソースコードを使用した場合の処理時間を示す。

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化4(tu1978さんのCソースコード)
Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化5(tu1978さんのCソースコードを実機で検証)

項目
Vivado HLS 2014.4 のクロック周期制約10 ns
Vivado HLS 2014.4 のTiming Summary Estimated9.63 ns
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register Slicenone
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブのEnable Data FIFOnone
ラプラシアンフィルタIPやaxi_mem_intercon_1へ供給するFCLK_FCLK3の周波数FCLK_CLK0に接続
axi_mem_intercon_1のACLKとPS のS_AXI_HP2_ACLKのクロック・リソースFCLK_CLK0
ラプラシアンフィルタ全体の処理時間35.4 ms
ラプラシアンフィルタのみの処理時間20.0 ms
1. のラプラシアンフィルタのみの処理時間との性能比4.00 倍














4.
Vivado HLS 2014.4 で高位合成するときのクロック周期を短くして、動作周波数を高くして高速化しようとした。.tu1987 さんのラプラシアンフィルタの高速化Cソースコードはクロック周期を短くする余地がなかった。 2. のラプラシアンフィルタのCソース中の割り算をカウンタで置き換えて、2箇所にPIPELINEディレクティブを追加したCソースコードのクロック周期を短くした。クロック周期は、4 ns 、250 MHz まで、エラー無しに高位合成できた。但しVivado 2014.4 によるインプリメントでは、FCLK_CLK3 を 166.66667 MHz に設定した。そのFCLK_CLK3 をラプラシアンフィルタIPやそのAXIバスが接続されているAXI_Interconnect のAXIバスのインターフェースのクロックとして使用した。

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化6(動作周波数のチューンナップ)
Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化7(動作周波数のチューンナップを実機で検証)

項目
Vivado HLS 2014.4 のクロック周期制約4 ns
Vivado HLS 2014.4 のTiming Summary Estimated3.94 ns
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register Slicenone
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブのEnable Data FIFOnone
ラプラシアンフィルタIPやaxi_mem_intercon_1へ供給するFCLK_FCLK3の周波数166.66667 MHz
axi_mem_intercon_1のACLKとPS のS_AXI_HP2_ACLKのクロック・リソースFCLK_CLK0
ラプラシアンフィルタ全体の処理時間78.4 ms
ラプラシアンフィルタのみの処理時間63.0 ms
1. のラプラシアンフィルタのみの処理時間との性能比1.23 倍















5.Vivado HLS 2014.4 で高位合成するときの制約を 10 ns に戻した。これで、Vivado 2014.4 でインプリメントをした時の slack の余裕に注目した。 slack の余裕から 120 MHz の動作周波数で動きそうだったので、PSのクロック設定で設定できた 118.2 MHz でラプラシアンフィルタIP を駆動した。

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化8(性能が最大になる設定を探る)

項目
Vivado HLS 2014.4 のクロック周期制約10 ns
Vivado HLS 2014.4 のTiming Summary Estimated8.75 ns
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register Slicenone
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブのEnable Data FIFOnone
ラプラシアンフィルタIPやaxi_mem_intercon_1へ供給するFCLK_FCLK3の周波数118.2 MHz
axi_mem_intercon_1のACLKとPS のS_AXI_HP2_ACLKのクロック・リソースFCLK_CLK0
ラプラシアンフィルタ全体の処理時間62.8 ms
ラプラシアンフィルタのみの処理時間47.4 ms
1. のラプラシアンフィルタのみの処理時間との性能比1.69 倍
















6. 5. から AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register Slice を Auto、Enable Data FIFO を 32 deep に変更した。

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化8(性能が最大になる設定を探る)

項目
Vivado HLS 2014.4 のクロック周期制約10 ns
Vivado HLS 2014.4 のTiming Summary Estimated8.75 ns
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register SliceAuto
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブのEnable Data FIFO32 deep
ラプラシアンフィルタIPやaxi_mem_intercon_1へ供給するFCLK_FCLK3の周波数118.2 MHz
axi_mem_intercon_1のACLKとPS のS_AXI_HP2_ACLKのクロック・リソースFCLK_CLK0
ラプラシアンフィルタ全体の処理時間62.7 ms
ラプラシアンフィルタのみの処理時間47.4 ms
1. のラプラシアンフィルタのみの処理時間との性能比1.69 倍
















7. 6. から、axi_mem_intercon_1のACLKとPS のS_AXI_HP2_ACLKのクロック・リソースを FCLK_CLK3 に変更した。つまり、PSのAXIバスとAXI Interconnect の全体のクロックの周波数を 118.2 MHz とした。

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化9(性能が最大になる設定を探る2)

項目
Vivado HLS 2014.4 のクロック周期制約10 ns
Vivado HLS 2014.4 のTiming Summary Estimated8.75 ns
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register SliceAuto
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブのEnable Data FIFO32 deep
ラプラシアンフィルタIPやaxi_mem_intercon_1へ供給するFCLK_FCLK3の周波数118.2 MHz
axi_mem_intercon_1のACLKとPS のS_AXI_HP2_ACLKのクロック・リソースFCLK_CLK3
ラプラシアンフィルタ全体の処理時間62.7 ms
ラプラシアンフィルタのみの処理時間47.4 ms
1. のラプラシアンフィルタのみの処理時間との性能比1.69 倍















8.Vivado HLS でクロック周期を 8 ns にして、FCLK_CLK3 を 130 MHz に設定した。

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化11(性能が最大になる設定を探る4)

項目
Vivado HLS 2014.4 のクロック周期制約8 ns
Vivado HLS 2014.4 のTiming Summary Estimated7 ns
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register SliceAuto
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブのEnable Data FIFO32 deep
ラプラシアンフィルタIPやaxi_mem_intercon_1へ供給するFCLK_FCLK3の周波数130 MHz
axi_mem_intercon_1のACLKとPS のS_AXI_HP2_ACLKのクロック・リソースFCLK_CLK3
ラプラシアンフィルタ全体の処理時間63.7 ms
ラプラシアンフィルタのみの処理時間48.6 ms
1. のラプラシアンフィルタのみの処理時間との性能比1.65 倍















9. 8. からから AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register Slice を none、Enable Data FIFO を none に変更した。但し、タイミング制約を満足していない。

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化12(性能が最大になる設定を探る5)

項目
Vivado HLS 2014.4 のクロック周期制約8 ns
Vivado HLS 2014.4 のTiming Summary Estimated7 ns
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register Slicenone
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブのEnable Data FIFOnone
ラプラシアンフィルタIPやaxi_mem_intercon_1へ供給するFCLK_FCLK3の周波数130 MHz
axi_mem_intercon_1のACLKとPS のS_AXI_HP2_ACLKのクロック・リソースFCLK_CLK3
ラプラシアンフィルタ全体の処理時間64.1 ms
ラプラシアンフィルタのみの処理時間48.9 ms
1. のラプラシアンフィルタのみの処理時間との性能比1.64 倍
















10. 9. から AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register Slice を Auto、Enable Data FIFO を 512 deep に変更した。

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化13(性能が最大になる設定を探る6)

項目
Vivado HLS 2014.4 のクロック周期制約8 ns
Vivado HLS 2014.4 のTiming Summary Estimated7 ns
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register SliceAuto
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブのEnable Data FIFO512 deep
ラプラシアンフィルタIPやaxi_mem_intercon_1へ供給するFCLK_FCLK3の周波数130 MHz
axi_mem_intercon_1のACLKとPS のS_AXI_HP2_ACLKのクロック・リソースFCLK_CLK3
ラプラシアンフィルタ全体の処理時間64.2 ms
ラプラシアンフィルタのみの処理時間49.0 ms
1. のラプラシアンフィルタのみの処理時間との性能比1.63 倍















これで、ラプラシアンフィルタをいろいろなクロック周期制約で Vivado HLS 2014.4 で高位合成し IP 化した時に、Vivado 2014.4 でまたいろいろとパラメータの変更した時の性能差をまとめられた。
一番性能が良いのが、3. tu1987 さんのCソースコードを使った時で、これが 1. に比べて 4倍だった。
私のPIPELINEディレクティブを与えたCソースコードで最速なのは、5. 6. 7. の 1.69 倍だった。いずれも Vivado HLS のクロック周期制約を 10 ns で、ラプラシアンフィルタ IP の動作周波数を 118.2 MHz にした時だった。

(追加)
完全にパイプライン化されていれば結果は違ったと思うが、シリアライズされているところがあるので、クロック周期を短くすると、周波数の増加以上にレイテンシが増えてしまったようだ。

(2015/04/21:追記)
11.コメント欄でラプラシアンフィルタのCソースコード例を示してくれたおるさんのコードを元に、tu1987さんがC++ソースコードを書いてくれた。
3. の tu1978 さんのC++ソースコードを修正して頂いた。今回の修正は、一旦輝度に変換せずにRGB値で値を持って、使うときにRGB-Y変換をするということだ。使うときにRGB-Y変換をするので、RGB-Y変換モジュールは1つから3つに増えているはずだが、一旦、1ライン分、RGB-Y変換をするパスがなくなるので、速くなるはずだ。
結果として、ラプラシアンフィルタ全体の処理時間は 30.5 ms 、ラプラシアンフィルタのみの処理時間は 15.3 ms となった。タイミングエラーは出ているが、初めて、60 fps の 16.7 ms を上回った。

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化15(性能が最大になる設定を探る8、追加1)
Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化16(性能が最大になる設定を探る8、追加2)

項目
Vivado HLS 2014.4 のクロック周期制約10 ns
Vivado HLS 2014.4 のTiming Summary Estimated9.63 ns
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register Slicenone
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブのEnable Data FIFOnone
ラプラシアンフィルタIPやaxi_mem_intercon_1へ供給するFCLK_FCLK3の周波数FCLK_CLK0に接続
axi_mem_intercon_1のACLKとPS のS_AXI_HP2_ACLKのクロック・リソースFCLK_CLK0
ラプラシアンフィルタ全体の処理時間30.5 ms
ラプラシアンフィルタのみの処理時間15.3 ms
1. のラプラシアンフィルタのみの処理時間との性能比5.23 倍











  1. 2015年04月15日 04:47 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/3120-52465ad9
この記事にトラックバックする(FC2ブログユーザー)