FC2カウンター FPGAの部屋 テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実装する3(出力をグローバル・バッファからホストにコピーできない)
FC2ブログ

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

FPGAの部屋

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

テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実装する3(出力をグローバル・バッファからホストにコピーできない)

テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実装する2(Vivado HLS 編 2)”の続き。

テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実装する1(Vivado HLS 編 1)”のコードにはバグがあった。固定小数点を int32_t に変更しただけなので、小数点以下が切られてしまっている。これを現在は、256 倍してから int32_t に変更してある。
テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実装する2(Vivado HLS 編 2)”でエラーの表示を見ると、ハードウェアの出力値がほとんど 0 なのが分かると思う。このバグは 256 倍して出力して、出力側で 1/256 倍することで修正できた。しかし、Vitis アクセラレーション・プラットフォームで出力、つまり、左に曲がるか、直進するか、右に曲がるか(CNN の利用用途は白線走行です)の判定の output と左折、直進、右折の判定スコアの dot2[ ] の 2 個の出力値を出力しているが、それが 0 になってしまって反映されていない。

q.enqueueMigrateMemObjects({output_buf, dot2_buf},CL_MIGRATE_MEM_OBJECT_HOST);

q.enqueueMigrateMemObjects({output_buf},CL_MIGRATE_MEM_OBJECT_HOST);
q.enqueueMigrateMemObjects({dot2_buf},CL_MIGRATE_MEM_OBJECT_HOST);

の 2 つやってみたが、やはり output と dot2[ ] の値が 0 だ。
template_cnn_2019_02_7_200105.png

もしかすると、出力バッファは 1 個のみということなのか? 出力バッファを 1 個にして試してみよう。


そして、白線走行用途では複数回イテレーションを回す必要があるが、そのやり方は、Xilinx 社のGitHub の Xilinx/Vitis_Accel_Examples/cpp_kernels/kernel_chain/ にあるので参考にしたい。

Vitis_Accel_Examples/rtl_kernels/rtl_vadd_2kernels/src/host.cpp を見たところ、複数の出力バッファに出力できているように見えるが、別のカーネルのようだ。1 つのカーネルについて、グローバル・バッファからホストにコピーできるのは 1 個だけか?の結論は持ち越しのようだ。
  1. 2020年01月05日 06:29 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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