Java applet:jocl operations stop java3d

hus*_*sik 5 java applet java-3d opencl jocl

运行Jocl(opencl包装器)内核会禁用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工作频率使错误频率降低.这可能会比使用furmark更难推动GPU,因为在本地进行计算可以更快地工作吗?或者这是jocl/jmonkey/java3d之间的时间/访问优先级问题?所有其他程序,包括furmark,稳定在1225MHz(hd7870鹰)但这可能在1000MHz(AMD默认的hd7870)更稳定或看起来不稳定,因为缓冲区被垃圾收集故障破坏?

Aparapi(java的opencl包装器)从来都不是问题,在1200MHz下工作正常甚至还有"驱动程序停止运行并恢复"错误.催化剂13.3 beta.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的性能损失

谢谢.

cho*_*ida 1

是的,这可能是一个很难追踪的问题。我为此苦苦挣扎了一段时间,直到我找到了这条线索。

http://www.khronos.org/message_boards/showthread.php/6184-Creating-buffers

当然,讨论该标志的使用的文档可以在这里找到

http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clCreateBuffer.html