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

macos - 配备 Intel Iris Pro 1024 MB 的 Mac OSX Marvericks 上的 GPU 计算

我有一台配备 Intel Iris Pro 1024 MB 的 Mac OS X Marvericks,并且一直在处理中进行一些图形/模拟工作。我遇到了内置 perlin 噪声处理功能的性能问题。

我计划使用 GPU 来计算 perlin 噪声(或其他一些基于值的噪声)现在我对 Nvidia 的 CUDA 有点熟悉,但对基于 Intel 的芯片一无所知。我什至不确定我是否可以在这里做同样的事情。

到目前为止,我继续尝试了 JOCL 0.1.9 示例,它们似乎工作正常。从这个链接:http ://www.jocl.org/samples/samples.html

但是我尝试从http://www.jocl.org/cloth/cloth.html运行布料模拟演示,但在命令行中它显示以下日志:

单击 GUI 上的 INIT 会将以下内容添加到日志中:

所以我只需要有人给我指出正确的方向,让我知道是否可以在我的机器上编写 GPU 代码,如果可以的话,如果我能得到一些指示,那就太好了。

谢谢。

0 投票
1 回答
2102 浏览

java - OpenCL 中的灰度图像

我想将 RGB 图像转换为灰度图像。

我的问题是,图像是缩放的,但分辨率保持不变。这里是一个例子:图像

看来 OpenCL 代码似乎是正确的:

因此,我似乎在对象的大小或 BufferedImage 本身上犯了一个错误(注意:cl 类仅用于获取 cl COMmandqueue/device/... 的实例)

此致

0 投票
0 回答
140 浏览

opencl - CPU中带有OpenCL的浮点数,不出现小数部分

我在 OpenCL 中有这段代码:

当我在 GPU 中运行时,变量 C 的返回值为 3.5,所以没关系。但是当我在 CPU 中运行时,返回是 3.0。任何浮点值都会发生这种情况。

但是如果我运行这段代码:

我将 3.5 的值传递给变量 A,这在 CPU 和 GPU 中运行正常。

为什么会这样?

0 投票
1 回答
851 浏览

opencl - 使用障碍会导致 CL_INVALID_WORK_GROUP_SIZE 错误

如果我在内核中使用屏障(无论 ifCLK_LOCAL_MEM_FENCE或),它会导致错误。全局工作大小为 512,本地工作大小为 128,必须计算 65536 个项目,我的设备的最大工作组大小为 1024,我只使用一维。对于 Java 绑定,我使用 JOCL。内核非常简单:CLK_GLOBAL_MEM_FENCECL_INVALID_WORK_GROUP_SIZE

我在内核上运行Intel(R) Xeon(R) CPU X5570 @ 2.93GHz并且可以使用 OpenCL 1.2。调用方法看起来像

但错误总是一样的:

我做错了什么?

0 投票
1 回答
276 浏览

cuda - 高级语言中的 GPGPU 性能

对于我的科学博览会项目,我必须编写一个非常适合并行化的计算密集型算法。我已经阅读过有关 OpenCL 和 CUDA 的信息,似乎它们主要用于 C/C++。虽然学习一点 C 来编写一个简单的 main 对我来说并不难,但我想知道如果我使用 Java 或 Python 绑定来进行 GPU 计算,性能会受到多大的影响?具体来说,我对使用 CUDA 的性能影响更感兴趣,因为这是我计划使用的框架。

0 投票
0 回答
339 浏览

floating-point - opencl 内核 float4 问题

我正在研究 Fruchtermon 和 Reingold 布局算法的 OpenCL 实现,与我已经实现的 CPU 版本相比,我的工作非常好。但是我注意到,对于大型图,repel函数存在瓶颈 - 它计算图中每对顶点之间的排斥力。我决定尝试使用 OpenCLfloat4结构来减少这个瓶颈,但结果好坏参半。

我已经设置了代码,所以我可以使用float4,而实际上只使用了 1 个位置(用于调试)。当我仅使用一个位置 ( float_workers = 1) 时,该功能正常工作正确的行为

但是,当我设置时,我float_workers > 1的行为变得越来越奇怪。 不正确的行为(float_workers = 4)

我无法弄清楚我的代码有什么问题 - 我正在使用 JOCL,因为整个内核都在我的 Java 类中的一个字符串中,所以诸如: gid *= " + String.valueOf(float_workers) + ";做有意义,并编译之类的行。

