2012-02-08 7 views
1

私のプログラムは、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はどうですか?

答えて

0

あなたの問題は記憶に制約があるかもしれません。これは、GPUに多くの不安を与えます。 GPUの主なボトルネックは、GPUとの間でデータをコピーするだけでなく、グローバルメモリへの読み書きです。

必要以上にデータをコピーしないようにするには、ホストとデバイスのメモリ間を行き来する場合にGPUに直接共有データを置くことができるかどうかを確認してください。どのくらいの規模のデータセットで作業していますか?小さなデータセット= GPUでの占有率が低く、CPUを上回るパフォーマンスはほとんどありません。

ほとんどのGPUは一度に1つのタスクしか実行できません。つまり、すべてのGPUで同時に描画したり計算したりすることはできません。だからあなたが描くことができる前に計算が完了するのを待たなければならないでしょう、そして可能ならいつでも描くならばもちろん短いレイテンシを導入するvica verca /固定FPSを目標にしないで、可能な限り高いFPS 。

+0

OpenCLの実装では、個別にテストすると大幅に高速化されます。しかし、OpenGLとの組み合わせは不十分です。 GPUが同時に描画して計算できる場合は、どこで情報を見つけることができますか?私はRadeon HD 58xxを使用しています。 – AdelNick

+0

"ほとんどのGPUは一度に1つのタスクしか実行できません。つまり、すべてのGPUで同時に描画したり計算したりすることはできません。これはどちらも技術的に真実ではないという理由で両方とも不幸な言い方です(合理的に新しいGPUは少なくとも3つの異なることを同時に行うことができます - 一連のワークグループを処理し、リタイアしてさらにセットアップし、DMA転送を実行します)。ドライバーが非同期コマンドキュー(または複数)を持つことによってこのほとんどを合体させるからです。したがって、GPUが技術的に一度に1つのことしかできないとしても、その間に引き続き(つまり提出する)ことができます。 – Damon

関連する問題