我想使用MPI並行化在我的代碼中多次調用的函數。我想知道的是,如果我在函數內部使用MPI_Init
,每次函數調用時它會產生進程還是隻產生一次?是否有一些已知的設計模式以系統的方式來做到這一點?使用MPI並行化函數
0
A
回答
2
MPI_Init()
調用只是初始化MPI環境,它本身並不進行任何並行化,並行性來自於你如何編寫程序。
一個並行的「Hello,World」,printf()
根據它所運行的級別(處理器)做了不同的事情。的進程數是由你如何執行程序確定
int main(int argc, char *argv[]) {
char name[BUFSIZ];
int length=BUFSIZ;
int rank;
int numprocesses;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocesses);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(name, &length);
printf("%s, Rank %d of %d: hello world\n", name, rank, numprocesses);
MPI_Finalize();
return 0;
}
2
這不是真正的MPI(或分佈式內存編程)的工作方式;你不能像OpenMP那樣用一種函數來並行化一個函數。在MPI中,進程不是在MPI_Init()
時產生的,而是在運行可執行文件時(例如,使用mpiexec;即使使用MPI_Comm_spawn()
也是如此)。部分原因是在分佈式內存計算中,啓動進程對潛在的大量無共享節點是非常昂貴的任務。
您可以湊齊一起的東西具有你調用是一個單獨的可執行文件的功能,但我不知道這就是你
相關問題
- 1. 通過MPI並行化遞歸函數?
- 2. 如何使用MPI並行化函數C++
- 3. 與MPI的數獨並行化
- 4. 使用mpi並行排序
- 5. 使用MPI函數運行Java代碼
- 6. 如何執行使用OpenMP/MPI的並行化Dijkstra算法
- 7. 在C中使用MPI進行代碼並行化
- 8. 使用MPI和Armadillo在C++中並行化
- 9. 如何初始化函數中的MPI?
- 10. 使用帶C MPI函數的boost序列化
- 11. MPI並行編程
- 12. MPI並行化有助於多次讀取大量數據
- 13. MPI +函數指針?
- 14. 用C並行化雙重總和與MPI
- 15. MPI並行時間消耗
- 16. 混合並行:MPI和TBB
- 17. R,dplyr和snow:如何並行化使用dplyr的函數
- 18. 使用openmp並行化sse intrinsics函數c
- 19. 使用MPI或以串行方式並行寫入文件?
- 20. 串行和並行(使用mpi)代碼的圖像直方圖
- 21. 使用Open MPI和OpenMP進行並行處理
- 22. MPI和DLL(SO)函數
- 23. 並行化直方圖函數
- 24. CUSP主機函數與openMP並行化
- 25. Rcpp並行化返回XPtr的函數?
- 26. 使用openmp並行函數調用
- 27. MPI調用內部函數和函數參數
- 28. 使用apply函數並選擇行
- 29. 使用python並行處理函數
- 30. 使用return()函數並沒有換行
與MPI重新標記(如進程數通過-n參數mpiexec的或設置的mpirun),因爲這實在是一個關於MPI普遍質疑並非真正具體到MPICH2 –
根據您的描述,您可能要考慮使用OpenMP而不是MPI。 –