如果我使用num_threads(..)并且如果我尝试使用omp_set_num_threads(..),则下面的代码显示了sementation fault,会弹出以下错误:
“ libgomp:线程创建失败:资源暂时不可用”
在num_threads的情况下也会出现错误(考虑到最外面的并行区域被删除)。
系统规格:
总结一下: 我想要嵌套并行性,以便外部循环有五个并行运行的线程,然后每个线程创建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无关,而是与嵌套并行性有关。 所以任何建议都会有所帮助。