MPI2がでて、Fortran90でも書けるようになったようなので、しばらくぶりにMPIいじってみました。
(しかし64Bit版には相変わらずINCLUDEファイルしかない・・・)*1
Gropp et al. "Using MPI" の最初のサンプルをより Fortran90 風に書き直し。
PROGRAM test USE mpi IMPLICIT NONE INTEGER, PARAMETER :: kd = SELECTED_REAL_KIND(13) ! DBLE REAL(kd), PARAMETER :: PI25DT = 3.141592653589793238462643_kd REAL(kd) :: pi_mine, pi, h, sum, x INTEGER :: n, myid, numprocs, i, ierr CALL MPI_INIT(ierr) CALL MPI_COMM_RANK(MPI_COMM_WORLD, myid , ierr) CALL MPI_COMM_SIZE(MPI_COMM_WORLD, numprocs, ierr) DO IF (myid == 0) THEN PRINT *, 'Enter the number of intervals: (0 quits) ' READ *, n END IF CALL MPI_BCAST(n, 1, MPI_INTEGER, 0, MPI_COMM_WORLD, ierr) IF (n <= 0) EXIT h = 1.0_kd / n sum = 0.0_kd DO i = myid + 1, n, numprocs x = h * (REAL(i, kd) - 0.5_kd) sum = sum + f(x) END DO pi_mine = h * sum CALL MPI_REDUCE(pi_mine, pi, 1, MPI_DOUBLE_PRECISION, MPI_SUM, 0, MPI_COMM_WORLD, ierr) IF (myid == 0) PRINT *, 'pi is ', pi, ' Error is', ABS(pi - PI25DT) END DO CALL MPI_FINALIZE(ierr) STOP CONTAINS !------------------------------------ REAL(kd) FUNCTION f(a) REAL(kd), INTENT(IN) :: a f = 4.0_kd / (1.0_kd + a * a) RETURN END FUNCTION f !------------------------------------ END PROGRAM test
備忘のメモ。
- Path C:\Program Files\MPICH2\bin\
- Project->Properties->Linker->Input->Additional Files => fmpich2.lib
- Tools->Option->Intel Visual Fortran->Compiler->Library=>C:\Program Files\MPICH2\lib
- Tools->Option->Intel Visual Fortran->Compiler->Include=>C:\Program Files\MPICH2\include
- MPICH2のインストール
- このサイトのディレクトリ入力例はC:\の\が抜けているのでコピペ時に注意。
*1:自分でソースからコンパイルすれば可。