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工作频率使错误发生的频率降低。因为在本地进行计算以更快地工作,这会比gurmark更难插入gpu吗?还是这是jocl/jmonkey/java3d之间的计时/访问优先级问题?包括furmark在内的所有其他程序,都稳定在1225MHz(hd7870 hawk),但可能仅在1000MHz(AMD默认为hd7870)更稳定,或者由于缓冲区被垃圾收集破坏而损坏,因此看起来不稳定。

Aparapi(适用于Java的opencl包装器)从来没有问题,并且在1200MHz下可以正常工作
甚至出现“驱动程序停止运行并恢复”的错误。催化剂13.3 Beta。 Jocl 1.5.1和累了1.5.2。 Catalyst 13.4执行相同的操作。

放入System.gc();就在内核重复循环立即使错误的事情发生之前,一定有我错过的垃圾回收事情

进行一些跟踪:clCreateBuffer方法存在垃圾回收问题

编辑:解决了该问题。当使用CL.CL_MEM_USE_HOST_PTR属性时,由clCreateBuffer在主线程中创建的缓冲区似乎是子线程的垃圾(要收集)。 CL.CL_MEM_COPY_HOST_PTR通过交换%1-%2性能损失解决了该问题

谢谢。

最佳答案

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

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

关于Java Applet : jocl operations stop java3d,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16573988/

10-09 06:52