OpenMP:三个for循环内嵌套并行

时间:2017-02-02 18:13:00

标签: multithreading parallel-processing nested openmp nested-loops

如果我使用num_threads(..)并且如果我尝试使用omp_set_num_threads(..),则下面的代码显示了sementation fault,会弹出以下错误:
libgomp:线程创建失败:资源暂时不可用” 在num_threads的情况下也会出现错误(考虑到最外面的并行区域被删除)。

系统规格:

  • XEON处理器,带2个插槽,4个核心/插槽和16个线程/核心

总结一下: 我想要嵌套并行性,以便外部循环有五个并行运行的线程,然后每个线程创建20个线程(因此总数仍然少于我的系统提供的)。

void assembly(){ 
    omp_set_nested(1);
    #pragma omp parallel num_threads(5)
    {    //omp_set_num_threads(5);

         for (int j=0; j<5; ++j) {
             int itr = nodesInLevel[j];

             #pragma omp parallel num_threads(20)
             {// omp_set_num_threads(20);

                 #pragma omp for schedule(dynamic) nowait
                 for (int i=0; i<itr; ++i) {
                    int start =tree[j][i]->cStart[0];
                    int end  = tree[j][i]->cStart[1];
                    int size0   =tree[j][i]->cSize[0];
                    int size1   =tree[j][i]->cSize[1];
                    A->rook_Piv(start,end,size0,size1,tree[j][i]->rank[0]);
                 } 

                #pragma omp for //schedule(dynamic) 
                for (int i=0; i<itr; ++i) {
                   int start =tree[j][i]->cStart[0];
                   int end  = tree[j][i]->cStart[1];
                   int size0   =tree[j][i]->cSize[0];
                   int size1    =tree[j][i]->cSize[1];
                   A->rook_Piv(end,start,size1,size0,tree[j][i]->rank[1]);
               }
        }
    }
}

请注意:

我知道下面的代码没有正确描述,但是代码非常大,因此我无法完全提及它。问题与代码descriton无关,而是与嵌套并行性有关。 所以任何建议都会有所帮助。

0 个答案:

没有答案