我正在运行一个在Julia中进行数字ODE集成的程序.我正在运行Windows 10(64位),英特尔酷睿i7-4710MQ @ 2.50Ghz(8个逻辑处理器).
我注意到当我的代码在julia上运行时,只有最多30%的CPU在使用中.进入parallelazation文档,我开始使用Julia:
C:\Users\*****\AppData\Local\Julia-0.4.5\bin\julia.exe -p 8并期望看到改进.然而,我没有看到它们.
因此,我的问题如下:我是否有一种特殊的方式来编写代码以便更有效地使用CPU?这可能是我的操作系统(Windows 10)造成的限制吗?
我用以下命令在julia控制台中提交我的代码:
include("C:\\Users\\****\\AppData\\Local\\Julia-0.4.5\\13. Fast Filesaving Format.jl").
在这段代码中,我使用了一些额外的包:
using ODE; using PyPlot; using JLD.
我使用Windows"任务管理器"测量CPU使用率.
在模拟分布式推理的并行应用程序中,我希望有一个"初始化步骤",其中所有"从属"从"主"接收一些初始信息然后开始他们的任务.
目前我有一个基于该sendTo函数的工作实现(这里的代码在堆栈溢出时被发现),但我不认为它保证了worker在收到初始对象之前不会启动它的任务.
这是一个粗糙的MWE
function sendTo(p::Int; args...)
for (nm, val) in args
@spawnat(p, eval(Main, Expr(:(=), nm, val)))
end
end
a = 5
addprocs(4)
[sendTo(worker,a=a+randn()) for worker in workers()]
@everywhere begin
println(a)
end
Run Code Online (Sandbox Code Playgroud)
上面的"工作",但我如何确定@everywhere在工作人员收到定义之前,块中的命令没有执行a?
Rmk:对于我正在使用的上下文,我想保留两个不同的块,一个用于传播数据,另一个用于处理数据.
其他rmk:道歉,如果这是微不足道的,我对处理并行性很新(对Julia也很新)