OpenCL カーネル - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 日本語

ザイリンクス ランタイム (XRT) ライブラリでは、すべてのビルド コンフィ (ソフトウェア エミュレーション、ハードウェア エミュレーション、およびハードウェア実行) で OpenCL™ printf() ビルトイン関数がサポートされています。

ヒント: printf() 関数は、OpenCL カーネルのすべてのビルド コンフィギュレーションでのみサポートされます。C/C ++ カーネルでは、printf() はソフトウェア エミュレーションでのみサポートされます。

次に、カーネルで printf() を使用する例と、カーネルを global サイズ 8 で実行した場合の出力を示します。

__kernel __attribute__ ((reqd_work_group_size(1, 1, 1)))
void hello_world(__global int *a)
{
    int idx = get_global_id(0);

     printf("Hello world from work item %d\n", idx);
     a[idx] = idx;
}

出力は次のようになります。

Hello world from work item 0
Hello world from work item 1
Hello world from work item 2
Hello world from work item 3
Hello world from work item 4
Hello world from work item 5
Hello world from work item 6
Hello world from work item 7
重要: printf() メッセージはグローバル メモリに格納され、カーネル実行が終了するとアップロードされます。printf() を複数のカーネルで使用した場合、各カーネルからのメッセージがどの順でホスト ターミナルに表示されるかはわかりません。特にハードウェア エミュレーションおよびハードウェアで実行している場合、ハードウェアのバッファー サイズによってキャプチャされる printf 出力の量は制限されます。