먼저 큰 데이터 파일을 읽고 계산을 수행하는 루트 프로세스를 지정한 프로젝트를 작성하고 두 번째로 계산 된 결과를 다른 모든 프로세스에 브로드 캐스트합니다 프로세스. 여기에 내 코드가있다 : (1) nsample=30000
(2)와 함께 txt 파일에서 임의의 숫자를 읽는다. (2) 다른 프로세스에 브로드 캐스팅 한 몇 가지 규칙에 의해 dens_ent
행렬을 생성한다. 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 이상의 단위를 사용하고 각 ierr 상태 값을 모두 확인하십시오. MPI 호출. – chw21
플러스, 당신은 당신이 얻는 결과에 대해서는 앞으로 곧 나오지 않을 것입니다. 비 루트 프로세스가 "BLABLABLA"를 인쇄합니까? 루트 프로세스가 "dingdong"을 인쇄합니까? 얼마나 많은 프로세스를 실행하고 있습니까? – chw21
이전 주석에 덧붙여,'MPI_BARRIER'보다는'MPI_BCAST'를 의미합니까? – Harald