appmpi
C APPMPI SOURCE PV 20/09/02 21:15:01 10705 %IF UNIX64 subroutine mpienv(colDes,colcom,tag,bu,bufPos) C======================================================================= c routine mpiEnv c Wrapper pour l'envoi de message avec MPI c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL integer inbuf(2) integer incount integer bufPos integer lonBuf integer colDes integer colcom integer tag integer mpiErr segment BUFFER character*1 ffer(lonBuf) endsegment pointeur bu.BUFFER lonBuf=bu.ffer(/2) mpiErr=0 call ooosbl call MPI_Send(bu.ffer, bufPos,mpiTyPac , colDes-1, & tag,colcom , mpiErr) call oooubl segsup bu return end subroutine mpifin() C======================================================================= c routine mpifin c Wrapper pour l'appel a MPI_Finalize c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL integer mpiErr segment TABTOP integer leau(nTab) endsegment pointeur itab.TABTOP mpiErr=0 call MPI_Finalize ( mpiErr ) itab=colltopo segact itab*mod segdes itab segsup itab colltopo = 0 return end subroutine mpihor(valtime) C======================================================================= c routine mpihor c Wrapper pour l'appel a MPI_Wtime c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL real*8 valtime valtime = MPI_Wtime() return end subroutine mpiini() C======================================================================= c routine mpinbc c Wrapper pour l'appel a mpi_init_thread c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC PPARAM -INC CCOPTIO -INC COCOLL integer mpiErr integer nivmpi integer NPROC integer IPRANK integer ntab integer taille C Numero d'identification de Castem integer appIDCa segment TABTOP integer leau(nTab) endsegment pointeur itab.TABTOP appIdCa = idcext(1) mpiErr=0 nivmpi =0 call mpi_init_thread(MPI_THREAD_MULTIPLE, nivmpi, mpiErr ) mpicomWo = MPI_COMM_WORLD NPROC = 0 IPRANK = 0 CALL MPI_COMM_SIZE(MPI_COMM_WORLD, NPROC, IERR) CALL MPI_COMM_RANK(MPI_COMM_WORLD, IPRANK, IERR) C Allocation du tableau de topologie nTab = NPROC segini itab call MPI_Allgather( appIDCa , 1, MPI_INTEGER8, & itab.leau, 1, MPI_INTEGER8, MPI_COMM_WORLD, ierr) colltopo=itab segdes itab if(iimpi.ge.6) then write(6,*) '** kk2000 : place dans le monde',IPRANK, '/ ', & NPROC endif call MPI_COMM_SPLIT(mpicomWo, appIdCa, 0, mpicomca, mpiErr) if(iimpi.ge.6) then write(ioimp,*) 'Creation du communicateur propre Castem' write(ioimp,*) 'Numero de comm',mpicomca endif mpiTyFlo=MPI_REAL8 mpiTyEnt=MPI_INTEGER8 mpiTyCha=MPI_CHARACTER mpiTyLog=MPI_LOGICAL mpiTyPac=MPI_PACKED if(iimpi.ge.6) then endif nTab = idcext(1) segini itab cointeco = itab itab.leau( idcext(1)) = mpicomca segdes itab return end subroutine mpinbc(nbc) C======================================================================= c routine mpinbc c Wrapper pour l'appel a MPI_Comm_size c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL integer nbc integer mpiErr mpiErr=0 call MPI_Comm_size ( mpicomCa, nbc, mpiErr ) return end subroutine mpipac(inbuf,incount,bu,bufpos) C======================================================================= c routine mpiPaC c Wrapper pour l'appel a mpi_pack avec un tableau de caracteres en c arguement. c Pour OK compilation sous AIX c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL integer inbuf(2) integer incount integer bufPos integer lonBuf integer mpiErr segment BUFFER character*1 ffer(lonBuf) endsegment pointeur bu.BUFFER lonBuf=bu.ffer(/2) mpiErr=0 call MPI_PACK(inbuf,incount,mpiTyCha,bu.ffer,lonBuf, & bufPos,mpicomCa,mpiErr) C write(ioimp,*) 'Sortie mpipac.eso' return end subroutine mpipai(inbuf,incount,bu,bufpos) C======================================================================= c routine mpiPaC c Wrapper pour l'appel a mpi_pack avec un tableau de caracteres en c arguement. c Pour OK compilation sous AIX c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL integer inbuf(2) integer incount integer bufPos integer lonBuf integer mpiErr segment BUFFER character*1 ffer(lonBuf) endsegment pointeur bu.BUFFER lonBuf=bu.ffer(/2) mpiErr=0 call MPI_PACK(inbuf,incount,mpiTyEnt,bu.ffer,lonBuf, & bufPos,mpicomCa,mpiErr) c write(ioimp,*) 'Sortie mpipai.eso' return end subroutine mpipar(inbuf,incount,bu,bufpos) C======================================================================= c routine mpiPaC c Wrapper pour l'appel a mpi_pack avec un tableau de caracteres en c arguement. c Pour OK compilation sous AIX c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL integer inbuf(2) integer incount integer bufPos integer lonBuf integer mpiErr segment BUFFER character*1 ffer(lonBuf) endsegment pointeur bu.BUFFER lonBuf=bu.ffer(/2) mpiErr=0 call MPI_PACK(inbuf,incount,mpiTyFlo,bu.ffer,lonBuf, & bufPos,mpicomCa,mpiErr) c write(ioimp,*) 'Sortie mpipar.eso' return end C======================================================================= c routine mpipme c Wrapper pour l'appel a mpi_pack_size c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL integer nbel character*4 type integer mpity integer taille integer mpiErr mpity=-1 mpiErr=0 if(type .eq. 'INTE') then mpity = mpiTyFlo endif if(type .eq. 'FLOT') then mpity = mpiTyEnt endif if(type .eq. 'CHAR') then mpity = mpiTyCha endif return end subroutine mpircv(coldes,colcom,tag,bu) C======================================================================= c routine mpiRcv c Wrapper pour la recepption de message avec MPI c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL integer mpiErr integer colcom integer colDes integer tag integer mpi_status(MPI_STATUS_SIZE) integer bufpos segment BUFFER character*1 ffer(lonBuf) endsegment pointeur bu.BUFFER mpiErr=0 call ooosbl call MPI_PROBE(colDes-1, tag, colcom, & mpi_status, mpiErr) call oooubl C Allocation du buffer lonBuf=0 call MPI_GET_COUNT(mpi_status, mpiTyPac,lonBuf ,mpiErr) segini bu bufPos = 0 C Reception du message call ooosbl call MPI_RECV(bu.ffer,lonBuf,mpiTyPac,colDes-1,tag, & colcom, MPI_STATUS_IGNORE, mpiErr) call oooubl return end subroutine mpirgc(rgc) C======================================================================= c routine mpipme c Wrapper pour l'appel a MPI_Comm_rank c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL integer rgc integer mpiErr mpiErr=0 call MPI_Comm_rank ( mpicomCa, rgc, mpiErr ) return end subroutine mpiupc(outbuf,outcount,bu,bufpos) C======================================================================= c routine mpiupC c Wrapper pour l'appel a mpi_unpack avec un tableau de caracteres en c argument. c Pour OK compilation sous AIX c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL integer outbuf(2) integer outcount integer bufPos integer lonBuf integer mpiErr segment BUFFER character*1 ffer(lonBuf) endsegment pointeur bu.BUFFER lonBuf=bu.ffer(/2) mpiErr=0 call MPI_UNPACK(bu.ffer, lonBuf,bufPos,outbuf,outcount & ,mpiTyCha, mpicomCa, mpiErr) c write(ioimp,*) 'Sortie mpiupc.eso' return end subroutine mpiupi(outbuf,outcount,bu,bufpos) C======================================================================= c routine mpiupC c Wrapper pour l'appel a mpi_unpack avec un tableau de caracteres en c argument. c Pour OK compilation sous AIX c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL integer outbuf(2) integer outcount integer bufPos integer lonBuf integer mpiErr segment BUFFER character*1 ffer(lonBuf) endsegment pointeur bu.BUFFER lonBuf=bu.ffer(/2) mpiErr=0 call MPI_UNPACK(bu.ffer, lonBuf,bufPos,outbuf,outcount & ,mpiTyEnt, mpicomCa, mpiErr) c write(ioimp,*) 'Sortie mpiupi.eso' return end subroutine mpiupr(outbuf,outcount,bu,bufpos) C======================================================================= c routine mpiupC c Wrapper pour l'appel a mpi_unpack avec un tableau de caracteres en c argument. c Pour OK compilation sous AIX c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC COCOLL integer outbuf(2) integer outcount integer bufPos integer lonBuf integer mpiErr segment BUFFER character*1 ffer(lonBuf) endsegment pointeur bu.BUFFER lonBuf=bu.ffer(/2) mpiErr=0 call MPI_UNPACK(bu.ffer, lonBuf,bufPos,outbuf,outcount & ,mpiTyFlo, mpicomCa, mpiErr) c write(ioimp,*) 'Sortie mpiupr.eso' return end subroutine mpiicc(alead,blead,itag,interco) C======================================================================= c routine mpiicc c Wrapper pour l'appel a MPI_Intercomm_create c Avantage : Lieu unique pour la gestion des erreurs c Passage a autre chose que MPI plus aise c Localisation de l'include mpi.h c C======================================================================= include 'mpif.h' -INC PPARAM -INC CCOPTIO -INC COCOLL integer mpiErr integer itag integer alead integer blead integer interco alead = 0 interco = 0 ierr = 0 mpiErr = 0 CALL MPI_Intercomm_create(mpicomca, alead, & mpiComWo, blead, itag, interco,mpiErr) if(iimpi.ge.6) then write(ioimp,*) 'Intercommunicateur cree' write(ioimp,*) 'Numero de comm', interco endif return end %ELSE subroutine dummy_mpi entry mpienv entry mpifin entry mpihor entry mpiini entry mpinbc entry mpipac entry mpipai entry mpipar entry mpipme entry mpircv entry mpirgc entry mpiupc entry mpiupi entry mpiupr entry mpiicc mpiErr = 1 write (6,*) 'Les appels MPI sont desactives .' return end %ENDIF
© Cast3M 2003 - Tous droits réservés.
Mentions légales