我正在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