[Dart-dev] DART/branches Revision: 12790
dart at ucar.edu
dart at ucar.edu
Mon Aug 27 14:39:35 MDT 2018
hendric at ucar.edu
2018-08-27 14:39:35 -0600 (Mon, 27 Aug 2018)
110
adding the option to run with fully distributed array.
this is the test program that i will use for timing.
Modified: DART/branches/rma_distrib/developer_tests/mpi_groups/simple_test.f90
===================================================================
--- DART/branches/rma_distrib/developer_tests/mpi_groups/simple_test.f90 2018-08-27 15:47:52 UTC (rev 12789)
+++ DART/branches/rma_distrib/developer_tests/mpi_groups/simple_test.f90 2018-08-27 20:39:35 UTC (rev 12790)
@@ -65,10 +65,12 @@
!------------------------------------------------------------------
! The namelist variables
!------------------------------------------------------------------
-integer :: group_size = 2
-integer(KIND=MPI_OFFSET_KIND) :: NX = 8 !< lengths of dimensions
+logical :: debug = .false.
+integer :: group_size = 2
+integer(KIND=MPI_OFFSET_KIND) :: NX = 8 !< lengths of dimensions
+integer :: max_iter = 1000
-namelist /simple_test_nml/ NX, group_size
+namelist /simple_test_nml/ NX, group_size, max_iter, debug
! io variables
integer :: iunit, io
@@ -94,7 +96,7 @@
character(len=256), dimension(1) :: var_names = (/'temp'/)
integer,parameter :: one_domain = 1
-integer :: my_rank
+real(r8) :: u, my_val
integer, allocatable :: group_members(:)
integer :: group_all
@@ -111,6 +113,13 @@
! index variables
integer :: ii, jj
+! timing variables
+real(r8) :: t1, t2, max_time, min_time
+
+! MPI variables
+integer :: ierr
+integer :: my_rank
+
!======================================================================
! start of executable code
!======================================================================
@@ -120,11 +129,24 @@
read(iunit, nml = simple_test_nml, iostat = io)
call check_namelist_read(iunit, io, "simple_test_nml")
+if (group_size == -1) group_size = task_count()
+
!----------------------------------------------------------------------
! create groups
!----------------------------------------------------------------------
+t1 = MPI_WTIME()
call create_groups()
+t2 = MPI_WTIME() - t1
+call MPI_REDUCE(t2, max_time, 1, MPI_REAL8, MPI_MAX, 0, MPI_COMM_WORLD, ierr)
+call MPI_REDUCE(t2, min_time, 1, MPI_REAL8, MPI_MIN, 0, MPI_COMM_WORLD, ierr)
+
+if (my_task_id() == 0) then
+ print*, 'group_size = ', group_size, ' NX = ', NX
+ print*, 'create_groups : Max Time = ', max_time, t1, t2
+ print*, 'create_groups : Min Time = ', min_time, t1, t2
+endif
+
!----------------------------------------------------------------------
! create data array
!----------------------------------------------------------------------
@@ -139,34 +161,62 @@
!----------------------------------------------------------------------
call create_window()
-do jj = 0, task_count()-1
- if (my_task_id() == jj) then
- print*, my_task_id(), '::', my_array(:)
- else
- call task_sync()
- endif
+!----------------------------------------------------------------------
+! timing test
+!----------------------------------------------------------------------
+t2 = 0.0_r8
+do ii = 1, max_iter
+ call random_number(u)
+ jj = FLOOR(NX*u)+1
+ t1 = MPI_WTIME()
+ my_val = get_my_val(jj)
+ t2 = t2 + (MPI_WTIME() - t1)
enddo
-do jj = 0, task_count()-1
- if (my_task_id() == jj) then
- do ii = 1, NX
- print*, 'my_task_id() = ', my_task_id(), 'get_owner(ii)', ii, get_owner(ii, my_task_id()), get_my_val(ii)
- enddo
- else
- call task_sync()
- endif
-enddo
+call MPI_REDUCE(t2, max_time, 1, MPI_REAL8, MPI_MAX, 0, MPI_COMM_WORLD, ierr)
+call MPI_REDUCE(t2, min_time, 1, MPI_REAL8, MPI_MIN, 0, MPI_COMM_WORLD, ierr)
More information about the Dart-dev
mailing list