我对本征并行化有一些疑问。
根据我的理解,Eigen处理其内部并行化但我想激活多线程。我刚开始用G ++编译,使用标志“-fopenmp”并使用OMP_NUM_THREADS = 4 ./exec运行我的可执行文件。
仅使用我使用的C ++代码运行的代码的某些部分:
#pragma omp parallel
{
}
查看我的系统监视器,我可以看到有时候我使用了多个线程,但大部分时间都没有。我不知道是否必须使用额外的OpenMp代码。
在以下链接中:
https://eigen.tuxfamily.org/dox/TopicMultiThreading.html
他们提到“如果您的应用程序与OpenMP并行化,您可能希望禁用Eigen自己的并行化,如上一节所述”,但我不知道我是否必须或如何执行此操作。
我希望我不会在这里混合概念。
我提前感谢。
答案 0 :(得分:1)
从您发布的链接引用:
目前,以下算法可以使用多线程:通用矩阵 - 矩阵产品PartialPivLU
因此,如果不确切知道你的程序在做什么,我就会猜测它不是大型矩阵 - 矩阵乘法和/或PartialPivLU。这只涉及Eigen的内部并行化。您在omp并行块中执行的操作可能会按预期运行(多个线程)。