我正在编写一个科学程序,用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);

    }

}

编译器是llvm-gcc,默认情况下Xcode 4.2附带。

请帮忙。

最佳答案

您可能在Lion上遇到了编译器问题。看到这个链接:

https://plus.google.com/101546077160053841119/posts/9h35WKKqffL

您可以从该页面上的链接下载为Lion预编译的gcc 4.7,这似乎很好用。

09-16 10:11