2003-01-20 05:58:50 +08:00
|
|
|
!
|
2013-01-28 17:21:12 +08:00
|
|
|
! Copyright (C) 2013 Quantum ESPRESSO group
|
2003-01-20 05:58:50 +08:00
|
|
|
! This file is distributed under the terms of the
|
|
|
|
! GNU General Public License. See the file `License'
|
|
|
|
! in the root directory of the present distribution,
|
|
|
|
! or http://www.gnu.org/copyleft/gpl.txt .
|
|
|
|
!
|
2004-03-24 17:36:50 +08:00
|
|
|
!----------------------------------------------------------------------------
|
|
|
|
MODULE mp_global
|
|
|
|
!----------------------------------------------------------------------------
|
|
|
|
!
|
2013-09-16 16:20:10 +08:00
|
|
|
! ... Wrapper module, for compatibility. Contains a few "leftover" variables
|
2013-11-04 03:16:37 +08:00
|
|
|
! ... used for checks (all the *_file variables, read from data file),
|
|
|
|
! ... plus the routine mp_startup initializing MPI, plus the
|
2013-10-27 17:09:10 +08:00
|
|
|
! ... routine mp_global_end stopping MPI.
|
2013-09-16 16:20:10 +08:00
|
|
|
! ... Do not use this module to reference variables (e.g. communicators)
|
|
|
|
! ... belonging to each of the various parallelization levels:
|
|
|
|
! ... use the specific modules instead
|
2013-01-28 17:21:12 +08:00
|
|
|
!
|
2013-10-27 17:09:10 +08:00
|
|
|
USE mp_world, ONLY: mp_world_start, mp_world_end
|
2013-01-28 17:21:12 +08:00
|
|
|
USE mp_images
|
|
|
|
USE mp_pools
|
|
|
|
USE mp_bands
|
band group parallelization slightly modified to make it more flexible, and little
more efficient.
subroutine init_index_over_band ( comm, nbnd ) that set ibnd_start and ibnd_end
variables requiring comm=inter_bgrp_comm is removed and replaced by
subroutine set_bgrp_indices ( nbnd, ibnd_start, ibnd_end ) implementing the same
relationships between its arguments but:
- forcing the use of inter_bgrp_comm from the same mp_bands module,
- returning ibnd_start and ibnd_end as explicit outputs that are not anymore kept
in the module. In this way other quantities can be distributes if needed in any
given routine without too many non-local effects.
For compatibility with TDDFPT, that uses the bgrp parallelization and loads
ibnd_start/ibnd_end trhough mp_global module, these two variables are moved in
a dedicated module mp_bands_TDDFPT included in Module/mp_bands.f90. This is done
to avoid too much invasive changes in a code i don't know well. In this way the
needed changes are very localized and transparent, the code compiles correctly
so I think it should work exactly as before.
In my opinion the two variables should be moved somewhere inside TDDFPT.
Band parallelization is extended to h_psi(lda,n,m,psi,hpsi) and s_psi routines
(only when .not.exx_is_active because otherwise it is already used inside vexx)
for generic values of m (of course it gives a speedup only when m is not too small
compared to nbgrp but it works also if m < nbgrp ).
Compatibility with task groups has not be explored but should not be conceptually
different from how it works in the exx case.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@11835 c92efa57-630b-4861-b058-cf58834340f0
2015-11-07 08:06:40 +08:00
|
|
|
USE mp_bands_TDDFPT
|
2013-01-28 17:21:12 +08:00
|
|
|
USE mp_diag
|
2004-03-24 17:36:50 +08:00
|
|
|
!
|
2004-03-25 00:30:44 +08:00
|
|
|
IMPLICIT NONE
|
2004-03-24 17:36:50 +08:00
|
|
|
SAVE
|
|
|
|
!
|
2013-01-28 17:21:12 +08:00
|
|
|
! ... number of processors for the various groups: values read from file
|
2011-01-19 04:07:00 +08:00
|
|
|
!
|
2013-01-28 17:21:12 +08:00
|
|
|
INTEGER :: nproc_file = 1
|
|
|
|
INTEGER :: nproc_image_file = 1
|
|
|
|
INTEGER :: nproc_pool_file = 1
|
|
|
|
INTEGER :: nproc_ortho_file = 1
|
|
|
|
INTEGER :: nproc_bgrp_file = 1
|
|
|
|
INTEGER :: ntask_groups_file= 1
|
2004-03-24 17:36:50 +08:00
|
|
|
!
|
2009-10-19 01:48:34 +08:00
|
|
|
CONTAINS
|
|
|
|
!
|
|
|
|
!-----------------------------------------------------------------------
|
2016-03-23 14:14:26 +08:00
|
|
|
SUBROUTINE mp_startup ( my_world_comm, start_images, diag_in_band_group )
|
2009-10-19 01:48:34 +08:00
|
|
|
!-----------------------------------------------------------------------
|
2013-01-19 23:02:11 +08:00
|
|
|
! ... This wrapper subroutine initializes all parallelization levels.
|
2012-10-09 00:31:09 +08:00
|
|
|
! ... If option with_images=.true., processes are organized into images,
|
2013-01-19 23:02:11 +08:00
|
|
|
! ... each performing a quasi-indipendent calculation, such as a point
|
|
|
|
! .. in configuration space (NEB) or a phonon irrep (PHonon)
|
2012-10-09 00:31:09 +08:00
|
|
|
! ... Within each image processes are further subdivided into various
|
|
|
|
! ... groups and parallelization levels
|
2009-10-19 01:48:34 +08:00
|
|
|
!
|
2013-01-29 18:31:17 +08:00
|
|
|
USE command_line_options, ONLY : get_command_line, &
|
2015-08-21 01:29:18 +08:00
|
|
|
nimage_, npool_, ndiag_, nband_, ntg_
|
2013-09-23 20:57:14 +08:00
|
|
|
USE parallel_include
|
|
|
|
!
|
2009-10-19 01:48:34 +08:00
|
|
|
IMPLICIT NONE
|
2013-09-23 20:57:14 +08:00
|
|
|
INTEGER, INTENT(IN), OPTIONAL :: my_world_comm
|
2013-09-26 23:47:31 +08:00
|
|
|
LOGICAL, INTENT(IN), OPTIONAL :: start_images
|
2016-03-23 14:14:26 +08:00
|
|
|
LOGICAL, INTENT(IN), OPTIONAL :: diag_in_band_group
|
2013-10-07 16:10:00 +08:00
|
|
|
LOGICAL :: do_images
|
2016-03-23 14:14:26 +08:00
|
|
|
LOGICAL :: do_diag_in_band
|
2016-03-30 05:26:11 +08:00
|
|
|
INTEGER :: my_comm, num_groups, group_id
|
2013-09-23 20:57:14 +08:00
|
|
|
!
|
|
|
|
my_comm = MPI_COMM_WORLD
|
|
|
|
IF ( PRESENT(my_world_comm) ) my_comm = my_world_comm
|
|
|
|
!
|
2013-10-27 17:09:10 +08:00
|
|
|
CALL mp_world_start( my_comm )
|
2013-01-28 17:21:12 +08:00
|
|
|
CALL get_command_line ( )
|
2013-01-19 23:02:11 +08:00
|
|
|
!
|
2013-09-23 20:57:14 +08:00
|
|
|
do_images = .FALSE.
|
|
|
|
IF ( PRESENT(start_images) ) do_images = start_images
|
2012-10-09 00:31:09 +08:00
|
|
|
IF ( do_images ) THEN
|
2013-01-29 18:31:17 +08:00
|
|
|
CALL mp_start_images ( nimage_, world_comm )
|
2012-10-09 00:31:09 +08:00
|
|
|
ELSE
|
2013-01-28 17:21:12 +08:00
|
|
|
CALL mp_init_image ( world_comm )
|
2009-10-19 01:48:34 +08:00
|
|
|
END IF
|
|
|
|
!
|
2015-08-21 01:29:18 +08:00
|
|
|
CALL mp_start_pools ( npool_, intra_image_comm )
|
2013-11-04 03:16:37 +08:00
|
|
|
CALL mp_start_bands ( nband_, ntg_, intra_pool_comm )
|
2015-11-23 08:50:43 +08:00
|
|
|
!
|
2016-03-23 14:14:26 +08:00
|
|
|
do_diag_in_band = .FALSE.
|
|
|
|
IF ( PRESENT(diag_in_band_group) ) do_diag_in_band = diag_in_band_group
|
2016-03-30 05:26:11 +08:00
|
|
|
!
|
2016-03-23 14:14:26 +08:00
|
|
|
IF( do_diag_in_band ) THEN
|
|
|
|
! used to be one diag group per bgrp
|
2016-03-30 05:26:11 +08:00
|
|
|
! with strict hierarchy: POOL > BAND > DIAG
|
|
|
|
num_groups = npool_* nimage_ * nband_
|
|
|
|
group_id = my_bgrp_id + (my_pool_id + my_image_id * npool_ ) * nband_
|
|
|
|
my_comm = intra_bgrp_comm
|
2016-03-23 14:14:26 +08:00
|
|
|
ELSE
|
|
|
|
! one diag group per pool ( individual k-point level )
|
2016-03-30 05:26:11 +08:00
|
|
|
! with band group and diag group both being children of POOL comm
|
|
|
|
num_groups = npool_* nimage_
|
|
|
|
group_id = my_pool_id + my_image_id * npool_
|
|
|
|
my_comm = intra_pool_comm
|
2016-03-23 14:14:26 +08:00
|
|
|
END IF
|
2016-03-30 05:26:11 +08:00
|
|
|
CALL mp_start_diag ( ndiag_, my_comm, num_groups , group_id )
|
2009-10-19 01:48:34 +08:00
|
|
|
!
|
|
|
|
RETURN
|
|
|
|
!
|
|
|
|
END SUBROUTINE mp_startup
|
2010-12-29 08:16:26 +08:00
|
|
|
!
|
2013-10-27 17:09:10 +08:00
|
|
|
!-----------------------------------------------------------------------
|
|
|
|
SUBROUTINE mp_global_end ( )
|
|
|
|
!-----------------------------------------------------------------------
|
|
|
|
!
|
2013-12-28 17:29:14 +08:00
|
|
|
USE mp, ONLY : mp_comm_free
|
|
|
|
!
|
2014-01-12 16:28:19 +08:00
|
|
|
CALL clean_ortho_group ( )
|
2013-12-28 17:29:14 +08:00
|
|
|
CALL mp_comm_free ( intra_bgrp_comm )
|
|
|
|
CALL mp_comm_free ( inter_bgrp_comm )
|
|
|
|
CALL mp_comm_free ( intra_pool_comm )
|
|
|
|
CALL mp_comm_free ( inter_pool_comm )
|
2013-10-27 17:09:10 +08:00
|
|
|
CALL mp_world_end( )
|
|
|
|
!
|
2014-01-12 16:28:19 +08:00
|
|
|
RETURN
|
|
|
|
!
|
2013-10-27 17:09:10 +08:00
|
|
|
END SUBROUTINE mp_global_end
|
|
|
|
!
|
2004-03-24 17:36:50 +08:00
|
|
|
END MODULE mp_global
|