parallel-processing - 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 有什么方法可以编写一个以函数作为输入的宏吗?我尝试在网上查找,但没有找到任何有用的信息。我也尝试过使用

@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

关于parallel-processing - Julia 中以函数作为输入的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44186155/

相关文章:

cuda - 高性能计算术语 : What's a GF/s?

c - 数组的POD结构

Xcode - 为条件编译定义预处理器宏

function - 如何使用 CMake 检查 accept4

julia - 一种类似数组或向量的类型,其值存储在 Julia 中的磁盘上

bash - 如何使用 screen session 参数并行运行 GNU?

sql-server - UNION SELECT、并行化和 IDENTITY

c - 运行一次调节的宏

regex - Julia - 使用正则表达式从字符串中提取数字

julia - 是否有将 REPL 内容打印到 Julia 语言文件的功能?