问题标签 [jocl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
273 浏览

java - jocl neural network

I wrote a neural network in java and it looked like a good idea to take the computation on the gpu for performance issue. The problem I have is that its too slow... I have used jocl to do so. I dont now if its the kernel here is some code:

making the weights __constant made the programm even slower(maybe it has to permanently switch data between global and local memory because the weights array is too big)

it seems like the most time takes this line:

tmp += gewichte[pos+i]*input[i];

one kernel call represents the computation of one Neural Network Layer and for every neuron of the layer one shader should perform( tanh(weightsOnThisNeuron + OutputFromAllNeuronsOfPreviousLayer).

I prepare all the kernels and store them so that if I want to execute them, they dont have to be prepared again and again.

The only IO between GPU and CPU is at the beginning and at the end when I retrieve the Output

Here is the code where I initialize the network and run the kernels:

thats the main:

has somebody any idea how I can make this faster??

the output is for:

0 投票
2 回答
368 浏览

java - OpenCL 脚本给出了意想不到的结果

我有这个简单的OpenCL代码块,我得到了意想不到的结果。参数image是一个浮点数组,value是一个从 -255 到 +255 的数字。使用 java 我使用 JSlider 来更改value. 默认值为 0,问题是当我将滑块移动到 0 以上时,图像是黑色的,如果我将滑块移动到小于 0 时,图像是白色的,这不应该发生。这应该单独检查每个像素并调整该像素。似乎不是出于某种原因。

此代码块应更改图像的阈值。红色绿色和蓝色大于阈值的任何像素都应该是白色,否则应该是黑色。

如果我用这个替换if/else中间的语句:

对于该操作,我得到了我正在寻找的结果,即调整图像的亮度。

我用OpenCL错了吗?据我了解, iskernel将被调用,直到返回被击中。我在 java 中使用 JOCL 来执行此操作,这是我用来调用它的代码:

0 投票
2 回答
1189 浏览

java - 使用 JOCL/OPENCL 加速强度总和计算

嗨,我是 JOCL(opencl)的新手。我编写了这段代码来获取每个图像的强度总和。内核采用一个包含所有图像的所有像素的一维数组,这些图像的所有像素相互放在一起。图像为 300x300 ,因此每张图像有 90000 像素。目前它比我按顺序执行此操作时要慢。

我的代码

在答案中的建议之后,通过 CPU 的并行代码几乎与顺序代码一样快。还有什么可以改进的吗?

0 投票
1 回答
1187 浏览

java - 呼吁战俘是模棱两可的

在使用 JOCl(java 版本 opencl)时,我遇到了这个错误。

我的内核代码:

我认为这是因为 x 和 y 的数据类型。但是当我做一个简单的 pow(1,1) 时,它会导致同样的错误。

我怎样才能解决这个问题?

0 投票
1 回答
955 浏览

java - 在 JOCL 中将 int 作为内核参数传递

所以我有一个看起来像这样的内核:

我已经弄清楚如何通过创建缓冲区来传递数组(Java 中的字节数组):

然后设置它:

我想不通的是如何设置数字参数......这是Java中的一个简单的int ?

0 投票
1 回答
270 浏览

java - JOCL中的定时数据传输和执行

我正在使用 JOCL 库(由 JOGAMP 提供),我想知道是否可以测量将数据从主机传输到设备所花费的时间、内核所花费的时间以及分别返回结果所花费的时间?

目前我正在像这样调用我的内核:

queue.putReadBuffer(...).put1DKernel(...).putWriteBuffer(...)

0 投票
1 回答
972 浏览

struct - OpenCL:内联函数的结构字段初始化不起作用

我有一个 OpenCL 内核代码,它的行为不符合预期。用 gcc 编译的类似 C 代码可以正常工作。

总是输出[0, 0, ..., 0].
如果我初始化d.a__kernel bar只分配它d->a[0] = 99foo预期工作并输出[99, 99, ..., 99]

提前谢谢!

更新:
我使用 Java 和 JOCL 作为主机代码。

正如 ScottD 建议的那样,我已将d->a = b;功能更改foo*d->a = *b;.
它在 C 版本中运行良好。但是在 MacOS 上导致 OpenCL 出现以下错误:

或者在带有 AMD CPU 的 Windows 上终止 JVM:

0 投票
0 回答
331 浏览

java - Opencl with jocl:cpu 和 gpu 的计算规则相同

我正在使用 jocl 对浮点数组的元素应用一些三角函数。虽然同时在 cpu 和 gpu 上执行相同的代码,但结果在 0.000x 数字上变化很小,而且很少见。这必须源于cpu / gpu的差异核心。一个是使用一些不同的算法(也许我弄错了)。

问题:如何告诉 opencl/jocl 使用相同的舍入/IEEE 规则来计算三角函数/指数函数?

编辑:在控制台上编写时可能是 System.out.println() 的舍入事件吗?特别是在申请 sin() 或 cos() 80000 次反馈时出现问题。

谢谢。

主机:fx8150 设备:fx8150 + hd7870(稍后将用于 2x Xeons 和 1 firegl 4800)

0 投票
1 回答
437 浏览

java - Jocl 和设备裂变

编辑:问题解决了!rzymek 的回答很有帮助。

问题:对于 JOCL,如何通过设备裂变从 opencl 计算中排除一些 CPU 内核?(cl_device_partition_property 的 Java 端口在 0.1.9 版本中似乎已损坏)

编辑:我发现了这个:

但 java/jocl 不接受这个:

错误是:

刚刚尝试空初始化,然后使用变量自己的方法来设置属性:

编辑:现在它给出了

错误。

IT 需要是 unsigned int(不是 cl_device_partition_property),但 java 没有。

使用构造函数的新尝试:

错误:

另一个尝试:

错误:

这也不起作用:

编辑:问题解决了!谢谢。现在可以分区我的cpu:

在此处输入图像描述

0 投票
1 回答
360 浏览

java - Java 小程序:jocl 操作停止 java3d

Jocl(opencl wrapper) 内核运行使 java3d 输出禁用。当 opencl 完成时,java3d 继续工作。

如何让 Opencl(jocl) 和 opengl(java3d) 一起工作?我需要某种命令来告诉“它的 opencl 时间”,当它完成时它会告诉“现在它的 opengl 时间”。

当 opencl 工作时,java3D Jpanel 以某种方式冻结并变灰。

我做了一些跟踪,发现 java3D 正在骚扰 opencl(jocl),jmonkey engine 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(Java 的 opencl 包装器)从来都不是问题,在 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 性能损失

谢谢。