Jocl(opencl wrapper) カーネルを実行すると、java3d の出力が無効になります。opencl が終了すると、java3d は引き続き動作します。
Opencl(jocl) と opengl(java3d) を連携させるにはどうすればよいですか? 「そのopencl時間」を通知し、終了すると「現在のopengl時間」を通知するある種のコマンドが必要です。
opencl が動作していると、どういうわけか java3D Jpanel がフリーズして灰色になります。
私はいくつかのトレースを行い、java3D が opencl(jocl) に嫌がらせをしていることがわかりました。jmonkey エンジン 3.0 はそれを行いません。別の試行では、jmonkey が同じことを行っていることが示されました。突然、opencl によるすべてのパーティクル位置の更新が停止し、すべての位置が 0,0,0 になります。
デバイスごとに一意のコンテキスト、プログラム、ID などを使用します。
どのようにエラーが見えるか: 銀河がスムーズにレンダリングされている間、突然すべての粒子が私が作成していない平面に投影され、平面が線に投影されてから数秒後に、その線がスポットに投影されます。これらはすべて、バッファー x[] y[] z[] がすべての要素に対してゼロになり始めるためです。
編集:GPUの動作周波数が低いと、エラーの頻度が低くなります。これは、ローカルで計算を実行して高速に動作させるため、ファーマークよりも GPU を強く押している可能性がありますか? それとも、これは jocl/jmonkey/java3d 間のタイミング/アクセス優先度の問題ですか? furmark を含む他のすべてのプログラムは 1225MHz (hd7870 hawk) で安定していますが、これはおそらく 1000MHz (hd7870 の AMD デフォルト) でのみより安定しているか、ガベージ コレクション障害によってバッファが破壊されるため不安定に見えます ??
Aparapi (java 用の opencl ラッパー) は問題なく、1200MHz で正常に動作しました。「ドライバーが機能を停止し、回復しました」というエラーが発生しました。Catalyst 13.3 ベータ版。Jocl 1.5.1 と疲れた 1.5.2。Catalyst 13.4 whql も同じことを行います。
System.gc(); を置く カーネルの繰り返しループがすぐに間違ったことをする直前に、私が見逃したガベージコレクションがあるはずです
一部のトレース: clCreateBuffer メソッドにガベージ コレクションの問題がある
編集:問題を解決しました。CL.CL_MEM_USE_HOST_PTR プロパティが使用されている場合、メイン スレッドで clCreateBuffer によって作成されたバッファーは、サブスレッドのガベージ (収集される) のように見えます。CL.CL_MEM_COPY_HOST_PTR は、%1-%2 のパフォーマンス低下と引き換えに問題を解決します
ありがとう。