嵌套 for 循环的 openmp 出错
Error with openmp for Nested for-loop
我在面向对象的cpp代码中使用了特征库。我定义了一个主要对象 2DGF,并且在它的某些方法中,我使用了 openmp。现在我想在另一种方法中使用 openmp,如下所示:
#pragma omp parallel num_threads(NON)
#pragma omp for
for(unsigned int iE=0;iE<NE;iE++){
for(unsigned int iK=0;iK<NK;iK++){
for(unsigned int ii=0; ii<NL ;ii++){
for(unsigned int jj=0; jj<NL ;jj++){
if(abs(CoorX[ii]-CoorX[jj])<DiogLim){
G.insert(iE*NL+ii,iK*NL+jj)=0;
GR.insert(iE*NL+ii,iK*NL+jj)=0;
S.insert(iE*NL+ii,iK*NL+jj)=0;
SR.insert(iE*NL+ii,iK*NL+jj)=0;
}
}
}
}
}
其中 G、GR、S 和 SR 是稀疏矩阵。不使用 openmp,它可以毫无问题地工作。但是当我使用 openmp 时,我收到以下错误:
2DGF : malloc.c:2372: sysmalloc: 断言 '(old_top == (((mbinptr) (((char *) &((av)->bins[(1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) ||((unsigned long) (old_size)>= (unsigned long)(((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) &&((unsigned long) old_end & pagemask) == 0)' 失败。
已中止(核心已转储)
有人可以帮助我修复它吗?
我对Eigen了解不多。但我在他们的文档中读了一些关于SparseMatrix的方法insert(),它说它对其他插入reserving room
。您是否为所有插件预留了足够的空间?
如果不是,则可能是以下代码中存在的相同错误。
#include <iostream>
#include <vector>
#include <omp.h>
int main()
{
std::vector< int > vInts;
#pragma omp parallel for
for (int i = 0; i < 1000; i++) {
vInts.push_back( i );
}
return 0;
}
这也可能以分段错误告终。原因是向量被重新定位到不同的区域 int 内存。可以通过为矢量保留足够的内存来避免这种情况。在这种情况下vInts.reserve(1000)
.
SparseMatrix也提供了一种保留方法。试试这个,至少要排除它作为一个可能的错误。
编辑:这是带有 for 循环的代码,并在最里面的循环中分配了一个简单的赋值。该程序使用g++ -fopenmp -Wall -Werror main.cpp
编译,没有错误或警告。程序正常执行,输出为 i=99。
#include <iostream>
#include <omp.h>
#include <vector>
#define NON 3
int main()
{
int i = 0;
unsigned int NE = 100;
unsigned int NK = 100;
unsigned int NL = 100;
#pragma omp parallel num_threads(NON)
#pragma omp for
for(unsigned int iE=0;iE<NE;iE++){
for(unsigned int iK=0;iK<NK;iK++){
for(unsigned int ii=0; ii<NL ;ii++){
for(unsigned int jj=0; jj<NL ;jj++){
i = jj;
}
}
}
}
return 0;
}
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- OpenMP阵列性能较差
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- C++ 使用 OpenMP 时,如果 for 循环在 if else 语句中出错
- 当我在 C++ 中使用 OpenMp 的折叠时出错
- 从 OpenMP 循环内部访问和编辑 Qmap 时出错
- 在从动态库加载的函数中使用OpenMP时出错
- 启用 openmp 时出错 - "ld: library not found for -lgomp" 和 Clang 错误
- 嵌套 for 循环的 openmp 出错