我正在MPI中运行Fortran代码。我需要在一个特定的过程中设置一个环境变量。有没有办法做到这一点?从Fortran代码调用“系统”似乎没有效果。我通过“aprun”运行代码。为特定的MPI进程设置环境变量
回答
启动器解决方案
您应该在启动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);
}
在启动器解决方案中,是否有方法来指定获取环境变量的进程?谢谢! –
我期望这些进程按照它们启动的顺序进行编号,除非您启用排序重新排序。 – Jeff
我尝试了Cray系统上的启动器解决方案,似乎第二个二进制文件无法识别env变量。 ALPS提供了一个不明的“aprun:无效选项 - 'e''”错误。 –
- 1. pytest - 设置具有环境特定值的环境变量
- 2. Terraform环境特定变量
- 3. 如何设置GlassFish中的环境变量为特定应用程序(或域)
- 4. 设置环境变量
- 5. 设置Maven环境变量
- 6. 设置环境变量
- 7. 设置环境变量
- 8. Elasticsearch设置环境变量
- 9. C#设置环境变量
- 10. htaccess设置环境变量
- 11. 设置apache环境变量
- 12. DrJava设置环境变量
- 13. 如何为python设置环境变量
- 14. 为Eclipse设置环境变量?
- 15. 如何为Jython设置环境变量?
- 16. 将环境变量设置为Cookie(apache)
- 17. Ubuntu为Django设置环境变量
- 18. 读取c中子进程设置的环境变量#
- 19. 烧瓶/ gunicorn:从环境变量设置环境变量
- 20. 为VC命令行环境永久设置环境变量
- 21. 在Linux上从Java进程中设置Shell环境变量
- 22. Emacs特定于shell的环境变量
- 23. 设置startDetached()的环境变量QProcess
- 24. 设置新的导轨环境变量
- 25. 的Makefile:设置环境变量
- 26. 设置maven所需的环境变量?
- 27. 设置启动Octave的环境变量
- 28. Node.js未设置的环境变量
- 29. 意外的环境变量未设置
- 30. 一个子进程能够通过环境变量设置回父进程
在mpirun或运行过程中? –
@Vladimir F只要它“坚持”我会满意任何一种方式。我想我希望从mpirun(实际上是aprun)那样做,因为这似乎更确定地给我我想要的东西。 –
您可以使用相同的二进制但不同的opts进行类似MPMD的启动。如果需要,您的Cray超级计算中心可以为您提供帮助。 – Jeff