Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
在实验室服务器上(共28个CPU)同时在五个终端下运行五个算例,每个算例都是2核并行,其计算的过程是一样的,只是其中的某一个参数稍微有改动,对整个物理过程没有质的影响。结果发现计算效率大大下降,计算速度大约为单个算例单独运行速度的1/5-1/3。从log文件来看,计算过程没有问题,就是每步用的时间变多了。有没有人遇到和我相同的情况?有好的解决办法没?
@史浩 核能同时计算,读写不能同时进行,得排队互相切换。何况还是文本文件。改成二进制的应该会快一些。一起读写,互相切任务也够耗时的。就像复制东西;一次选中所有文件复制,比每个文件都执行复制粘贴同时复制,要快得多。
这种读写占比比较高的操作,适合写个脚本自动顺序运行。
确实会有这种情况出现,我也遇到过,适合写个脚本自动顺序运行应该是解决方式。
@史浩 你用的是什么mpi?mpirun的参数是怎么给的?
@bestucan @东岳 多谢两位。其实我的结果文件写的频率不高,每10000步才写一次,更多的是写log文件。目前程序每秒能算10个时间步,每个时间步大约要写20行的log文件,每秒大约就要写200行的文本文件。 但是今天试了一下串行,发现串行就没有问题,看来不是写log文件的问题。可能是并行的其他问题
尽量不要这样做吧,这样做很慢的,一个一个来就好了。每个算例都用多个核并行,那是让计算机去判断某个时间点核A该做什么,核B该做什么,核C该做什么,这不靠谱。它是绝对不会自己从一开始就定好了,比如任务1就让核A和B去算,任务2就让核C和D去算,除非你设置了。我倒是挺好奇有没有人知道怎么设置让电脑这样做,就是按照我的要求,任务1用AB算,任务2用CD算,总感觉应该有方法的吧?
@cccrrryyy 如果是openmpi,试试--bind-to-core
@wwzhao 刚刚看到,我用脚本运行的,脚本命令是
runParallel $(application)
换成代码,应该是
mpirun -np 2 <applicationName> -parallel
@cccrrryyy 我觉得可能是你说的这种情况。因为项目比较偏工程应用,需要讨论不同工艺参数对结果的影响,有的时候一个一个算太慢,起算这样效率高一些。另外,我也很想知道如何指定并行的cpu,如果有知情人路过请留言,在此谢过
@史浩 可以试试mpirun的--bind-to-core参数
@wwzhao 还有这种操作,学习了学习了,这几天试试!
@wwzhao 请问怎么用-bind-to-core来分配并行计算核心?我运行了下面的命令
mpirun -np 4 xxxFoam -parallel --bind-to-core
系统提示错误
invalid option: --bind-to-core
这么命令该怎么用?
@史浩 mpirun --version 查看版本,openmpi 1.4 以上才支持这个参数,参考 https://www.open-mpi.org/faq/?category=tuning#using-paffinity-v1.4
@wwzhao OpenFOAM里面自带的是1.10.4版本,可以在help中有这个选项,我就试了一下。电脑有52个节点,我想挂满,所以想捯饬一下,让并行的时候不要重复分配计算核心
@史浩 把 --bind-to-core 放到 -np 前面:
mpirun --bind-to-core -np 4 xxxFoam -parallel
@wwzhao 可以了,流弊~(说脏话会不会被禁言?害怕~~~)还有一个问题,我怎么通过查看计算的时候占用了哪些核心?
@史浩 在终端里输入top,然后按 1 就可以查看 CPU 核心使用情况。
@wwzhao 用了一下这个命令,但是每个算例并没有重新分布在不同的计算核心上,而是集中在了4个计算核心上,然后计算效率非常的低。好像不是这个命令
@史浩 你的机器是不是只有4个core。。。
@wwzhao 不是,有52个
@史浩 @wwzhao @cccrrryyy 问个小问题,我的笔记本8 cores,跑并行计算的话,是不是用够8个了就不能再用了,比如只能跑4个算例每个用2个core?但是不指定并行计算的话,是不是跑的算例就能超过8个, 只不过速度会慢。谢谢!