我正在编写一个用 C++ 求解麦克斯韦方程的科学程序。数据并行任务,我想使用 OpenMP 使程序并行。但是当我使用 OpenMP 在函数中并行化 for 循环时。当我运行我的代码时,程序会收到 SIGABRT。我找不到出错的地方。请帮忙。
for循环如下:
#pragma omp parallel for
for (int i = 0; i < totalNoOfElementsInSecondMesh; i++) {
FEMSecondMeshElement2D *secondMeshElement = (FEMSecondMeshElement2D *)mesh->secondMeshFEMElement(i);
if (secondMeshElement->elementType == FEMDelectricElement) {
if (solutionType == TE)
calculateEzFieldForDielectricElement(secondMeshElement, i, currentSecondMeshIndex, nextFirstMeshIndex);
else
calculateHzFieldForDielectricElement(secondMeshElement, i, currentSecondMeshIndex, nextFirstMeshIndex);
} else if (secondMeshElement->elementType == FEMXPMLDielectricElement) {
if (solutionType == TE)
calculateEzFieldForDielectricPMLElement((FEMPMLSecondMeshElement2D *)secondMeshElement, i, currentSecondMeshIndex, nextFirstMeshIndex);
else
calculateHzFieldForDielectricPMLElement((FEMPMLSecondMeshElement2D *)secondMeshElement, i, currentSecondMeshIndex, nextFirstMeshIndex);
}
}
编译器是 Xcode 4.2 默认自带的 llvm-gcc。
请帮忙。
最佳答案
您可能在 Lion 上遇到了编译器问题。请参阅此链接:
https://plus.google.com/101546077160053841119/posts/9h35WKKqffL
您可以从该页面上的链接下载为 Lion 预编译的 gcc 4.7,这似乎工作正常。
关于c++ - 当我使用 OpenMP 并行执行 for 循环时,为什么我的程序会收到 SIGABRT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8094858/