大きなデータファイルを読み込んで計算を行うルートプロセスを最初に指定し、プロセス。ここに私のコードです:(1)nsample=30000
と(2)dens_ent
行列を生成するいくつかのルール(3)他のプロセスにブロードキャストでtxtファイルから乱数を読み取ります。 Btw、私はgfortranでOpenMPIを使用しています。MPIルートプロセスのプリントアウトが欠落しています。データの読み取りだけを処理した後
IF (myid==0) THEN
OPEN(UNIT=8,FILE='rnseed_ent20.txt')
DO i=1,n_sample
DO j=1,3
READ(8,*) rn(i,j)
END DO
END DO
CLOSE(8)
END IF
dens_ent=0.0d0
DO i=1,n_sample
IF (myid==0) THEN
!Random draws of productivity and savings
rn_zb=MC_JOINT_SAMPLE((/-0.1d0,mu_b0/),var,rn(i,1:2))
iz=minloc(abs(log(zgrid)-rn_zb(1)),dim=1)
ib=minloc(abs(log(bgrid(1:nb/2))-rn_zb(2)),dim=1) !Find the closest saving grid
CALL SUB2IND(j,(/nb,nm,nk,nxi,nz/),(/ib,1,1,1,iz/))
DO iixi=1,nxi
DO iiz=1,nz
CALL SUB2IND(jj,(/nb,nm,nk,nxi,nz/),(/policybmk_2_statebmk_index(j,:),iixi,iiz/))
dens_ent(jj)=dens_ent(jj)+1.0d0/real(nxi)*markovian(iz,iiz)*merge(1.0d0,0.0d0,vent(j) .GE. -bgrid(ib)+ce)
!Density only recorded if the value of entry is greater than b0+ce
END DO
END DO
END IF
END DO
PRINT *, 'dingdongdingdong',myid
IF (myid==0) dens_ent=dens_ent/real(n_sample)*Mpo
IF (myid==0) PRINT *, 'sum_density by joint normal distribution',sum(dens_ent)
PRINT *, 'BLBLALALALALALA',myid
CALL MPI_BCAST(dens_ent,N,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ierr)
問題が発生する: (1)IF (myid==0) PRINT *, 'sum_density by joint normal distribution',sum(dens_ent)
には、プリントアウトがないよう、実行されないようです。 (2)次に、PRINT *, 'BLBLALALALALALA',myid
などのメッセージを追加して確認します。この場合も、ルートプロセスmyid=0
の印刷はありません。 ルートプロセスが機能していないようですか?これはどうやって真実だろうか?私はかなり混乱しています。 PRINT *, 'dingdongdingdong',myid
の前にMPI_BARRIER
を使用していないためですか?
あなたはこのサイトのルールを徹底的に近づいています。これに対して具体的なルールがあります:「ここに私のコードがあります。私のためにデバッグしてください。あなたは 'myid'がどのように計算されるかも示していません。つまり、ファイル-i/o(通常は 'STD_OUT'はユニット6でなければなりませんが、決して分かりません)に10以上の' unit'を使用することをお勧めします。また、それぞれの後に 'ierr'ステータスの値をすべて確認してくださいMPI呼び出し。 – chw21
さらに、あなたが得た出力に関しては、あなたはまだ近づいていません。ルート以外のプロセスは "BLABLABLA"を印刷しますか?ルートプロセスは "dingdong"を印刷しますか?いくつのプロセスを実行していますか? – chw21
前のコメントに加えて、 'MPI_BARRIER'ではなく' MPI_BCAST'を意味しますか? – Harald