インテルのみ表示可能 — GUID: ewa1425914724241
Ixiasoft
インテルのみ表示可能 — GUID: ewa1425914724241
Ixiasoft
5.5.5.3. パイプ書き込みの実装
インテルでは、write_pipe関数の簡易版のみをサポートしています。デフォルトでwrite_pipe呼び出しはノンブロッキングです。受信するパケットを収容する容量がパイプにある場合にのみ、パイプ書き込み動作は成功します。
以下に詳細を説明します。
pipe_idはパイプが接続するバッファーを識別します。これは、対応する読み出しパイプ (read_pipe) のpipe_idと一致する必要があります。
dataはパイプ書き込み動作がパイプに書き込むデータです。これは、パイプのパケットタイプへのポインターになります。パイプへの書き込みは、データポインターのソースアドレス空間によっては、グローバルまたはローカルメモリーのロードにつながる可能性があることに注意してください。
<type> はパイプのデータ幅を定義します。戻り値はパイプ書き込み動作が成功したかどうかを示します。成功した場合の戻り値は0となり、パイプの書き込みが失敗した場合の戻り値は-1です。
/*Declares the writable nonblocking pipe, p, which contains packets of type int*/ __kernel void kernel_write_pipe (__global const long *src, write_only pipe int p) { for (int i = 0; i < N; i++) { //Performs the actual writing //Emulates blocking behavior via the use of a while loop while (write_pipe(p, &src[i]) < 0) { } } }
blocking属性を指定する場合、whileループは不要です。より良いハードウェアの実装を実現するためにインテルでは、カーネルのパイプ引数宣言にブロッキング属性 (__attribute__((blocking))) を指定することで、ブロッキングのwrite_pipe呼び出し機能を提供します。ブロッキングのwrite_pipe呼び出しは必ず成功を返します。