小编car*_*urs的帖子

OpenCL:为什么这两种情况之间的性能差异如此之大?

这是我正在研究的OpenCL内核的两段代码; 它们显示出截然不同的运行时间.

代码相当复杂,所以我简化了它.

这个版本在一秒钟内运行:

for (int ii=0; ii<someNumber;ii++)
{
    for (int jj=0; ii<someNumber2;jj++)
    {
        value1 = value2 + value3;
        value1 = value1 * someFunction(a,b,c);
        double nothing = value1;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个版本运行大约需要38秒:

for (int ii=0; ii<someNumber;ii++)
{
    for (int jj=0; ii<someNumber2;jj++)
    {
        value1 = value2 + value3;
        value1 = value1 * someFunction(a,b,c);
    }
    double nothing = value1;
}
Run Code Online (Sandbox Code Playgroud)

正如我所说,代码比这更复杂(循环中还有很多其他的东西),但变量"无"实际上确实从前一个移动到紧接在大括号之后.

我是OpenCL的新手,我无法解决发生的事情,更不用说如何修复它了.毋庸置疑,缓慢的情况实际上是我在实施中所需要的.我试过搞乱地址空间(这里的所有变量都在__private中).

我只能想象,由于某种原因,当支架关闭时,GPU正在将变量"value1"推送到较慢的内存中.这可能是一个解释吗?我能做什么?

提前致谢!

更新:这将运行在一秒钟也:(但无论是行取消注释,它会恢复到极端缓慢).这不会对循环进行任何其他更改,并且value1仍然在与之前相同的位置声明.

for (int ii=0; ii<someNumber;ii++)
{
    for (int jj=0; ii<someNumber2;jj++)
    {
//        value1 = value2 + value3;
//        value1 …
Run Code Online (Sandbox Code Playgroud)

performance opencl

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

mpi4py Reduce() 中可能的缓冲区大小限制

设置

我正在使用 mpi4py 以元素方式减少跨多个进程的 numpy 数组。这个想法是将 numpy 数组按元素求和,这样如果我有两个进程,并且每个进程都有数组:

Rank 0: [1, 1, 1]
Rank 1: [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

减少后我应该有

[3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

这种情况下,使用如此短的数组,效果很好。

问题

但是,在我的实际用例中,这些数组很长(array_length在我下面的示例代码中)。如果我发送长度小于或等于 505 个元素的 numpy 数组,我没有问题,但在此之上,我得到以下输出:

[83621b291fb8:01112] Read -1, expected 4048, errno = 1
Run Code Online (Sandbox Code Playgroud)

我一直无法找到任何记录在案的原因。然而,有趣的是,506*8 = 4048,这 - 假设有一些头数据 - 让我怀疑我在 mpi4py 或 MPI 本身的某处达到了 4kb 缓冲区限制。

一种可能的解决方法

我设法通过分解 numpy 数组来解决这个问题,我想按元素减少到大小为 200 的块(只是小于 505 的任意数字),并在每个块上调用 Reduce(),然后在主进程。然而,这有点慢。

我的问题:

  1. 有谁知道这是否确实是由于 mpi4py/MPI 中的 4kb 缓冲区限制(或​​类似)?

  2. 有没有比将数组切片并像我目前所做的那样多次调用 Reduce() 更好的解决方案,因为这似乎运行起来有点慢。


一些例子

下面是说明

  1. 问题,以及
  2. 一种可能的解决方案,基于将数组切成较短的部分并进行大量 MPI Reduce() 调用,而不仅仅是一个(由use_slices布尔值控制)

使用 …

python mpi openmpi docker mpi4py

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

标签 统计

docker ×1

mpi ×1

mpi4py ×1

opencl ×1

openmpi ×1

performance ×1

python ×1