为特定MPI进程设置环境变量

bob*_*nto 3 fortran environment-variables mpi

我在MPI中运行Fortran代码.我需要在一个特定的进程中设置一个环境变量.有没有办法做到这一点?从Fortran代码调用"system"似乎没有效果.我通过"aprun"运行代码.

Jef*_*eff 6

启动器解决方案

您应该在MPMD启动时执行此操作.它适用于mpirunaprun.

下面是一个示例,其中OMP_NUM_THREADS一个进程的环境变量设置不同于其他进程.

aprun -n 1  -e OMP_NUM_THREADS=1  ./mpi-openmp-app.x input_file.in :
      -n 99 -e OMP_NUM_THREADS=10 ./mpi-openmp-app.x input_file.in
Run Code Online (Sandbox Code Playgroud)

这是异质的等价物

aprun -n 100 -e OMP_NUM_THREADS=10 ./mpi-openmp-app.x input_file.in
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅aprun手册页(或man aprun从命令行).

请注意,Cray正在将许多站点从ALPS(即aprun)切换到SLURM(srun),但我确信SLURM支持相同的功能.

MPI mpirunmpiexec支持类似的功能.MPI标准未指定语法,因此您需要阅读MPI实现的文档以了解具体信息.

源代码解决方案

假设在初始化MPI之后解析了环境变量setenv,如果启动程序解决方案不起作用,则可以执行以下操作.

int requested=MPI_THREAD_FUNNELED, provided;
MPI_Init_thread(&argc,&argv,requested,&provided);

int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
if (rank==0) {
  int overwrite = 1;
  int rc = setenv("OMP_NUM_THREADS","1",overwrite);
}
Run Code Online (Sandbox Code Playgroud)