htop显示多个核心,用于一个进程而不使用多线程

时间:2018-02-14 13:57:51

标签: c++ multithreading compiler-optimization

我编写了一个C ++程序,该程序不使用多线程,但使用-O2-O3或-Ofast标志进行编译以优化速度。

该程序名为mir.out,并从bash脚本my_script运行。运行时间由:

决定
time bash my_script

输出

real    18m26.001s
user    56m4.507s
sys     91m14.536s

由此我得出结论,多个内核并行运行(我有8个内核),因为用户和系统时间比实时大得多。这是对的吗?

使用htop我测试了这个并找到以下

htop with filter output

表示程序使用所有核心。程序完成后

htop output

仅显示核心的少量使用。

我没有使用STL中可以并行化的任何函数(参见Parallelization in STL),也没有找到隐藏在-O2,-O3或-Ofast中的任何标志,这会自动化并行化(参见compiler flgas for optimization })。

所以我的问题是,为什么我的程序使用多个核心?

编辑:感谢评论,我找到了答案:

我使用armadillo库进行线性代数。我认为它需要OpenMPI用于多线程,但是一些研究表明,使用BLAS和LAPACK已经可以实现。

1 个答案:

答案 0 :(得分:0)

感谢您对我的程序多核使用的可能原因的评论。我发现以下是原因:

我在我的程序中使用了Armadillo(c ++的线性代数库),它在不使用MPI的情况下并行化了一些函数,但是使用了LAPACK和BLAS(如this question中所述)。