當使用MPI在C/C++中編寫代碼時,如果在MPI_Init被調用之前分配內存,每個進程如何查看該內存?從測試程序中,我可以看出,有時候它是可以的,而其他的則不然。標準是否定義了這個?我無法分辨在MPI_Init期間內存分配是否被複制到其他進程,如果我只是幸運的,因爲所有進程都在單個(多核)CPU上「當前」。MPI內存分配
Q
MPI內存分配
0
A
回答
2
是的。每個進程都是在可執行的加載時產生的。如果在調用MPI_Init之前分配了任何內存,則每個進程都會知道該數據。但是,在調用MPI_Init之前,進程不知道自己或彼此。調用MPI_Init和MPI_Comm_world初始化MPI環境並返回MPI_Comm,它允許您在進程之間建立連接。
1
感謝IRO-bot!我寫了HelloWorld.cpp並測試了它;這裏是任何有興趣的人的副本。
#include <iostream>
#include "mpi.h"
int main(int argc, char* argv[])
{
int numprocs;
int myid = 0;
std::cout << "Hello MPI World, from process " << myid << "!! " << std::endl;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
if(myid == 0)
std::cout << std::endl;
std::cout << "Hello MPI World, from process " << myid << "!! " << std::endl;
MPI_Finalize();
return 0;
}
示例輸出:程序mpiexec -n 4 HelloMPIWorld
你好MPI世界,從進程0! 你好MPI世界,從進程0! 你好MPI世界,從進程0! 你好MPI世界,從進程0!
Hello MPI World,from process 0 !! 你好MPI世界,從進程3! Hello MPI World,來自流程1! 你好MPI世界,從進程2!
相關問題
- 1. FORTRAN MPI內存分配
- 2. MPI程序中的內存分配
- 3. MPI中的動態內存分配
- 4. MPI內存泄漏
- 5. MPI庫和內存
- 6. 內存分配
- 7. 內存分配
- 8. 內存分配
- 9. 內存分配
- 10. 內存分配
- 11. 內存分配
- 12. 內存分配
- 13. 內存分配
- 14. 分配內存
- 15. 內存分配
- 16. MPI集體參數分配
- 17. 可用內存malloc MPI
- 18. C內存分配
- 19. 內存分配,C++
- 20. Dalvik內存分配
- 21. C++分配內存
- 22. Silverlight內存分配
- 23. OS:內存分配
- 24. ConcurrentHashMap內存分配
- 25. GPU內存分配
- 26. Android內存分配
- 27. CComBSTR內存分配
- 28. TimerCallback.PerformTimerCallback內存分配
- 29. MySql內存分配
- 30. 內存池分配
在MPI_Init中不應複製。在調用MPI_Init之前,每個進程都分配相同的內存,所以每個人都應該能夠看到它,對吧? – milancurcic 2012-01-03 03:31:20
我想這就是我不明白 - 爲MPI_Init,其他進程甚至存在嗎?如果不是,那麼在MPI_Init之前分配內存只會將內存分配給'master'(id = 0)進程? – Jess 2012-01-03 03:34:22
是的。你可以通過編寫一個hello world程序來測試它,而不用調用MPI_Init,並且並行地執行它 - 你將產生n個獨立的進程,並且每個進程都會說「hello」。調用MPI_Init建立環境(MPI_Comm),它在流程之間創建鏈接並允許他們說出他們是誰(例如,我的ID是什麼?)。 – milancurcic 2012-01-03 03:37:36