我编写了一个C ++程序,该程序不使用多线程,但使用-O2
,-O3
或-Ofast标志进行编译以优化速度。
该程序名为mir.out
,并从bash脚本my_script
运行。运行时间由:
time bash my_script
输出
real 18m26.001s
user 56m4.507s
sys 91m14.536s
由此我得出结论,多个内核并行运行(我有8个内核),因为用户和系统时间比实时大得多。这是对的吗?
使用htop我测试了这个并找到以下
表示程序使用所有核心。程序完成后
仅显示核心的少量使用。
我没有使用STL中可以并行化的任何函数(参见Parallelization in STL),也没有找到隐藏在-O2,-O3或-Ofast中的任何标志,这会自动化并行化(参见compiler flgas for optimization })。
所以我的问题是,为什么我的程序使用多个核心?
编辑:感谢评论,我找到了答案:
我使用armadillo库进行线性代数。我认为它需要OpenMPI用于多线程,但是一些研究表明,使用BLAS和LAPACK已经可以实现。
答案 0 :(得分:0)
感谢您对我的程序多核使用的可能原因的评论。我发现以下是原因:
我在我的程序中使用了Armadillo(c ++的线性代数库),它在不使用MPI的情况下并行化了一些函数,但是使用了LAPACK和BLAS(如this question中所述)。