OpenGL頻繁に使用されるバッファが孤立するのが一般的です。理想的にはドライバは同じサイズのバッファが要求されたことに気づき、可能であれば古いバッファを返します。バッファは、古いバッファがまだ使用中で再利用できない場合にのみ新しいメモリを割り当てます。OpenCLバッファを孤立させるべきですか?
OpenCL(最新の開発者用ドライバを使用しているNVIDIAハードウェア上)この技術についてはよくわかりません。私は頻繁に再割り当てするC++ラッパーrefcountingによって処理される256kBのバッファを持っています。ほとんどの場合、これはうまくいきますが、新しいバッファを割り当てるときにOpenCLがCL_OUT_OF_MEMORYエラーをスローします。
私は自分のアプローチ(例えば、一定数のバッファを使用する)を切り替えるべきだと思いますか?または、私はこの問題の他の考えられる原因を調査すべきですか?
種類について、
フロリアン
私はそれについては分かりません。 OpenCLはCのセマンティクスを使用しますが、OpenGLの属性と技術を継承しています。 cppラッパー・ライブラリー(cl.hpp)の割り振りと再割り振りは、次のようになります:// init cl :: Buffer b = cl :: Buffer(attribs); // reinit b = cl :: Buffer(他の属性)...今、ラッパーは再配置作業をしています...しかし、OpenCLの実装では独自のメモリ管理が必要です。そして、それは同じサイズのバッファを再利用することができます。 – fho
そのようなバッファを「再初期化」すると、メモリリークが発生します。それは再初期化されませんが、別のバッファを作成し、以前のバッファへの参照を失います。参照が失われても、解放されたり再利用されたりするわけではありません!これをしないでください。 – dietr
あなたに同意しないと申し訳ありませんが、C++ OpenCLラッパーは、C++オブジェクトが破棄されたときにOpenCLリソースを解放する参照カウントされたシステムを実装しています。 – fho