我正在處理帶有MPI並行化的Fortran代碼,在該代碼中,我的內存不足以進行密集運行。我很小心地分配幾乎所有在模擬開始時所需的內存。子程序靜態內存分配通常很小,但如果由於這些子程序而導致內存不足,則會在模擬的早期發生,因爲內存分配不應該隨着時間的推移而增長。我的問題是,遠到仿真,我遇到了內存不足的錯誤,如:MPI內部緩衝區內存問題
Insufficient memory to allocate Fortran RTL message buffer, message #174 = hex 000000ae.
,我能想到的是,我的MPI調用都是使用內存的唯一的事情,我不能在開始預分配的模擬。在仿真運行時,我主要使用MPI_Allreduce,MPI_Alltoall和MPI_Alltoallv,有時我會傳遞大量數據。內存問題可能是MPI創建的內部緩衝區的結果嗎?我怎樣才能防止這樣的驚喜記憶問題?這個內部緩衝區可以在模擬期間增長嗎?
我看過Valgrind,除了惱人的MPI警告,我沒有看到任何其他內存問題。
我將內存問題縮小到執行MPI_Alltoall和MPI_Alltoallv的子例程。另外,我還發現使用1節點(16個處理器)時沒有內存問題,但是當使用2個或更多節點時,內存問題很明顯。任何想法如何這甚至可能?對我來說,似乎這個問題不可能是我編碼的錯誤,但我以前錯了。 – Higgy