Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 在Julia中输入函数的宏_Parallel Processing_Macros_Julia - Fatal编程技术网

Parallel processing 在Julia中输入函数的宏

Parallel processing 在Julia中输入函数的宏,parallel-processing,macros,julia,Parallel Processing,Macros,Julia,我正在用Julia编写一个宏,它可以在多个处理器之间拆分某个函数。我有以下资料: macro parallel_calc(N::Int,proc::Int=4) n=round(Int,N/proc); proc_sum = @parallel (+) for i=1:proc f(n) end return proc_sum / proc end 问题是我想写宏以便 @parallel_calc f(n) 然后

我正在用Julia编写一个宏,它可以在多个处理器之间拆分某个函数。我有以下资料:

 macro parallel_calc(N::Int,proc::Int=4)

      n=round(Int,N/proc);

      proc_sum = @parallel (+) for i=1:proc

          f(n)

     end

    return proc_sum / proc

 end 
问题是我想写宏以便

@parallel_calc f(n)
然后它将能够自动在我的处理器之间分割作业。Julia中有没有办法编写一个以函数作为输入的宏?我试着在网上查找,但没有找到任何有帮助的。我也试过使用

@everywhere f(n)

在添加我的处理器后,但它的运行速度明显慢于上面定义的宏。我需要定义一个新的宏,在我的不同处理器之间平均(或几乎平均)分配计算负载。

宏只将表达式作为输入,并且应该只生成表达式。宏生成的表达式是实际计算的代码,就像最初编写的代码一样。似乎您可以使用函数
f
作为参数来完成您试图编写的内容,例如:

function parallel_calc(f::Function, N::Int, proc::Int=4)
    n = round(Int, N/proc)
    proc_sum = @parallel (+) for i = 1:proc
        f(n)
    end
    return proc_sum/proc
end
这就是你写的,但是作为一个普通函数,它的第一个参数是
f
。你可以这样称呼它:

parallel_calc(100) do n
    # do something with `n`
end