2016-10-22 9 views
0

は以下の通りです読んで並列化:(!良い作品)バッファにファイルを読むOpenMPIのは、私はこのコードをどうしたいどのようなテキストファイル

(そして、私は、ファイルを読み込む方法を変更したくないも私がそれをどのように保管したか)。

複数の「ノード」にまたがってMPI_Scatterを使用してそのバッファを送信すると、各ノードは空白がある回数をカウントできます。

私が作ったコードは次のとおりです。

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

int main() { 

int file_size = 10000; 
FILE * fp; 
int my_size, my_id, size, local_acum=0, acum=0, i; 
char buf[file_size], recv_vect[file_size]; 

fp = fopen("pru.txt","r"); 
fseek(fp, 0L, SEEK_END); 
size = ftell(fp); 
fseek(fp, 0L, SEEK_SET); 
fread (buf,1,size,fp); 

// Initialize the MPI environment 
MPI_Init(NULL, NULL); 
MPI_Comm_size(MPI_COMM_WORLD, &my_size); 
MPI_Comm_rank(MPI_COMM_WORLD,&my_id); 

MPI_Scatter(buf, size/my_size, MPI_CHAR, recv_vect, 
    size/my_size, MPI_CHAR, 0, MPI_COMM_WORLD); 

local_acum=0; 
for (i=0; i < size/my_size; i++){ 
    // printf("%c", buf[i]); 
    if (buf[i] == ' '){ 
     local_acum++; 
    } 
} 
printf("\nlocal is %d \n", local_acum); 

acum=0; 
MPI_Barrier(MPI_COMM_WORLD); 
MPI_Reduce(&local_acum, &acum, 1, MPI_INT, MPI_SUM, 
    0, MPI_COMM_WORLD); 

if (my_id == 0){ 
    printf("Counter is %d \n", acum); 
} 

// Finalize the MPI environment. 
MPI_Finalize(); 
} 

私は望ましい結果を得ていないのです。

オプション-np 1を指定して実行すると、(期待どおり)完璧に動作します。

しかし、-np 2以上のオプションを指定して実行すると、私の望みは得られません 結果。 各ノードの動作は、常に同じ量の空白を数えます。私はこれが問題の鍵だと信じています。

私は

for (i=0; i < sie; i++) 

を行うためのノードでこれが空白の数をカウントした場合。したがって、各ノードにはバッファ全体があります。私は理解していない理由を散布して、私が合格する各ランクのための唯一の一部が含まれており、代わりにrecv_vectの、ファイル全体が含まれています(サイズ/ my_size)

答えて

1
  1. あなたはbufを反復処理しているが、言っておりますので。
  2. ルートだけでなく、各ノードでファイル全体を読み取っています。それはあなたの場合には意味をなさない。
関連する問題