Multithreading 在julia中,是否有一个宏在每个线程中运行任务?

Multithreading 在julia中,是否有一个宏在每个线程中运行任务?,multithreading,julia,Multithreading,Julia,我有一个循环,我想运行多线程。它取决于预先分配的变量(数组),并且必须是每个线程的私有变量。如何在每个线程中进行此预分配?或者,是否有宏在每个线程中运行任务 我能想到的唯一解决方案依赖于元编程,因此转换代码的开销更大(我有许多要预分配的数组)。以下是我得到的有用信息: Threads.@threads for t = 1:Threads.nthreads() # pre-alloc arrays for each thread eval(Meta.parse("zl$(

我有一个循环,我想运行多线程。它取决于预先分配的变量(数组),并且必须是每个线程的私有变量。如何在每个线程中进行此预分配?或者,是否有宏在每个线程中运行任务

我能想到的唯一解决方案依赖于元编程,因此转换代码的开销更大(我有许多要预分配的数组)。以下是我得到的有用信息:

Threads.@threads for t = 1:Threads.nthreads()
    # pre-alloc arrays for each thread
    eval(Meta.parse("zl$(t) = Array{Float64}(undef, ($(ns),$(ns)))"))
end
Threads.@threads for i = 1:N
    t = Threads.threadid()
    zl = eval(Meta.parse("zl$(t)"))
    # do things...
end
我希望有一个类似于在C代码中使用OpenMP的解决方案

#pragma omp parallel
{
    double* zl = malloc(ns * ns * sizeof(double));
    #pragma omp for
    for (size_t i = 0; i < N; i++) {
        // do things...
    }
}
#pragma omp并行
{
double*zl=malloc(ns*ns*sizeof(double));
#pragma omp for
对于(大小i=0;i
Julia中的规则很简单-如果你不知道如何做某事,元编程永远不是一个好方法:-)

您需要的模式是创建矩阵向量,并将每个矩阵提供给每个线程

ns = 3
zls = [Matrix{Float64}(undef,ns,ns) for t in 1:Threads.nthreads()]

Threads.@threads for i = 1:N
    zl = zls[Threads.threadid()]
    # do things with zl....
end
如果您想并行地预先分配
zls
的内存,请尝试(尽管对于我能想到的所有场景,我怀疑这样做是否值得):

zls = Vector{Matrix{Float64}}(undef, Threads.nthreads())
Threads.@threads for i = 1:Threads.nthreads()
    zls[i] = Matrix{Float64}(undef,ns,ns)
end