问题标签 [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 回答
62 浏览

java - 如何在 jocl 中使用 t_sampler 知道像素颜色

我想使用 jocl 检测二进制图像中的峰值。我的峰值的定义是彩色像素的组合(如图所示)

图片

如何使用 t_sampler 了解像素颜色?

PS:我的图像是二值图像

0 投票
1 回答
299 浏览

java - 如何从浮点数 4 中知道像素颜色是否为黑色

我问我的问题如何以 不同的方式在 jocl 中使用 t_sampler 了解像素颜色

然后我用

我的问题是:如何使用值像素来知道相关像素的颜色?

几天后我被困住了,我尝试了很多解决方案来解决这个问题,如果您需要任何澄清,我会回复。这是我的内核代码

0 投票
1 回答
93 浏览

java - gpu中的时间测量执行和分配

我正在使用 OpenCL 和 JOCL 在 GPU 上执行并行内核。

我想知道:

1/ 是否有任何功能可以了解工作项和工作组的内核大小以及它是如何在我的 Nvidia GPU 平台上执行的?

2/是否有可能在没有 GPU/CPU 数据传输的情况下知道内核的执行时间,因为?我在启动内核之前和之后使用了 java 工具System.currentTimeMillis(); ,但它包括数据传输时间。

3/更准确地说,有没有可能知道每个 GPU 核心的执行时间?

0 投票
1 回答
120 浏览

java - 在另一个内核启动之前不会调用 JOCL eventCallback

我正在尝试运行一个执行 OpenCL 内核的多线程 Java 应用程序。我想在内核完成时通知其中一个线程,所以我尝试使用 clSetEventCallback 方法。

为此我准备了一个方法

我调用这个函数来执行三个不同的内核,它们之间有 5 秒的间隔。代码运行良好,我得到了预期的结果。但是,当我查看应用程序输出时,回调方法不会在实际内核完成时执行,而是在程序再次调用 run 方法时执行。最后执行的内核的回调永远不会执行(内核被执行,因为获得的结果是正确的)。

我的代码是否有任何问题,所以在下一个内核入队之前不会执行回调?我错过了什么?或者 JOCL/OpenCL 库没有正确通知内核结束?

0 投票
1 回答
368 浏览

libgdx - libGDX 是否支持构建在 LWJGL 中的 OpenCL 包装器?

我最近一直在编写一个卷积反向传播神经网络,我主要使用 Java 来运行程序,并使用 libGDX 来进行图形可视化。经过大量研究,我发现要大幅提高性能和效率,我应该在显卡而不是 CPU 上执行矩阵计算。

在网上查阅资料后,我发现在显卡上进行此类计算的主要方法是通过 OpenCl。经过更多研究后,我发现我在 Java 上支持 OpenCl 的主要两种选择是通过 LWJGL 或 JOCL。

libGDX 是基于 LWJGL 构建的,所以我的第一反应是看看我是否可以通过 libGDX 库访问内置的 OpenCL 支持,但是,环顾四周后,我什么也没发现!

我的问题是,我可以通过 libGDX 库访问 OpenCl,如果可以,如何访问?

如果我无法访问 LWJGL 的 OpenCl 实现,我应该使用 JOCL 来访问 GPU 数学计算,还是应该在我的 libGDX 应用程序中添加第二个 LWJGL 库?

0 投票
1 回答
585 浏览

java - OpenCL如何在使用多个设备时重建缓冲区?

我正在使用 jogamp jocl 库在 Java 中学习自己的 openCL。我的一项测试是创建 Mandelbrot 地图。我有四个测试:简单的串行、使用 Java 执行器接口的并行、针对单个设备的 openCL 和针对多个设备的 openCL。前三个可以,最后一个不行。当我将多设备的(正确)输出与多设备解决方案的不正确输出进行比较时,我注意到颜色大致相同,但最后一个的输出是乱码。我想我知道问题出在哪里,但我无法解决。

问题在于(恕我直言)openCL 使用矢量缓冲区并且我必须将输出转换为矩阵。我认为这个翻译是不正确的。我通过将 mandelbrot 映射划分为宽度 (xSize) 除以任务数并保留高度 (ySize) 的矩形来并行化代码。我认为我能够将该信息正确地传输到内核中,但是将其翻译回来是不正确的。

最后一个循环是罪魁祸首,这意味着(我认为)内核编码和​​主机翻译之间存在不匹配。内核:

最后一条语句将信息编码到向量中。单设备版本也使用此内核。唯一的区别是在多设备版本中我更改了宽度和 x0。正如您在 Java 代码中看到的那样,我xSize / number_of_tasks以宽度和pXMin + i * sliceXx0(而不是 pXMin)传输。

我现在已经工作了几天并且已经删除了很多错误,但是我现在看不到我做错了什么。非常感谢您的帮助。

编辑 1

@Huseyin 要求提供图片。由 openCL 单设备计算的第一个屏幕截图。 在此处输入图像描述

第二个屏幕截图是多设备版本,使用完全相同的参数计算。 在此处输入图像描述

编辑 2

有一个关于我如何将缓冲区排入队列的问题。正如您在上面的代码中看到的那样,我有一个list<CLTestTask>向其中添加任务并且缓冲区被排队的地方。CLTestTask 是一个内部类,您可以在下面找到它的代码。

最终类 CLTestTask 实现 CLTask { CLBuffer clBufferC = null; 缓冲区 bufferSliceC; 字符串内核名称;整数索引;整数切片宽度;整数宽度;整数高度;整数最大迭代次数;双 pXMin; 双 pYMin;双x_step;双 y_step;

0 投票
1 回答
1058 浏览

graphics - OpenCL查找数组中最小值的索引

我正在使用 OpenCL(通过 JOCL)在光线行进的一系列距离计算中找到最小值。伪代码看起来像这样:

我的实现有点废话。我目前没有并行化距离计算,但我想这样做。这就是我不这样做的原因:

获得最小距离很容易,但检索这个索引并不明显。我最终迭代了距离并跟踪了当前的最小值及其索引,但这在并行环境中显然是垃圾。

基本上可以在这里使用提示将我引向正确的方向,或者告诉我我是否完全吠错了树?(例如,这是一个 CPU 工作吗?)

谢谢!

0 投票
0 回答
80 浏览

opencl - Surface 3 pro 上的 OpenCL 双精度错误

我创建了一些基准程序来测试 OpenCL 的一些特性。这已经在多个平台上运行:核心 i7-920/nvidia 1060 和双 Xeon-2660/Radeon 480。这一切都很好。当我在 Surface 3 Pro 上运行它时,我得到以下输出:

如您所见,图形和处理器都被识别,但图形不支持双精度并被软件跳过。然而,处理器应该支持双精度。但是是不编译的。Surface 3 pro 是否有一些特定的东西无法运行?它在 Java 和 jocl 上运行。

编辑

该软件会构建一个设备列表,并且只选择拥有 cl_khr_fp64 属性的设备。Surface 3 pro(i7-4950U)的 CPU 确实具有此属性。在 .CL 代码中,第一行是:#pragma OPENCL EXTENSION cl_khr_fp64 : enable.

0 投票
0 回答
33 浏览

java - 在内核中给定 char 数组时,JOCL 程序构建错误

我有这段代码(从 JOCL 示例修改),其中 CL 内核采用 float 和 char[] 指针:

我认为问题出在内核中,特别是 . char[],但我无法弄清楚。是它,还是它在构建它?

0 投票
2 回答
140 浏览

java - JOCL Char 不返回所有字符

结果:

为什么它不为数组中的每个生成 aq,问号是什么?我尝试改变一些东西,比如int gid = get_global_id(0);to int gid = get_global_id(1);,最终结果是[q, , , ...][m, , , ...]。有人可以解释一下,以及如何将多个chars 作为输入传递给 OpenCL 内核吗?