2017-01-10 5 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 개 자리에 제로 패딩 될 것" 파일을 읽고 행렬의 각 행이 시작되는 오프셋을 기록하는 인덱서가 필요합니다.

관찰 한대로 이진 데이터로 모든 것이 훨씬 쉬워집니다.