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

时间:2016-01-22 15:56:51

标签: fortran environment-variables mpi

我在MPI中运行Fortran代码。我需要在一个特定的进程中设置一个环境变量。有没有办法做到这一点?呼叫"系统"从Fortran代码似乎没有影响。我通过" aprun"。

运行代码

1 个答案:

答案 0 :(得分: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

这是

的异构等价物
aprun -n 100 -e OMP_NUM_THREADS=10 ./mpi-openmp-app.x input_file.in

有关详细信息,请参阅aprun man page(或命令行中的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);
}