我写的是一个平行组调用一组外部代码的OpenMDAO问题。 其中一个外部码是一个基于的PETSc-FORTRAN FEM代码。 我意识到这是潜在的问题,因为OpenMDAO也利用PETSc的。 目前,我正在使用Python的子进程调用组件的外部代码。
如果我运行在串行(即python2.7 omdao_problem.py)我OpenMDAO问题,一切,包括外部代码,工作得很好。 当我尝试但是并行运行它,(即的mpirun -np 4 python2.7 omdao_problem.py),那么它的工作原理,直到子进程调用,在这一点上,我得到的错误:
*** Process received signal ***
Signal: Segmentation fault: 11 (11)
Signal code: Address not mapped (1)
Failing at address: 0xe3c00
[ 0] 0 libsystem_platform.dylib 0x00007fff94cb652a _sigtramp + 26
[ 1] 0 libopen-pal.20.dylib 0x00000001031360c5 opal_timer_darwin_bias + 15469
*** End of error message ***
我不能让太多的这一点,但它似乎是合理的,我认为这个问题将来自使用基于MPI的Python代码来调用另一个启用MPI代码。 我已经使用非MPI尝试的“Hello World”可执行的外部代码的地方,可以通过并行OpenMDAO代码没有错误调用。 我不需要外部代码实际并行运行,但我确实需要使用PETSc的求解器和这样的,因此内在依赖MPI。 (我想我可以考虑同时具有使MPI和非MPI启用构建的PETSc的周围铺设?宁愿不这样做,如果尽可能我可以看到,成为匆匆一团糟。)
我发现这个讨论这似乎也有类似的问题(并进一步指出,使用的MPI代码子,因为我做的,是一个禁忌)。 在这种情况下,它看起来像使用MPI_Comm_spawn可能是一种选择,即使它不适合使用。 任何想法,如果这会在OpenMDAO的环境中工作? 其他途径来追求得到这个工作? 任何想法或建议,不胜感激。