线标记 (1) 到 (2) 正在使用正确数量的项目(1-4 个项目,取决于 float_workers)设置 float4。此循环将 GID 映射到一对节点(当 float_workers = 1 时)或当 float_workers 较高时映射到两对、三对或四对节点。线标记 (2) 到 (3) 是正在执行的实际工作(计算排斥节点的量)。到 end 的线标记 (3) 将结果设置为“位移”数组,因此可以稍后更新节点的位置。显然,当我将内核排入队列时,我会正确调整工人的数量,所以这似乎不是问题。

我是否正确假设每个xPos[...]只能设置一次?这是我能想到的唯一能打破这一点的事情。我错过了什么吗?

0 投票
1 回答
1361 浏览

java - 如何在 OpenCL 中读取 txt 文件

我是 OpenCL 的新手。有人知道如何通过 OpenCL 读取文本文件吗?因为我希望能够读取文件并将内容拆分为一些数组。例如,我的 txt 文件包含:1010101 1 1010111。我想得到 1010101 作为数组 a 和 1010111 作为数组 b。在这里,我们看到一个制表符/空格,它的制表符分隔符为“1”,所以我也需要使用分隔符“\t1”进行拆分。

这是我的主要代码:

但是对于 calcDistanceCs() 和 calcDistanceRs() 他们都需要读取一个 txt 文件。然后从那个文件中我得到了这样的数组(stateArray []):

这是我需要阅读的示例文本文件: 00010000000000000000000000001000000000000000000000110000000001000000000010010111000000000000000000100000000000000001001000000000000000000000000000000001000000000000000000000000100000100000000000001000000000000001010000000000010000000000000000001000000000000001000000001000001100101000000000000010000000000010000000000000000000000000010000000000000110000000000001000000000000000000000100000000001001001110010000000000000000100000000000000000001000000000010000000010000000010000000000000000000010000000000100110000001000000000000000000000000001000000000000000100000000000100000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000010000000000000000100000110000000000000000000000000000000010000000000000000000010000000000000000000000100 1 00010000000000000000000000001000000000000000000000010000000001000000000000010011000000000000000000100000000000000001001000000000000000000000000000000001000000000000000000000000100000100000000000001000000000000001010000000000010000000000000000001000000000000001000000001000001100001000000000000010000000000010000000000000000000000000010000000000000110000000000001000000000000000000000100000000001001001110000000000000000000100000000000000000001000000000010000000010000000010000000000000000000000000000000100110000001000000000000000000000000001000000000000000100000000000100000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000010000000000000000100000110000000000000000000000000000000010000000000000000000010000000000000000000000100

从上面的示例中,我想拆分为: 第一个数组:第二个数组:00010000000000000000000000001000000000000000000000110000000001000000000010010111000000000000000000100000000000000001001000000000000000000000000000000001000000000000000000000000100000100000000000001000000000000001010000000000010000000000000000001000000000000001000000001000001100101000000000000010000000000010000000000000000000000000010000000000000110000000000001000000000000000000000100000000001001001110010000000000000000100000000000000000001000000000010000000010000000010000000000000000000010000000000100110000001000000000000000000000000001000000000000000100000000000100000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000010000000000000000100000110000000000000000000000000000000010000000000000000000010000000000000000000000100000100101110000000000000000001000000000000000010010000000000000000000000000000000010000000000000000000000001000001000000000000010000000000000010100000000000100000000000000000010000000000000010000000010000011001010000000000000100000000000100000000000000000000000000100000000000001100000000000010000000000000000000001000000000010010011100100000000000000001000000000000000000010000000000100000000100000000100000000000000000000100000000001001100000010000000000000000000000000010000000000000001000000000001000000000000000000000100000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000100000000000000001000001100000000000000000000000000000000100000000000000000000100000000000000000000001000001001011100000000000000000010000000000000000100100000000000000000000000000000000100000000000000000000000010000010000000000000100000000000000101000000000001000000000000000000100000000000000100000000100000110010100000000000001000000000001000000000000000000000000001000000000000011000000000000100000000000000000000010000000000100100111001000000000000000010000000000000000000100000000001000000001000000001000000000000000000001000000000010011000000100000000000000000000000000100000000000000010000000000010000000000000000000001000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000001000000000000000010000011000000000000000000000000000000001000000000000000000001000000000000000000000010000100000000000001000000000000001010000000000010000000000000000001000000000000001000000001000001100101000000000000010000000000010000000000000000000000000010000000000000110000000000001000000000000000000000100000000001001001110010000000000000000100000000000000000001000000000010000000010000000010000000000000000000010000000000100110000001000000000000000000000000001000000000000000100000000000100000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000010000000000000000100000110000000000000000000000000000000010000000000000000000010000000000000000000000100001000000000000010000000000000010100000000000100000000000000000010000000000000010000000010000011001010000000000000100000000000100000000000000000000000000100000000000001100000000000010000000000000000000001000000000010010011100100000000000000001000000000000000000010000000000100000000100000000100000000000000000000100000000001001100000010000000000000000000000000010000000000000001000000000001000000000000000000000100000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000100000000000000001000001100000000000000000000000000000000100000000000000000000100000000000000000000001001001000000000000000010000000000000000000100000000001000000001000000001000000000000000000001000000000010011000000100000000000000000000000000100000000000000010000000000010000000000000000000001000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000001000000000000000010000011000000000000000000000000000000001000000000000000000001000000000000000000000010010010000000000000000100000000000000000001000000000010000000010000000010000000000000000000010000000000100110000001000000000000000000000000001000000000000000100000000000100000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000010000000000000000100000110000000000000000000000000000000010000000000000000000010000000000000000000000100

