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

opencl - CPU opencl 和一些设备裂变的占用

我正在对 FX8150 7 核设备和 1 核用于托管的设备裂变进行试验。然后放一些 51200 个浮点数的数组的工作量。计算是在 O(N*N)(trigonometric) 基础上完成的。第一次运行时,它只使用 3 个内核,然后第二次运行使用 7 个内核,最后一次运行再次使用 3 个内核。这可能是一个随机的职业问题吗?因为有时托管线程可能会妨碍并改变它完成的时间。这是在 jocl 中完成的。

有时甚至第一次运行使用 7 个内核,然后开始只使用 5 个内核。看起来是随机的。即使尝试偶数个核心(如 4-6)也会产生相同的行为。也许是windows-7 64位模块利用的东西,资源共享?就使用的核心数量而言,至少需要 50-200 次运行才能完全稳定。也许及时编译器和热点开始了?谢谢。

0 投票
2 回答
898 浏览

max - OpenCL (JOCL) - 内核中两个数组的二维微积分

我在这里问这个是因为我认为我已经了解 OpenCL 的工作原理,但是......我认为有几件事我不明白。

我想要做的是得到两个数组的所有值之间的差异,然后计算hypot,最后得到最大hypot值,所以如果我有:

然后根据 hypot(dx(i), dy(i)) 计算每个 hypot 并且一旦获得所有这些值,就得到最大的 hypot 值

所以,我有下一个定义的内核:

对于这种情况,定义的 GWG 大小为 (100, 100, 0),LWI 大小为 (10, 10, 0)。

所以,对于这个例子,两个数组的大小都是 10,GWG 和 LWI 的获得如下:

问题是我没有得到预期的值,所以我决定基于较小的内核进行一些测试并更改结果数组中返回的 [VARIABLE TO TEST VALUES] 对象:

返回的值远非预期,但如果 [VARIABLE TO TEST VALUES] 为 (index_a * index_b) + index_a,则返回数组的几乎每个值都具有正确的 (index_a * index_b) + index_a 值,我的意思是:

但有些值为:-3.350700319577517E-308....

我做错了什么???

我希望这能得到很好的解释,不要让你生我的气……

太感谢了!!!!!

汤姆赛车手

0 投票
1 回答
801 浏览

java - 需要帮助添加 OpenCL(GPU 使用)

好吧,我决定我更喜欢使用 GPU 而不是 CPU,尤其是因为我正在开发一款游戏,而我期望的 FPS 会增加。问题是我不知道从哪里开始。我可以轻松实现 JOCL 或 JCUDA,但之后我不知道在哪里将它从使用 CPU 替换为 GPU。帮助表示赞赏:)

0 投票
2 回答
3068 浏览

opencl - 将 OpenCL 用于多个设备(多个 GPU)

您好 StackOverflow 用户,

我有这个问题:我有一个非常大的图像,我想处理它。我的第一个想法是将大图像分成几个子图像,然后将这些子图像发送到不同的 GPU。我不使用图像对象,因为我不使用 RGB 值,但我只使用亮度值来操作图像。

我的问题是:

  1. 我可以为每台设备使用一个context与多个吗?commandqueues或者我应该为每个设备使用一个context和一个?commandqueue
  2. 谁能给我一个例子或想法,我如何动态更改 inputMem-Data(子图像数据)以设置内核参数以发送到每个设备?(我只知道如何发送相同的输入数据)
  3. 例如,如果我有比 GPU 数量更多的子图像,我如何将子图像分配给 GPU?
  4. 或者也许是另一种更聪明的方法?

我会感谢每一个帮助和想法。非常感谢。

0 投票
1 回答
532 浏览

hadoop - HADOOP Map 任务失败:未指定协议

我正在使用 CDH4,我正在尝试使用 JOCL 从映射器类的 cleanup() 方法访问 GPU。(注意:我的普通代码(没有 map reduce)在 GPU 上运行良好)。

当我执行我的 map-reduce 代码时,它会抛出一个错误(如下所示)。

每个地图任务都会引发错误“未指定协议”。这是什么意思 ?映射器类中使用的协议是什么?

问候

0 投票
1 回答
268 浏览

opencl - OpenCL 内核函数中的问题

我是 Open-cl 的新手,我正在尝试为以下矩阵运算编写内核代码:

例子

我为行级编写了内核代码(即我可以做 transpose(row1) X row1 ) - 这仅用于第一行

如何使用并行性计算每一行并在内核函数中找到最终总和?

0 投票
0 回答
198 浏览

kernel - 在 NVIDIA Tesla 上执行 OpenCL 多内核

我有这个问题,我不知道如何解决它。

我使用 2 个集群,其中一个使用 6 Tesla C1060,另一个使用 2 Tesla K20M

我有 2 个使用 JOCL 作为 Java 绑定的 OpenCL 程序。第一个具有以下结构:

这一项适用于带有 Tesla C1060 和 Tesla K20M 的计算机集群。

第二个程序有这样的结构:

我得到了预期的结果,但只是来自带有 2 Tesla K20M 的集群。从另一个带有 6 Tesla C1060 的集群,我得到了错误的结果(程序正常启动和结束,但提供了错误的结果)。我只用 1、2、3、4、5 TeslaC1060 尝试过,但每次我得到错误的结果。

