0
OCLパイプを使用してカーネル間でデータを渡していますが、各パスの後に新しいデータが入るようにパイプをクリアする必要があります。私は 'write_pipe'関数を使うたびにそれ自体?OpenCLパイプのクリア
私は基本的にこれをやっている、と私は理想的にパイプを使用する:
kernel1{
//read data from host, then write to pipe
}
do..x times
kernel2{
//read pipe
//calculations
//write pipe
}
kernel3{
//read pipe
//write to host
}
単一のカーネル内のパイプW R /にはいくつかの回避策がありますパイプ+例についての詳細を読むことができますか?いくつかの種類の障壁や類似の障壁がありますか? 2番目のカーネルの計算が終了した直後に、カーネルがループが完了するまで再び呼び出されるときに、2番目のカーネルの計算がそのデータに戻されるようにする必要があります。パイプを使用する目的は最適化のためです。この場合、ホストとの間でデータのやりとりをするコードは望ましくありません。 – jiuwo
単一のカーネルで回避するのではなく、回避してください。 kernel1がpipe1に書き込み、pipe2とkernel2からpipe2への書き込みとpipe1からの読み取りを行うように、おそらく2つのカーネル(2番目の複製または同様のもの)と2つのパイプを持つ必要があります。 – doqtor
カーネルは、一般的なopenclコンテキスト、例えばグラフィックカードでも動作させることができます: '' k1:ホストからの読み込み、pipe0'の書き込み'' 'k2:パイプの読み込み0、パイプ1の書き込み' '' 'k3:読み込みpipe1、write pipe0' 'k4:パイプを読み、ホストに書き込み' ?私が書いたコードはあるデバイスで動作しているようだが、別のデバイスでは動作していないようだ。 – jiuwo