ザイリンクス ランタイム (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
出力の量は制限されます。