簡體   English   中英

將MPI結果寫入文件

[英]Writing MPI result to a file

我有一些代碼可以解決所有參數的最短路徑問題,並且每個處理器都有一部分結果。 我正在嘗試將此結果寫成輸出文件的martix。 因此,解決方案的一部分,每個過程都將結果寫入正確位置的輸出文件中。 現在,我正在嘗試使用fseek進行此操作,但由於大小不同的整數而有些卡住。 像2和-199將會占用更多空間。 我該怎么做,以使處理器不會互相覆蓋? 也可能有寫作的比賽條件。

我應該以其他方式執行此操作,還是有辦法完成此操作? 我正在考慮將所有結果發送到一個進程(等級0),並創建數組並寫入文件。

不要使用ASCII輸出; 使用二進制文件,它的大小已明確定義。

因此,如果您使用fstream並加倍:

fstream filewriter("file.bin",ios::out | ios::binary);

vector<double> mylist;
mylist.push_back(2.5);
mylist.push_back(7.6);
mylist.push_back(2.1);
mylist.push_back(3.2);
mylist.push_back(4.2);

filewriter.write((char*)&mylist[0],mylist.size()*sizeof(double));

這將精確地寫入40個字節,這是列表大小(5個元素)的兩倍(8)倍。 使用fseek將非常容易。

在科學環境中,當輸出巨大時,強烈建議使用二進制數據。 然而:

1-您必須了解字節序的概念(大字節序,小字節序)。 2-您必須適當地記錄您的工作以進行重用(目的,大小,元素數量,尺寸)。 當我忘記記錄材料時,我會遇到巨大的誤解(我是一位編程物理學的博士學位物理學家)。

因此,ASCII數據分析不是正確的選擇。

幸運的是,有一個完整的庫專門為您組織東西,稱為HDF5。 它為您組織字節順序和可移植性。 但是,處理起來並不容易,而且學習曲線陡峭。 我認為這對於以后來說很難。

我建議您學習如何處理二進制文件以及如何讀取它們,了解它們的問題。 我認為您使用MPI足以處理二進制文件。

這是二進制文件的快速教程:

http://courses.cs.vt.edu/cs2604/fall02/binio.html

干杯。

您可以讓每個進程以某種格式寫輸出,可以在最后一個完成后將其合並和清除。 像(x,y,z),(x,y,z)...,其中x是行的索引,y是列,z是值。

對於內存映射文件,這是一項很好的工作。 它們是系統相關的,但是可以在POSIX和Windows OS系列中實現,因此,如果您使用現代OS,它們會起作用。 在boost中有一個可移植且C ++友好的實現(類apped_file_source,mapped_file_sink和mapped_file)。 進程間輸出是其用法的經典示例。

它們是二進制的,因此Samer在他的回答中所說的大多數內容也適用,唯一的區別是您使用指針算術而不是查找。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM