[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