我有一個文本文件,其中包含一個標題矩陣,然後矩陣。這裏有一個例子爲3x3矩陣:使用MPI-IO讀取文本文件?
3 3
1 56 8
12 3 0
9 44 81
我一直得到垃圾值與MPI-IO,並發現它只是二進制工作原理,而不是文本文件。
我以爲我會讀一個字符流並轉換爲整數,但我不知道如何處理這個問題,因爲矩陣元素有可變的數字位數。我真的不知道如何處理這個問題?
我有一個文本文件,其中包含一個標題矩陣,然後矩陣。這裏有一個例子爲3x3矩陣:使用MPI-IO讀取文本文件?
3 3
1 56 8
12 3 0
9 44 81
我一直得到垃圾值與MPI-IO,並發現它只是二進制工作原理,而不是文本文件。
我以爲我會讀一個字符流並轉換爲整數,但我不知道如何處理這個問題,因爲矩陣元素有可變的數字位數。我真的不知道如何處理這個問題?
一般來說,你知道的類型和寫在你的二進制文件的東西數量(例如所有整數,10 等)。您可以讀取字節數,但MPI二進制文件通常會以整數類型讀取/寫入,在您的情況下爲9個整數(因此數字位數不重要)。你打開文件,並像閱讀,
call MPI_FILE_OPEN(MPI_COMM_WORLD, filename, &
MPI_MODE_RDONLY , MPI_INFO_NULL, fh, ierr)
bufsize = 3*3
allocate(buf(bufsize))
call MPI_FILE_READ_ALL(fh, buf, bufsize, MPI_integer, &
MPI_STATUS_IGNORE, ierr)
對於可變矩陣大小,您可以像使用MPI_File_get_size
事情讓大小,制定出有多少個元素閱讀。對於混合數據,可以將二進制文件的第一部分(或最後一部分)作爲頭文件,首先讀取並用於解碼文件的其餘部分。您仍然需要知道標題的格式,並且在更改代碼/標題格式時,可能會出現問題,因爲您打破了向後兼容性。這是HDF5數據格式的原因之一https://support.hdfgroup.org/HDF5/
文本文件很棘手,因爲您需要知道「字節」而不是「數字」。例如1 1 1
比10 15 123355
短。
現在,如果你的慣例說「每一個數字會被補零6個位數」,那麼你可以從(尺寸/ nprocs)讀取每個進程*排名第
或者,你會需要一個索引器來讀取文件並記錄矩陣每一行開始的偏移量。或者正如您所觀察到的,二進制數據對於這一切變得更加容易。
爲什麼你想/需要使用MPI-IO?矩陣的哪一部分是應該讀取/管理的每個過程? – Gilles
@Gilles每個進程獲得一個連續的行塊。這是一個任務,所以我必須使用MPI-IO。 (我知道家庭作業的幫助是不被接受的,這就是爲什麼我要求一種方法,而不是解決方案!) – Moody