ftest.F90

Path: OBSOLETES/Qmxlib_OLD/OMXTORUS/ftest.F90
Last Update: Tue Jun 07 17:24:20 +0900 2011
dot/f_3.png

Required files

Methods

ftest  

Included Modules

qmxf03_module

Public Instance methods

Main Program :

[Source]

program ftest
  use qmxf03_module
  implicit none
  integer, parameter :: DP=KIND(1.0d0)
  integer, parameter :: SP=KIND(1.0e0)
  integer, parameter :: NDAT=3*4*16*16*16
  integer :: myrank,i,iout
  character(len=256) :: fname
  real(DP) :: et0,et1
  integer  :: idata(NDAT)
  real(DP) :: ddata(NDAT),dtmp,dtmp2
  real(SP) :: sdata(NDAT),stmp,stmp2
  complex(DP) :: szdata(NDAT),rzdata(NDAT),ztmp
  complex(SP) :: scdata(NDAT),rcdata(NDAT),ctmp

  iout = 33

  call qmx_init()

  myrank = qmx_get_local_rank()

  write(fname,'("fqmx.",I2.2)')myrank
  open(iout,file=TRIM(fname),form='formatted',status='unknown')
  write(iout,'("RANK=",I3)')myrank

  call qmx_clock(et0)
  do i=1,NDAT
    call qmx_barrier()
  enddo
  call qmx_clock(et1)
  et1 = et1 - et0
  write(iout,'("qmx_barrier(",I2,"): ",I2," [called] ",ES14.6," [sec] ",F14.6," [usec/call]")') myrank,NDAT,et1,et1*1000*1000/NDAT

  do i=1,NDAT
    idata(i) = qmx_get_local_rank()*i
  enddo
  call qmx_sumcast_int(NDAT,idata)
  do i=1,NDAT
    write(iout,'("qmx_sumcast_int(",I2,"): data[",I10,"] = ",I10)') myrank,i,idata(i)/i
  enddo
  
  do i=1,NDAT
    ddata(i) = REAL(qmx_get_local_rank()*i,kind=DP)*sqrt(2.0_DP)
  enddo
  call qmx_sumcast_double(NDAT,ddata)
  do i=1,NDAT
    write(iout,'("qmx_sumcast_double(",I2,"): data[",I10,"] = ",ES24.15)')myrank,i,ddata(i)/i
  enddo

  do i=1,NDAT
    sdata(i) = REAL(qmx_get_local_rank()*i,kind=SP)
  enddo
  call qmx_bcast_float(NDAT,sdata,2)
  do i=1,NDAT
    write(iout,'("qmx_bcast_float(",I2,"): data[",I10,"] = ",ES14.6)')myrank,i,sdata(i)/i
  enddo

  do i=1,NDAT
    dtmp = REAL(qmx_get_local_rank()+1,kind=SP)
    scdata(i) = cmplx(dtmp,1.0_SP/dtmp,kind=SP)*i
    rcdata(i) = (0.0_SP,0.0_SP)
  enddo
  call qmx_clock(et0)
  call qmx_sendrecv_cmplx(NDAT,scdata,qmx_get_2d_next_x_rank(),rcdata,qmx_get_2d_prev_x_rank())
  call qmx_clock(et1)
  et1 = et1 - et0
  write(iout,'("qmx_sendrecv_cmplx(",I2,") ETIME=",F14.6," [sec] MBYTE=",F14.6," MB/s=",F14.6)') myrank,et1,real(8*NDAT)/1000/1000,real(8*NDAT)/1000/1000/et1
  do i=1,NDAT
    write(iout,'("qmx_sendrecv_cmplx(",I2,"): data[",I10,"] = ",2ES14.6)')myrank,i,rcdata(i)
  enddo

  do i=1,NDAT
    dtmp = REAL(qmx_get_local_rank()+1,kind=DP)
    szdata(i) = cmplx(dtmp,1.0_DP/dtmp,kind=DP)*i
    rzdata(i) = (0.0_DP,0.0_DP)
  enddo
  call qmx_clock(et0)
  call qmx_sendrecv_dcmplx(NDAT,szdata,qmx_get_2d_next_y_rank(),rzdata,qmx_get_2d_prev_y_rank())
  call qmx_clock(et1)
  et1 = et1 - et0
  write(iout,'("qmx_sendrecv_dcmplx(",I2,") ETIME=",F14.6," [sec] MBYTE=",F14.6," MB/s=",F14.6)') myrank,et1,real(16*NDAT)/1000/1000,real(16*NDAT)/1000/1000/et1
  do i=1,NDAT
    write(iout,'("qmx_sendrecv_dcmplx(",I2,"): data[",I10,"] = ",4ES24.16)')myrank,i,rzdata(i)
  enddo

  call qmx_finalize()

  close(iout)

  stop
end program