FC2カウンター FPGAの部屋 laplacian_filter1_host.cpp に時間計測コードを追加2
FC2ブログ

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

FPGAの部屋

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

laplacian_filter1_host.cpp に時間計測コードを追加2

laplacian_filter1_host.cpp に時間計測コードを追加”の続き。

前回は、OpenCL の getProfilingInfo() を使用した時間計測を試みたがセグメンテーション・フォールトで出来なかった。そこで、 gettimeofday() を使用した時間計測コードを作成して時間計測した。ツィッターで @KSuzukiii さんに「enqueueTaskに event渡してないのが気になりました。」というコメントをいただいたので、調べてみるとたしかにそうだった。コードを修正して、やってみると成功したので、OpenCL の getProfilingInfo() を使用した時間計測を行った。

OpenCL の getProfilingInfo() を使用した時間計測のコードを示す。

    cl::Event event;
    uint64_t lapf_start, lapf_end;

    //Launch the Kernel
    q.enqueueTask(krnl_lap_filter, NULL, &event);

    // The result of the previous kernel execution will need to be retrieved in
    // order to view the results. This call will transfer the data from FPGA to
    // source_results vector

    q.enqueueMigrateMemObjects({hw_lapd_buf},CL_MIGRATE_MEM_OBJECT_HOST);

    q.finish();

    // 時間計測
    event.getProfilingInfo<uint64_t>(CL_PROFILING_COMMAND_START, &lapf_start);
    event.getProfilingInfo<uint64_t>(CL_PROFILING_COMMAND_END, &lapf_end);
    auto lapf_time = lapf_end - lapf_start;
    printf("laplacian_filter1: %lu ns\n", lapf_time);


enqueueTask()に event を渡すようにした。
更に、”Ultra96-V2 をUSB-LAN 変換アダプタでネットワークに接続”でUltra96-V2 がネットワークに接続されたので、Vitis からラプラシアン・フィルタ処理を行ってみよう。

Vitis 2019.2 の laplacian_filter1 アプリケーション・プロジェクトを示す。
lap_fitler_19_191222.png

まずは、前準備をする。まだ、SFTP でUltra96-V2 にファイルをアップロードできていないため、MicroSD カードの rootfs の /mnt に test.bmp をコピーした。lap_filter_axim.xclbin, laplacian_filter1.exe はアップロード出来ているので、Vitis は Ultra96-V2 にファイルをアップロードできているのだが。。。
lap_fitler_20_191222.png

lap_fitler_21_191222.png

MicroSD カードを Ultra96-V2 に挿入して電源ON した。
ifconfig を行うと、ネットワークに接続されていることが分かる。
lap_fitler_22_191222.png

最初に、zocl ドライバを insmod でロードしておかないとダメなようなので、それを行う。
insmod /lib/modules/4.19.0-xilinx-v2019.2/extra/zocl.ko
lap_fitler_26_191222.png

Vitis 2019.2 の Assistant ウインドウで lalacian_fiter1_system -> Hardware を右クリックし右クリックメニューからRun -> Run Configuratio を選択した。
lap_fitler_30_191222.png

Debugger_laplacian_filter1 を作成した。
Connection は Ultra96-V2 の IP アドレスを入れた Remote を作成した。
lap_fitler_23_191222.png

lap_fitler_24_191222.png

Run ボタンをクリックしてアプリケーションを起動した。
結果が表示された。
経過時間は 5064440 ns だった。つまり約 5.1 ms だった。gettimeofday() で計測したのとほとんど変わらない。
lap_fitler_27_191222.png

後 3 回実行してみよう。
Vitis 2019.2 の Assistant ウインドウで lalacian_fiter1_system -> Hardware を右クリックし右クリックメニューからRun -> Debugger_laplacian_filter1 を選択した。
lap_fitler_31_191222.png

laplacian_filter1 アプリケーションが起動した。
lap_fitler_28_191222.png

同様に後 2 回実行した。
lap_fitler_29_191222.png

lap_fitler_32_191222.png

平均すると約 5.0 ms だった。

シリアル・コンソールには[drm] メッセージが表示されている。
lap_fitler_33_191222.png

/mnt ディレクトリには、lap_filter_axim.xclbin, laplacian_filter1.exe がアップロードされていた。
lap_fitler_34_191222.png
  1. 2019年12月22日 06:25 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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