私はマクスウェルの方程式を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です。
助けてください。