关于c ++:使用OpenMP和Eigen会导致无限循环/死锁 您所在的位置:网站首页 并行死锁 关于c ++:使用OpenMP和Eigen会导致无限循环/死锁

关于c ++:使用OpenMP和Eigen会导致无限循环/死锁

2023-08-10 10:19| 来源: 网络整理| 查看: 265

我正在解决一个更大的问题,并且在尝试使用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 实验室设备网 版权所有