私はkhronos.orgでPipe API pagesを通じてOpenCLの2.xのパイプAPIおよび有鉛のthis descriptionを読みました。私は、OpenCLでのみ利用できるこの素晴らしい機能のCUDAでの仕事に嫉妬を感じました(そして、CUDAの機能はOpenCLによって正しく組み込まれていませんが、それは別の問題です)。 CUDAにはパイプ機構がありません」しかし、その後、私はそれが正確に何を意味するのか分からないことに気付きました。代わりに、私は質問します:OpenCL 2.xパイプ - 実際にどのように機能しますか?
AMD離散GPU/APUでのOpenCLパイプの動作はどうですか?書き込まれますどのような情報...
- ?
- パイプを使用してカーネルワークグループのコアへのスケジューリングはどのように行われますか?
- パイプカーネルは一緒にコンパイルされますか(SPIRフォームなど)?
- パイプの使用はコア固有のキャッシュ(OpenCLの用語で「ローカルメモリ」、CUDA用語で「共有メモリ」)を介して異なるカーネルの間でデータを渡すことはできますか。それは素晴らしいだろう。
- パイプは、一般的に、GPU上で動作するように、「はず」されている方法はありますか?すなわち、APIの作者が構想した、あるいは書いたことさえあるものは?
- OpenCLパイプはCPUベースのOpenCL実装でどのように機能しますか?
私はCUDAにパイプをエミュレートするグローバルバッファ、予約バッファ、およびアトミックとかなり些細であることを追加します。また、私はAMDのパイプは予約バッファのためにローカルメモリを使用すると信じています。 –
@JohnsPaul: "キャッシュヒット率の向上" - L2キャッシュまたはコア固有のL1キャッシュを意味しますか?そして、AMDのGPUやそのドライバは、L1キャッシュを利用するために、他のコアのコンシューマよりも前にパイプデータを作成した同じコアのパイプコンシューマを「優先」にすることができますか? – einpoklum
@AndreasPapadopoulos:1.アトミックを使用した同期のためにパフォーマンスを犠牲にすることは避けてください。 2.予約バッファにローカルメモリを使用すると、異なるコアのワークグループが予約を行う必要があります。 – einpoklum