2013-05-15 38 views
5

Jocl(opencl wrapper)内核运行使得java3d输出被禁用。当opencl完成时,java3d将继续工作。Java applet:jocl操作停止java3d

我怎样才能让OPENCL(jocl)和OpenGL(Java3D的)一起工作?我需要一些能够告诉“opencl时间”的命令,当它结束时它会告诉“现在它的开放时间”。

不知怎的,Java3D的JPanel的冻结,当OpenCL是工作变成灰色。

我做了一些跟踪和发现,Java3D的是harrassing的OpenCL(jocl),jmonkey引擎3.0没有做那。另一个尝试显示jmonkey做同样的事情。突然所有粒子位置停止更新通过opencl然后所有职位去0,0,0。

为每个设备使用独特的上下文,程序,ID ...。

错误是怎么样的:当星系呈现平滑时,突然所有的粒子都被投影到我没有创建的平面上,然后在飞机投影到一条线上几秒钟后,最后该线被投影到一个点上。所有这些必须是因为缓冲区x [] y [] z []开始为所有元素取零。

编辑:较低的GPU工作频率使错误频率降低。难道这会推动gpu比furmark更难吗?因为在本地进行计算可以更快地工作?或者这是jocl/jmonkey/java3d之间的定时/访问优先级问题?包括furmark在内的所有其他程序都稳定在1225MHz(hd7870鹰),但只有在1000MHz(AMD默认的hd7870)时才更稳定,或者看起来不稳定,因为缓冲区被垃圾收集故障破坏?

Aparapi(java的opencl包装)从来没有问题,并在1200MHz工作正常 甚至有一个“司机停止运作和恢复”的错误。催化剂13.3 beta。 Jocl 1.5.1和累1.5.2。催化剂13.4 whql做相同。

Putting System.gc();内核重复循环立即让错误的事情之前,必须有一个垃圾收集的事情,我错过

对于一些跟踪:clCreateBuffer方法与垃圾收集

编辑一个问题:解决这个问题。在使用CL.CL_MEM_USE_HOST_PTR属性时,由主线程中的clCreateBuffer创建的缓冲区对于子线程来说似乎是一种垃圾(将被收集)。 CL.CL_MEM_COPY_HOST_PTR解决了1%,2%的性能损失

感谢的交流问题。

+0

Java3D的可以使用OpenGL或DirectX。不知道这是否会有所帮助,但值得一试:'-Dj3d.rend = d3d' – whiskeyspider

+0

无法完成这项工作。我认为我的驱动程序催化剂或amd应用程序包已损坏。 –

回答