2016-06-28 32 views
4

我正在运行一个在Julia中进行数字ODE集成的程序。我运行Windows 10(64位),采用英特尔酷睿i7-4710MQ @ 2.50Ghz(8个逻辑处理器)。Julia只使用我CPU的20-30%。我该怎么办?

我注意到,当我的代码在julia上运行时,只有最多30%的CPU在使用中。进入并行化文档,我开始使用Julia: C:\Users\*****\AppData\Local\Julia-0.4.5\bin\julia.exe -p 8,并期望看到改进。但是我没有看到他们。

因此,我的问题如下: 是否有一种特殊的方式,我必须写我的代码才能更高效地使用CPU?这可能是我的操作系统(Windows 10)带来的限制吗?

我使用以下命令在茱莉亚控制台提交我的代码: include("C:\\Users\\****\\AppData\\Local\\Julia-0.4.5\\13. Fast Filesaving Format.jl")

在此代码中,我使用一些附加软件包: using ODE; using PyPlot; using JLD

我用Windows的“任务管理器”测量CPU使用率。

+3

您需要手动调整您的代码以进行并行计算。这里是并行计算的参考http://docs.julialang.org/en/release-0.4/manual/parallel-computing/。我不是专家,但你通常可以使计算负载循环与'@ parallel'宏并行,并且在平行化中有用于平衡地图平衡的'pmap'。 –

+1

是的,我的例子只是徒劳地试图看看是否有提高CPU使用率的“捷径”。我将来不得不考虑将代码并行化。谢谢。 –

+1

你也可以查看这两个SO帖子[这里](http://stackoverflow.com/questions/37287020/how-and-when-to-use-async-and-sync-in-julia/372​​87021#37287021)和[这里](http://stackoverflow.com/questions/37846838/what-exactly-is-the-difference-between-parallel-and-pmap/37849587#37849587)的一些额外的指导,在朱莉娅的并行性 –

回答

12

-p 8选项julia开始8个工作进程,并禁用像BLAS和FFTW库多线程使工人不超额订购物理线程的系统上 - 因为这杀死良好平衡的分布式工作负载的性能。如果您想要从-p 8中获得更多的速度,那么您需要在这些工作人员之间分配工作,例如,通过让每个人进行独立计算,或通过SharedArrays进行计算协作。你不能只添加工人,不能改变程序。如果您正在使用BLAS(执行大量矩阵乘法)或FFTW(执行大量傅立叶变换),那么如果不是使用-p标志,则会自动从这些库中获取多线程。否则,Julia中没有(非实验性的)用户级线程。有实验性的线程支持,版本1.0将支持线程,但我不会推荐,除非你是专家。

+0

啊,再次感谢你的好回复。我确实使用了一些FFT,因此我不应该使用'-p'标志。但是,我的问题仍然存在:是否有可能“提高”CPU使用率?或者这和Julia没有什么关系,就像处理器的结构一样? p.s .:我当然不是一个专家,因此如果制作“更多使用CPU”的过程可能过于复杂,那么我会放弃它。再一次感谢你! –

+2

@George:这是一个很好的答案。如果我只是增加一个普遍性,因为我不知道朱莉娅,平行主义有两个不同的目的。一个是性能,如果你能弄清楚如何构建你的程序,那么它可以同时使用多个CPU。另一个与表演无关。如果你的程序必须处理来自多个不同流的独立I/O,它可以简化事件,为每个流分配一个单独的线程。无论是用多个CPU还是一个CPU来完成这一任务都完全没有意义。 –

+0

好的,很好。我认为你的回答非常令人满意:我必须学会如何构建一个程序,以便使用“并行计算”。我非常感谢你,我将从Julia网站的文档开始。 –