假設我有一些代碼,看起來像這樣:我調用MPI_Init()後會發生什麼?
#include "mpi.h"
int main(int argc, char** argv)
{
int my_array[10];
//fill the array with some data
MPI_Init(&argc, &argv);
// Some code here
MPI_Finalize();
return 0;
}
每個MPI實例將獲得自己的my_array的副本?只有0級?他們都沒有?在MPI_Init
之前有任何代碼是不好的做法嗎?
您能否介紹有關動態進程管理的文檔,以及可能的一些好的示例代碼? – rudolph9 2012-07-28 04:06:48
MPI中的動態過程管理非常有限。主要的限制是溝通者一旦創建就不能改變。所以一旦'MPI_Init'爲最初的一組進程創建'MPI_COMM_WORLD',就不可能再添加更多的進程。您可以使用[MPI_Comm_spawn](http://www.mpi-forum.org/docs/mpi22-report/node203.htm#Node203)創建一組新進程。新進程獲得了自己的'MPI_COMM_WORLD'和一個[intercommunicator](http://www.mpi-forum.org/docs/mpi22-report/node143.htm#Node143)鏈接這兩個世界。 – 2012-07-28 04:19:56
對於內存來說這是正確的,但你應該小心你在'MPI_Init'之前做的事情。一些實現可能會在'MPI_Init'中分叉進程,或者做任何魔法來設置他們的進程。例如。 [MPICH文檔](http://www.mcs.anl.gov/research/projects/mpi/www/www/MPI_Init.html)建議不要在'MPI_Init'之前修改外部狀態。當有疑問時,在'MPI_Init'之後執行# – Zulan 2012-08-02 08:15:17