私のプログラムは、OpenGLを使用して画面に描画します。このタスクは、低負荷ですが、レイテンシに敏感です。私のプログラムの別のCPUスレッドは、高度に集中しているが優先度の低い計算をしています。 OpenCLを使ってこの計算をGPU上で実行するように実装しました。それ以来、OpenGLの描画ではビジュアルレイテンシが大きすぎます。GPUリソースをコードで共有する
GPUの読み込みを管理したり、GPUでタスクをスケジュールすることは可能ですか?私はAMD Radeon GPUを使用しています。私が知る限り、OpenCLのための「Device Fission」拡張があります。このような場合に役立ちますが、CPUだけがサポートされていますか?
私が心配している別のことは、AMD System MonitorがGPU占有率を55%レベルで示していることです。だから、私の意見では、OpenGLとOpenCLの両方の部分を実行するのに十分なリソースがなければなりません。 私は自分のOpenCLカーネル機能を使って小さな実験をしました。グローバルワークサイズは、OpenCLカーネルの実行中にいくつかのコンピューティングユニットがアイドル状態になることを保証するのに十分な数だけ制限されていました。それを補うために、各作業項目はより多くの仕事をします。 GPUの占有量は少なくなりましたが、カーネルの動作時間は長くなりました。その結果、OpenGLは遅くなります。したがって、OpenGLの描画とOpenCLの計算を同時に行うことはできません。どこのカードがそのような機能をサポートしているかの情報はどこにありますか? NVIDIA GPUはどうですか?
OpenCLの実装では、個別にテストすると大幅に高速化されます。しかし、OpenGLとの組み合わせは不十分です。 GPUが同時に描画して計算できる場合は、どこで情報を見つけることができますか?私はRadeon HD 58xxを使用しています。 – AdelNick
"ほとんどのGPUは一度に1つのタスクしか実行できません。つまり、すべてのGPUで同時に描画したり計算したりすることはできません。これはどちらも技術的に真実ではないという理由で両方とも不幸な言い方です(合理的に新しいGPUは少なくとも3つの異なることを同時に行うことができます - 一連のワークグループを処理し、リタイアしてさらにセットアップし、DMA転送を実行します)。ドライバーが非同期コマンドキュー(または複数)を持つことによってこのほとんどを合体させるからです。したがって、GPUが技術的に一度に1つのことしかできないとしても、その間に引き続き(つまり提出する)ことができます。 – Damon