每个数组由 800 个字节组成(从数组 0-799)。分隔符(分隔符),我将其设为粗体1

0 投票
2 回答
218 浏览

parallel-processing - JOCL 本地内存访问语法

这是我的 OpenCl 内核函数

我已经使用全局内存来存储数据。现在我尝试将存储位置转换为本地内存。所以我的代码如下所示:

当我执行上述代码时,出现以下语法错误:

谁能指出我的错误?

提前致谢!

0 投票
0 回答
148 浏览

opencl - 我是否重载了我的 opencl 内核?运行代码时我的屏幕变黑

我的内核函数必须存储一个包含 7500 个值的中间私有数组。在运行代码时,我的屏幕会出现一秒钟的空白,并且当它恢复时不会显示结果。假设没有足够的私有内存,我稍微更改了代码。现在它将每个新数组值与迄今为止计算的最大值进行比较。这样我就不需要创建一个包含 7000 个值的数组。相反,我只存储最大的价值。但我仍然遇到同样的问题。那么我的屏幕变黑的原因可能是什么?这是我的内核:

存储在private static String programSource;. 这是代码:

0 投票
0 回答
256 浏览

java - Opencl 内核启动开销和 2M-20M 元素的分治算法

澄清: 我将opencl计算函数的参数(例如内核范围、设备和显式副本)硬编码到我的每个项目中,但这很累,我决定编写一个完全动态的类,对数组进行分治并发送片段到不同的设备。目前,它可以构建支持 opencl 的设备列表,可以使用多个线程划分工作,使用另一个线程池进行计算并使用第三个线程池重新组装。(例如:1个线程划分,2个设备上的2个线程计算,1个线程将结果组装成原始数组)。线程驻留在 java 执行程序的线程池中。

问题:当它将一个 2M 元素的工作分成 256 块(每个计算 8k 元素)时,内核启动开销(在 gpu 上)变得超过执行时间的 %100。当我增加每个片段的大小(到 ~64k 或 128k)时,它会变得无性能意识,例如在弱设备上进行过多的工作并且速度会更慢。每个元素上的工作量也可能不相等(光线跟踪、粒子碰撞的树结构、可变循环迭代......)。我的 gpu 只能同时执行两个独立的内核,所以我无法成功隐藏分而治之碎片的读取-计算-写入。如果我简单地将所有工作分成两部分,那就更糟了。当元素数量达到 20M 时,内核启动开销将非常明显。

问题:我是否应该只将整个阵列复制到所有设备一次(而不是片段)(10 个设备的 10 个副本,可以使用重叠的计算和副本隐藏一些)并且在连续的 ndrangekernel 执行上只计算一次,或者将最小尺寸的部分复制到设备然后测试其性能,然后根据该微基准复制可变长度的元素数组?如何在执行次数与性能感知之间取得平衡,以实现光线追踪、粒子碰撞和排序算法的实时速度,以便我的 cpu 实际上可以帮助 gpu 而不是降低性能?

现在,它看起来像:

系统: windows-7 64 位 + 支持 Opencl 1.2 的 gpu 和 cpu、jocl 和 java 64 位。所以我不能使用 Opencl 2.0。