2

Openmpi を使い始めたところです。int をファイルに読み書きしようとしています..書き込み用のコード:

ファイルに書き込まれる文字は認識できず、ほとんどがゴミです。

#include <stdlib.h>
#include <stdio.h>
#include "mpi.h"

#define BUFSIZE 10
#define FIRSTCHAR 1
#define FILENAME "file1.dat"

int main(int argc, char* argv[]) {
  int i, np, me;
  int buf[BUFSIZE];     /* The buffer to write */
  MPI_File myfile;       /* Shared file */

  /* Initialize MPI */
  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &me);
  MPI_Comm_size(MPI_COMM_WORLD, &np);

  /* Initialize buf with characters. Process 0 uses 'a', process 1 'b', etc. */
  for (i=0; i<BUFSIZE; i++) {
    buf[i] = FIRSTCHAR+(me);
  }

  /* Open the file */
  MPI_File_open (MPI_COMM_WORLD, FILENAME, MPI_MODE_CREATE | MPI_MODE_WRONLY,
         MPI_INFO_NULL, &myfile);
  /* Set the file view */
  MPI_File_set_view(myfile, me*BUFSIZE*sizeof(int), MPI_INT, MPI_INT, 
            "native", MPI_INFO_NULL);
  /* Write buf to the file */
  MPI_File_write(myfile, buf, BUFSIZE*sizeof(int), MPI_INT, MPI_STATUS_IGNORE);
  /* Close the file */
  MPI_File_close(&myfile);
  MPI_Finalize();
  exit(0);
}

うまくいきません..助けてください!

4

3 に答える 3

6

書き込まれたファイルはゴミではなく、バイナリになっているだけです

あなたがLinuxの場合

最初にファイルをバックアップします

cp file file2

それから

このコマンドを試して、バイナリからASCIIに変換してください

hexdump -v -e '7/4 "%10d "' -e '"\n"' file2

また、補足:ファイルに何百万行も書き込む場合を除き、 mpi_file write /load 関数は必要ないかもしれません

于 2012-07-06T05:09:42.930 に答える
1

intバイナリモードでファイルに書き込まれます。つまり、を使用した画面出力のように文字列に変換されて印刷されるprintfのではなく、メモリ表現が何らかの方法でファイルにコピーされます。(を使用して)ファイルからそれらを読み取るコードを作成するMPI_File_readと、正しく機能します。

MPIはクロスプラットフォームを試み、おそらくいくつかの追加の型情報を書き込むため、バイナリ形式を自分で読み取るのは非常に難しい場合があることに注意してください。したがって、MPIを使用してこれらのファイルから読み取る必要があります。

于 2012-07-06T03:32:34.883 に答える
1

バイナリ ファイルを ascii で表示するためのより簡潔なコマンドを次に示します。Linux の場合: pyCthon が提案したように、ファイルをバックアップします。

cp file temp

次に、次のコマンドを実行して、ファイルを ASCII 文字として出力します。

od -c temp

データがたまたま整数の場合:

od -i temp
于 2019-03-19T05:52:33.097 に答える