2017-01-10 19 views
0

私は、マトリックスの寸法を持つヘッダーを含むテキストファイルを持っています。ここでは3×3行列のための例です:MPI-IOを使ってテキストファイルを読む?

3 3 
1 56 8 
12 3 0 
9 44 81 

私は、MPI-IOでゴミ値を取得し続け、それが唯一のバイナリで動作を発見、テキストファイルではありません。

文字ストリームで読み込んで整数に変換すると思っていましたが、マトリックス要素の桁数が変わるため、この問題にどのようにアプローチするのかよく分かりません。私は本当にこれにアプローチする方法がわからないのですか?

+0

なぜMPI-IOを使いたい/必要がありますか?マトリックスのどの部分が読み取り/管理されるべきなのか? – Gilles

+0

@Gilles各プロセスは、連続した行ブロックを取得します。これは割り当てなので、MPI-IOを使用する必要があります。 (私は解決策ではなくアプローチを求めているので、宿題の助けが欲求不満だと知っています!) – Moody

答えて

1

一般的に、バイナリファイルに書かれているものの種類と数がわかります(例:すべての整数、1など)。あなたはバイト数で読むことができますが、MPIバイナリファイルは、通常、あなたのケース9の整数で、タイプの整数として読み書きされます(桁数は重要ではありません)。あなたは、サイズを取得し、読むためにどのように多くの要素のうち動作するようにMPI_File_get_sizeのようなものを使用することができ、変数行列のサイズについては

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) 

、ファイルを開いて、何かのようで読み取ります。混合データの場合は、バイナリファイルの最初(または最後)の部分をヘッダとして持つことができます。ヘッダは最初に読み込み、残りのファイルをデコードするために使用します。それでもヘッダーの形式を知る必要があり、コード/ヘッダー形式を変更したときに下位互換性を失うと問題になることがあります。これは、HDF5のようなデータフォーマットの理由の一部です。https://support.hdfgroup.org/HDF5/

0

テキストファイルは「数字」ではなく「バイト」を知る必要があるため、扱いにくいです。例えば1 1 110 15 123355より短いです。

あなた大会が言うならば、今、あなたは(サイズ/ nprocs)から読み出された各プロセス*ランク

番目それとも、あなたはよを持つことができる「すべての数は6桁のゼロ詰めになります」ファイルを読み込み、マトリックスの各行がどのオフセットで開始するかを記録するインデクサーが必要です。

ご覧のとおり、バイナリデータの方がずっと簡単です。

関連する問題