Java applet:jocl operations stop java3d

时间:2013-05-15 20:03:38

标签: java applet opencl java-3d jocl

运行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工作频率使错误频率降低。这可能会比使用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性能损失

感谢。

1 个答案:

答案 0 :(得分: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