关于c ++:使用OpenMP和Eigen会导致无限循环/死锁 | 您所在的位置:网站首页 › 并行死锁 › 关于c ++:使用OpenMP和Eigen会导致无限循环/死锁 |
我正在解决一个更大的问题,并且在尝试使用OpenMP并行化某些循环时遇到了一个错误。 我在下面用一些更简单的代码模拟了我自己的代码,从而再现了该问题。 问题是,当我运行该程序时,它将随机进入某种无限循环/死锁状态(CPU为100%,但不执行任何操作)。 从测试中可以看出,其中一个线程尝试计算矩阵矩阵乘积,但由于某种原因从未完成。 我知道,如果启用OpenMP,Eigen将使用OpenMP并行处理矩阵矩阵产品。 我还在此之外添加了另一个并行循环。 但是,如果我通过定义EIGEN_DONT_PARALLELIZE来禁用Eigen的并行化,仍然会发生此错误。 我在Maci 10.6.8和Eigen 3.0.4上使用gcc版本4.6.0 20101127。 我不知道可能出什么问题了... 12345678910111213141516171819202122232425#include #include using namespace std; using namespace Eigen; MatrixXd Test(MatrixXd const& F, MatrixXd const& G) { MatrixXd H(F.rows(), G.cols()); H.noalias() = F*G; return H; } int main() { MatrixXd F = MatrixXd::Random(2,2); MatrixXd G = MatrixXd::Random(2,2); #pragma omp parallel for for (unsigned int i = 0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |