标签: jocl

在multimodule项目中"UnsatisfiedLinkError:已在另一个类加载器中加载本机库"

我有一个使用JOCL库(http://www.jocl.org/)的项目,并有多个模块.当我从命令行运行"./activator test",或在SBT控制台中运行"test"命令时,我收到如下错误:

[info] Exception encountered when attempting to run a suite with class name: pl.tarsa.sortalgobox.opencl.CpuMergeSortSpec *** ABORTED ***
[info]   java.lang.UnsatisfiedLinkError: Error while loading native library "JOCL_0_1_9-linux-x86_64" with base name "JOCL_0_1_9"
[info] Operating system name: Linux
[info] Architecture         : amd64
[info] Architecture bit size: 64
[info] ---(start of nested stack traces)---
[info] Stack trace from the attempt to load the library as a file:
[info] java.lang.UnsatisfiedLinkError: no JOCL_0_1_9-linux-x86_64 in java.library.path
[info]  at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1865)
[info]  at java.lang.Runtime.loadLibrary0(Runtime.java:870)
[info]  at java.lang.System.loadLibrary(System.java:1122) …
Run Code Online (Sandbox Code Playgroud)

sbt jocl

16
推荐指数
1
解决办法
1178
查看次数

Java applet:jocl operations stop java3d

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

谢谢.

java applet java-3d opencl jocl

5
推荐指数
1
解决办法
354
查看次数

释放Java中本机库分配的内存

如果您正在运行的代码调用Java中的本机库,那么当内存分配应在对象的生命周期内持续时,释放这些库分配的内存的常用方法是什么?在C ++中,我将使用析构函数,但是Java从来没有真正使用过析构函数,现在更少了

我最感兴趣的特定情况是JOCL,其中有一个对象,该对象包装已编译的OpenCL内核以及所有始终相同的参数。表示已编译内核和参数的结构都在库侧分配,JOCL提供了一种方法clReleaseMemObject,您可以调用该方法来递减指示何时应删除对象的引用计数器(请注意,这与直接释放内存有些不同,但在这种情况下,我基本上不这么认为。

我假设如果程序终止时该对象仍然存在,则操作系统将清除所有内容,但是我不确定线程​​中创建的对象。所以:

  1. 如果要在垃圾回收对象时释放本机内存,是否有合适的位置调用释放该内存的方法?

  2. 如果对象是将在线程持续时间内持续的对象,那么是否存在进行此调用的适当位置,或者甚至有必要这样做吗?

java memory-management native-code jocl

5
推荐指数
1
解决办法
151
查看次数

Using a barrier causes a CL_INVALID_WORK_GROUP_SIZE error

If I use a barrier (no matter if CLK_LOCAL_MEM_FENCE or CLK_GLOBAL_MEM_FENCE) in my kernel, it causes a CL_INVALID_WORK_GROUP_SIZE error. The global work size is 512, the local work size is 128, 65536 items have to be computed, the max work group size of my device is 1024, I am using only one dimension. For Java bindings I use JOCL. The kernel is very simple:

kernel void sum(global float *input, global float *output, const int numElements, local float *localCopy
{ …
Run Code Online (Sandbox Code Playgroud)

reduction opencl jocl

0
推荐指数
1
解决办法
690
查看次数

标签 统计

jocl ×4

java ×2

opencl ×2

applet ×1

java-3d ×1

memory-management ×1

native-code ×1

reduction ×1

sbt ×1