我正在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. 爲特定進程的特定運行設置環境變量
- 2. 如何爲cmd進程設置環境變量? - 不是系統環境變量
- 3. 如何設置GAE環境特定的環境變量?
- 4. pytest - 設置具有環境特定值的環境變量
- 5. 如何從子進程設置父進程的環境變量?
- 6. 爲ExecWait子進程設置環境變量
- 7. NodeJS爲exec設置的環境變量
- 8. Terraform環境特定變量
- 9. 如何設置GlassFish中的環境變量爲特定應用程序(或域)
- 10. 設置CTest(cmake)環境變量配置特定
- 11. 設置環境變量
- 12. 設置Maven環境變量
- 13. 設置Java環境變量?
- 14. 設置apache環境變量
- 15. 設置環境變量
- 16. DrJava設置環境變量
- 17. C設置環境變量
- 18. 設置環境變量
- 19. C#設置環境變量
- 20. 設置環境變量(kubernetes)
- 21. 設置環境變量Windows
- 22. htaccess設置環境變量
- 23. Elasticsearch設置環境變量
- 24. 設置環境變量Linux
- 25. 設置環境變量編程
- 26. 將環境變量設置爲Cookie(apache)
- 27. 如何爲Jython設置環境變量?
- 28. Ubuntu爲Django設置環境變量
- 29. TMUX爲會話設置環境變量
- 30. 如何爲python設置環境變量
在mpirun或運行過程中? –
@Vladimir F只要它「堅持」我會滿意任何一種方式。我想我希望從mpirun(實際上是aprun)那樣做,因爲這似乎更確定地給我我想要的東西。 –
您可以使用相同的二進制但不同的opts進行類似MPMD的啓動。如果需要,您的Cray超級計算中心可以爲您提供幫助。 – Jeff