【发布时间】:2016-02-29 19:12:21
【问题描述】:
我正在尝试使用并行化使 Julia 中的代码更快。我的代码嵌套了串行 for 循环并执行值函数迭代。 (如http://www.parallelecon.com/vfi/中所述)
以下链接显示了我编写的代码的串行和并行版本: https://github.com/minsuc/MyProject/blob/master/VFI_parallel.ipynb(也可以在github页面找到DefinitionPara.jl中定义的函数。)串行代码定义为main(),并行代码定义为main_paral()。
main() 中的第三个 for 循环是我找到给定的最大化器的步骤(nCapital,nProductivity)。正如官方并行文档中所建议的那样,我将工作分布在 nCapital 网格上,该网格由许多点组成。
当我为串行和并行代码执行@time 时,我得到了
序列:0.001041 秒
并行:0.004515 秒
我的问题如下:
1) 我添加了两个工人,每个工人的工作时间分别为 0.000714 秒和 0.000640 秒,正如您在 ipython 笔记本中看到的那样。并行代码较慢的原因是开销成本?
2)我通过改变增加了网格点的数量
vGridCapital = collect(0.5*capitalSteadyState:0.000001:1.5*capitalSteadyState)
即使每个工作人员完成大量工作,串行代码也比并行代码快得多。当我添加更多工人时,串行代码仍然更快。我认为有问题,但我一直无法弄清楚......这是否与我在并行化函数中传递太多参数的事实有关
final_shared(mValueFunctionNew, mPolicyFunction, pparams, vGridCapital, mOutput, expectedValueFunction)?
非常感谢您的 cmets 和建议!
【问题讨论】:
-
也可能存在硬件限制,如果您只有一个处理器,您的并行代码实际上仍在以额外开销串行运行。
-
我有四个核心(8 个逻辑工作者)。我怀疑使用 SharedArray 会使代码比串行代码慢。会不会是这样?
标签: performance parallel-processing julia