我需要帮助来确定是否是导致此问题的硬件问题,或者我是否必须尝试更改多内核执行如何开始?也许我每次执行内核时都必须先读取结果,然后再将其发送到下一个内核?

我会很感激任何帮助。

谢谢

0 投票
1 回答
405 浏览

time - OpenCL 开始-结束分析时间比实际持续时间长

我编写了一个 OpenCL 程序并像这样执行我的内核

userEvent 确保内核同时运行。资料来源:[Reima 的回答]:我如何知道内核是否同时执行?.

我从一个带有 2 Tesla K20M GPU 的系统中得到了这个结果:

有人可以向我解释为什么 Start-End Profile Time 比总持续时间长吗?

谢谢你

0 投票
2 回答
422 浏览

arrays - GPU 上的数组和基准测试 - 奇怪的结果?

我目前正在 AMD Radeon HD 7870 上使用 OpenCL 进行一些基准测试。

我在 JOCL(Op​​enCL 的 Java 绑定)中编写的代码只是添加了两个二维数组(z=x+y),但它做了很多次(z=x+y+y+y+y+y+y. ..)。

我添加的两个数组的大小是 500 x 501,我正在循环遍历我想在 GPU 上将它们添加在一起的迭代次数。所以我首先添加它们一次,然后添加十次,然后添加一千次,等等。

我循环到的最大迭代次数是 100,000,000。下面是我运行代码时日志文件的样子(计数器是我的程序在 5 秒内执行的次数):

这些数字有意义吗?我觉得 0.97 TeraFLOPS 相当高,我一定是错误地计算了 FLOP 的数量。

此外,我相信我正在计算的 FLOP 数量应该随着迭代次数的增加而趋于平稳,但这在这里并不那么明显。似乎如果我继续增加迭代次数,计算出的 FLOPS 也会增加,这也让我相信我做错了什么。

仅供参考,我按以下方式计算 FLOPS:

FLOPS = 计数器(500)(501)(迭代)/(time_elapsed)

对此问题的任何帮助将不胜感激。

谢谢

编辑:

我现在已经完成了相同的基准测试,循环了一系列迭代(我将 y 添加到 x 的次数)以及数组大小。我已经生成了以下曲面图,可以在这个 GitHub 存储库中看到

https://github.com/ke0m/Senior_Design/blob/master/JOCL/Graphing/GoodGPUPlot.PNG

我已经询问了其他人对这个情节的看法,他们向我提到,虽然我计算的数字是可行的,但它们是人为的高。他们说这在情节的陡坡中很明显,这并没有任何物理意义。关于为什么斜率如此陡峭的一个建议想法是因为编译器将控制迭代(int 类型)的变量转换为 short,因此强制该数字保持在 32000(大约)以下。这意味着我在 GPU 上做的工作比我认为的要少,并且计算出更高的 GFLOPS 值。

任何人都可以确认这个想法或提供任何其他想法来解释为什么情节看起来如此吗?

再次感谢你

0 投票
2 回答
484 浏览

java - 任务之间的 OpenCL 共享内存

我一直在努力创建一个基于 GPU 的康威生命游戏程序。如果您不熟悉它,这里是Wikipedia Page。我创建了一个版本,它通过保留一组值来工作,其中 0 代表死单元格,1 代表活单元格。然后内核简单地写入图像缓冲区数据数组以根据单元格数据绘制图像,然后检查每个单元格的邻居以更新单元格数组以供下一次执行渲染。

但是,一种更快的方法将单元格的值表示为死的负数和活着的正数。该单元格的数量表示它具有的邻居数量加一(使零成为不可能的值,因为我们无法区分 0 和 -0)。然而,这意味着当产生或杀死一个细胞时,我们必须相应地更新它的八个邻居的值。因此,与只需要从相邻内存插槽读取的工作过程不同,该过程必须写入这些插槽。这样做是不一致的,并且输出的数组无效。例如,单元格包含数字,例如 14,表示 13 个邻居,这是一个不可能的值。代码是正确的,因为我在 cpu 上编写了相同的程序并且它按预期工作。测试后,我相信,当任务尝试同时写入内存时,会出现延迟,从而导致某种写入错误。例如,在读取数组数据和设置数据更改的时间之间可能存在延迟,从而导致另一个任务的过程不正确。我尝试过使用信号量和屏障,但刚刚学习了 OpenCL 和并行处理,还没有完全掌握它们。内核如下。

  1. 数组输出是用于渲染内核计算的图像缓冲区数据。
  2. sizeX和sizeY常量分别是图像缓冲区的宽度和高度。
  3. colorMap数组分别包含黑色和白色的 rgb 整数值,用于正确更改图像缓冲区的值以呈现颜色。
  4. newCellMap数组是确定渲染后计算的更新单元格图
  5. historyBuffer是内核调用开始时单元的旧状态。每次执行内核时,这个数组都会更新为 newCellMap 数组。

此外,wrap功能使空间呈环形。我该如何修复此代码以使其按预期工作。为什么全局内存不会随着任务的每次更改而更新?不应该是共享内存吗?