2015-04-07 37 views
-1

在調用mpi init之前釋放分配內存的最佳方法是什麼?在下面給出的代碼中,應該在mpi finalize之前或mpi finalize之後釋放被釋放的內存。無論如何,無論哪種方式不會給出任何錯誤。可用內存malloc MPI

感謝

int main (int argc, char *argv[]) 
{ 
    int hostid, numprocessors; 
    int *trial; 
    trial = calloc(5,sizeof(int)); 
    MPI_Init(&argc, &argv); 
    MPI_Comm_size(MPI_COMM_WORLD, &numprocessors); 
    MPI_Comm_rank(MPI_COMM_WORLD,&hostid); 
    free(trial); 
    MPI_Finalize(); 
    //free(trial); 
    return(0); 
} 
+0

那麼問題是什麼?這個記憶是否應該被使用? –

+1

如果你沒有將內存提供給'MPI_Init()',你可以在任何時候釋放它。在調用'MPI_Finalize()'之後,可能會出現'嵌套對稱性'的爭論,但是你的代碼應該沒問題。您可以使用['valgrind'](http://valgrind.org/)來驗證這一點。 –

+0

感謝Jonathan和Severin的回覆。我問這個問題的原因是,我正在編寫一個複雜的混合並行代碼,它使用openmp,mpi和gpu進行氣候模型模擬,並且很高興知道這些場景中的標準實踐應該是什麼。我曾嘗試Valgrind,但它不適用於Ubuntu上的MPI程序(https://bugs.launchpad.net/ubuntu/+source/mpich2/+bug/1045326) –

回答

1

轉移到評論的答案,允許關閉。

如果您沒有將存儲空間設置爲MPI_Init(),則可以在適合您的情況下將其釋放。在調用MPI_Finalize()之後,可能會出現「嵌套對稱性」的爭議,但是您的代碼應該沒問題。

當然,問題中的代碼不會在任何地方使用分配的內存。但是,觀察仍然適用。只要你在最後一個使用它的代碼完成之前沒有釋放內存,你應該沒問題。

您可以使用valgrind來驗證此(...雖然我注意observationvalgrind不與MPI程序的工作,至少在Ubuntu環境是,據推測,相關的一個......)