我的程序非常大。所以,我不能在這裏列出。我的程序使用openMPI & mutiple_thread。vfork VS fork在MPI多線程中
的問題已經解決。 (使用vfork()而不是fork())但我不知道它爲什麼起作用。那麼,有誰能給我一個關於它的解釋嗎?
問題是由遊離引起的()。 我的程序中有一些代碼段。所有這些段都在由pthread_create創建的線程中。這些段的邏輯是這樣的:
{
*p = malloc();
fun(p);
free(p);
}
所有錯誤都在免費()。它報告段錯誤錯誤。我跑了100多次。我發現在每次免費腐敗之前總會有一個fork()被調用。
叉段的邏輯是等(線程):
{
MPI_program_code...
if(!fork())
{
execv(exe_file,arg);
}
MPI_program_code...
}
(注意,在exe_file不使用MPI_function。)
當我使用了vfork()而不是叉() ,根本沒有問題。但我不知道它爲什麼起作用。
所以,任何人都可以解釋爲什麼它的工作原理?
謝謝!我愛你的伴郎。你解決了我的問題兩次!我真的很感激。這個節目將在幾天後在天河2中運行。我真的很擔心它是否能夠運行在300,000核心規模。哈哈。我會盡我所能來做到這一點。 – user3392320
從MPI級別分叉子進程通常是非常糟糕和不可移植的事情。我真的希望你有一個很好的理由。 –
我真的不想在MPI中使用fork。但我的程序的主要目的是管理超級計算環境中的計算資源並在這些計算節點中分配作業。所以,我需要在MPI程序中分工。在MPI程序中是否有其他方法啓動進程? – user3392320