【问题标题】:Java applet: jocl operations stop java3dJava 小程序:jocl 操作停止 java3d
【发布时间】:2013-05-10 13:15:47
【问题描述】:

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 hawk),但这可能更稳定在仅 1000MHz(AMD 默认的 hd7870)或者看起来不稳定,因为缓冲区被垃圾收集错误破坏了??

Aparapi(opencl wrapper for java) 从来都不是问题,在 1200MHz 下运行良好 甚至出现“驱动程序停止运行并恢复”错误。催化剂 13.3 测试版。 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 性能损失

谢谢。

【问题讨论】:

  • Java3D 可以使用 OpenGL 或 DirectX。不确定这是否会有所帮助,但值得一试:-Dj3d.rend=d3d
  • 无法完成这项工作。我认为我的驱动程序催化剂或 AMD 应用程序包已损坏。

标签: java applet opencl java-3d jocl


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2011-02-02
    • 2011-01-24
    • 2014-06-17
    • 1970-01-01
    相关资源
    最近更新 更多