1

私はマクスウェルの方程式を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);

    }

}

コンパイラは、デフォルトでXcode4.2に付属しているllvm-gccです。

助けてください。

4

3 に答える 3

1

Lionでコンパイラの問題が発生した可能性があります。このリンクを参照してください:

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

そのページのリンクからLion用にプリコンパイルされたgcc4.7をダウンロードできますが、これは問題なく機能しているようです。

于 2012-03-09T00:45:07.810 に答える
0

デバッグとすべての警告、つまり-g -Wallフラグを使用してプログラムをコンパイルしようとしましたか?

次に、デバッガー(つまり、gdb)を使用してデバッグできます。

core(5)ダンプを有効にすることができます( setrlimit(2)またはそれを呼び出すulimitシェルビルトインRLIMIT_COREを使用して適切に設定することにより)。coreファイルを作成したら、事後分析gdbに使用できます。また、ダンプを強制するgcore(1)もありcoreます。

于 2011-11-11T13:52:00.887 に答える
0

プログラムがクラッシュする最も可能性の高い理由は、if句の他の関数がそれらに対して行うことによって、FEMSecondMeshElement2D * secondMeshElement、currentSecondMeshIndex、またはnextFirstMeshIndexにアクセスするときのメモリの破損です。

事前に、変数へのアクセスを注意深くチェックし、それらをスレッドプライベート/共有として宣言することをお勧めします。例えば

FEMSecondMeshElement2D *secondMeshElement = NULL;

#pragma omp parallel for private(secondMeshElement)
...
于 2011-11-11T15:13:36.307 に答える