【问题标题】:Julia uses only 20-30% of my CPU. What should I do?Julia 只使用了我的 CPU 的 20-30%。我该怎么办?
【发布时间】:2016-06-28 11:37:11
【问题描述】:

我正在运行一个在 Julia 中进行数值 ODE 积分的程序。我正在运行 Windows 10(64 位),采用 Intel Core i7-4710MQ @ 2.50Ghz(8 个逻辑处理器)。

我注意到当我的代码在 julia 上运行时,最多只有 30% 的 CPU 正在使用中。进入并行化文档,我开始使用 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 使用率。

【问题讨论】:

  • 您需要手动调整代码以进行并行计算。这是并行计算的参考docs.julialang.org/en/release-0.4/manual/parallel-computing。我不是专家,但您通常可以使计算负载循环与@parallel 宏并行,并且有pmap 用于并行化地图的等效性。
  • 是的,我的示例只是徒劳地尝试查看是否存在提高 CPU 使用率的“捷径”。将来我将不得不考虑并行化我的代码。谢谢。
  • 您还可以查看这两个 SO 帖子 herehere,了解有关 Julia 并行性的更多指导
  • 哇,这些真的很有帮助!谢谢!

标签: optimization parallel-processing julia


【解决方案1】:

julia-p 8 选项启动 8 个工作进程,并禁用 BLAS 和 FFTW 等库中的多线程,这样工作人员就不会过度订阅系统上的物理线程 - 因为这个在平衡良好的分布式工作负载中降低性能。如果您想从-p 8 中获得更快的速度,那么您需要在这些工作人员之间分配工作,例如通过让他们每个人进行独立计算,或者通过SharedArrays 进行计算协作。你不能只增加工人而不改变程序。如果您使用 BLAS(进行大量矩阵乘法)或 FFTW(进行大量傅立叶变换),那么如果您使用 -p 标志,您将自动从这些图书馆。否则,Julia 中还没有(非实验性的)用户级线程。有实验性线程支持,1.0 版将支持线程,但我不建议您这样做,除非您是专家。

【讨论】:

  • 啊,再次感谢您的好评。我确实使用了一些 FFT,因此我不应该使用 -p 标志。但是,我的问题仍然存在:是否有可能“提高” CPU 使用率?或者这与 Julia bit 处理器的结构方式无关? p.s.:我当然不是专家,因此如果使“更多使用 CPU”成为可能的过程太复杂,那我就不用了。再次感谢您!
  • @George:这是一个很好的答案。如果我可以添加一个概括性,因为我不了解 Julia,并行性有两个不同的目的。一是性能,如果你能弄清楚如何构建你的程序以便它可以同时使用多个 CPU。另一个与性能无关。如果您的程序必须处理来自多个不同流的独立 I/O,它可以简化为每个流专用一个单独的线程的事情。无论是使用多个 CPU 还是一个 CPU 都完全无关紧要。
  • 好的,很好。我认为您的答案非常令人满意:我必须学习如何以某种方式构建程序,以便它使用“并行计算”。谢谢你们,我将从 Julia 网站上的文档开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 2021-10-01
  • 2011-06-28
  • 2011-12-08
  • 1970-01-01
  • 2021-10-15
相关资源
最近更新 更多