我在MPI中运行Fortran代码。我需要在一个特定的进程中设置一个环境变量。有没有办法做到这一点?呼叫"系统"从Fortran代码似乎没有影响。我通过" aprun"。
运行代码答案 0 :(得分:6)
您应该在启动MPMD时执行此操作。它适用于mpirun
或aprun
。
以下是一个示例,其中一个进程设置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 mpirun
或mpiexec
支持类似功能。 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);
}