我對MPI中的文件寫入有些懷疑。假設我有一個程序工作的「N」no。在程序結束時,每個過程將具有「m」個粒子(位置+速度)。但是,每個過程的粒子數m不同。我如何將所有的粒子信息(pos + vel)寫入單個文件中。我從搜索中瞭解到,我可以通過MPI_File_open,MPI_File_set_view,MPI_File_write_all這樣做,但是我需要在每個進程中都有相同數量的粒子。任何想法如何我能做到這一點在我的情況?MPI寫入文件不等大小的向量
1
A
回答
0
需要執行
MPI_Allgather(np, 1, MPI_INTEGER, procnp, 1, &
MPI_INTEGER, MPI_COMM_WORLD, ierr)
其中N p是每個進程和procnp顆粒的數量的工序nprocs
大小數的陣列。這給你一個關於所有其他過程中分子數量的每個過程的數組。通過計算基於進程ID的偏移量,可以爲每個進程正確選擇MPI_File_set_view
。這psudocode得到補償是一樣的東西,
procdisp = 0
!Obtain displacement of each processor using all other procs' np
for i = 1, irank -1
procdisp = procdisp + procnp(i)*datasize
enddo
這是從FORTRAN代碼,以便irank是從1到nprocs
1
你並不需要在每個處理器上相同數量的粒子拍攝。你需要的是每個處理器參與。一個或多個甚至可以有零粒子。 Allgather是一種很好的方法,並且所有進程之間交換的單個整數不是那麼大的開銷。
然而,更好的辦法是使用MPI_SCAN:
incr = numparts;
MPI_Scan(&incr, &new_offset, 1, MPI_LONG_LONG_INT,
MPI_SUM, MPI_COMM_WORLD);
new_offset -= incr; /* or skip this with MPI_EXSCAN, but \
then rank 0 has an undefined result */
MPI_File_write_at_all(fh, new_offset, buf, count, datatype, status);
+0
非常感謝您的回答.... –
相關問題
- 1. 在MPI中寫入文件
- 2. 向文本框寫入大量文本
- 3. 按字符輸入值的反向大小寫(小寫/大寫)
- 4. Python:寫入文件的大小限制
- 5. 基於文本輸入的重定向不區分大小寫
- 6. 在c MPI中寫入輸出文件
- 7. 寫入文件PBS MPI時出錯
- 8. 無法寫入共享MPI文件,mpi4py
- 9. MPI並行寫入TIFF文件
- 10. 向文本文件寫入大量查詢
- 11. MPI io按行讀取文件的過程(不按塊大小)
- 12. 哪些文本寫入類是寫大量小文件最有效的?
- 13. 由mpi文件寫入的文件中無法識別的字符寫入
- 14. 在Python中向HDF5文件寫入大量數字
- 15. 將C++向量寫入輸出文件
- 16. 將Java向量寫入分隔文件
- 17. 文件的大小進入GB的寫入一些文本
- 18. 將字符串寫入大量文件
- 19. 寫入文件/大量字節失敗
- 20. 中等大小的矢量
- 21. 向垂直列中的文本文件寫入向量
- 22. 值不寫入向量
- 23. 寫入向量超出大小引起恐慌
- 24. 等待寫入文件
- 25. 區分大小寫File.equals區分大小寫的文件系統
- 26. Ruby文件寫入窗口返回錯誤的文件大小?
- 27. 固定大小向量的C++向量
- 28. PowerShell的大小寫變量
- 29. 用大量的信息將文件寫入文件頂部
- 30. 向excel文件寫入向量類的字段
非常感謝@Ed史密斯....這解決了我的問題。 –