运行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性能损失
感谢。
答案 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