小编ste*_*onB的帖子

Julia 多线程:如何控制变量的局部范围

我对 Julia 相当陌生,我正在尝试使用 Julia 的多线程功能。

下面是我为探索 Julia 能力而制作的一个玩具示例。这是我正在尝试做的事情的一个非常简化的版本。我需要并行化循环。在这个循环中,我正在执行一些需要缓冲区数组的计算(在下面的示例中,缓冲区当然是不必要的)。此外,缓冲区不能在线程之间共享,因为这会导致竞争条件。

我正在使用宏 @threads 来并行化我的循环。问题是我找不到一种方法来定义不同线程应如何与 buf 数组交互:

  • 有没有办法定义数组是否应该共享或者每个线程都有其如何复制。例如,它在 OpenMP 中使用私有或共享变量声明系统的工作方式?
  • 在循环中初始化数组不是一个选项,因为它将在每个步骤中创建重新分配内存,而不是为每个线程一次。
  • 是否有更适合此类应用程序的不同 Julia 库?
function calcparallel(buf::AbstractArray,result::AbstractArray)

   @threads for i=1:length(result) 
        buf[1] = float(i)         
        buf[2] = 1.0/float(i) 
        buf[3] = sqrt(i)

        result[i] = buf[1] * buf[3] + buf[2]

    end
    return result 
end

n = 1000
nn = 10
buf2 = zeros(Float64,nn)
result2  = zeros(Float64,n)


@time calcparallel(buf2,result2)
Run Code Online (Sandbox Code Playgroud)

multithreading julia

2
推荐指数
1
解决办法
508
查看次数

标签 统计

julia ×1

multithreading ×1