インテルのみ表示可能 — GUID: ewa1441294567188
Ixiasoft
インテルのみ表示可能 — GUID: ewa1441294567188
Ixiasoft
A.2.2. OpenCL 1.2 Cプログラミング言語の実装
セクション | 機能 | サポート状況 | 備考 |
---|---|---|---|
6.1.3 | その他の組み込みデータ型 | ● | この機能はOpenCL Specification version 1.2に準拠していない可能性があります。 |
6.12.12 | 各種ベクトル関数 | ● | SDKは次の組み込みベクトル関数を追加しサポートしています。
|
6.12.13 | printf | ● | この機能はOpenCL Specification version 1.2に準拠していない可能性があります。詳細は下記を確認ください。 |
OpenCLのprintf関数は一部例外をともない、C99のprintf関数に類似する構文と機能を持ちます。詳細は、OpenCL Specification version 1.2を参照ください。 printf関数の使用において、コンパイル手順、バッファーまたはフラグに対する特別な要件はありません。通常のaocコマンドで、printf命令を含むカーネルをコンパイルすることができます。 カーネルの実行中にprintfデータは、 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーが自動的に割り当てるグローバルprintfバッファーに格納されます。このバッファーのサイズは64 kBであり、printf呼び出しのデータ引数の合計サイズがこのサイズを超えてはいけません。カーネルの実行が完了するとprintfバッファーのコンテンツは標準出力されます。 printfステートメントのフォーマット文字列は、256文字を超えることはできません。 バッファーのオーバーフローはシームレスに処理されます。つまり、printf命令は無制限に実行することができます。ただし、printfバッファーがオーバーフローすると、カーネルのパイプラインの実行は、ホストがバッファーを読み取りバッファー内容を出力するまでストールします。 printf関数はデータをグローバル・メモリー・バッファーに格納するため、そのような関数が含まれている場合、カーネルのパフォーマンスは低下します。 printf関数の使用上の制限はありません。printf命令は、ifとelseのステートメントやループなどで使用することができます。カーネルは複数のワークアイテムで実行される複数のprintf命令を含むことができます。 printf呼び出しのフォーマット文字列引数と文字列リテラル引数は、特別なメモリー領域を使用しFPGAからホストシステムに転送されます。printf文字列引数の合計サイズが大きい場合、このメモリー領域はオーバーフローする可能性があります (一般的なOpenCLアプリケーションでは、通常3000文字以下が安全です)。オーバーフローした場合、エラーメッセージcannot parse auto-discovery string at byte offset 4096がホストプログラムの実行中に出力されます。 printfからの出力は、ワークアイテムが並行してprintf関数を実行しても混在することはありません。ただし、並行して実行されるprintfの順序は保証されていません。つまりprintf命令が並行するデータパスにある場合、printf出力はプログラム順に表示されない可能性があります。 |