New structure for A2A and graph_fnd_owner

New implementation for A2A: use mpi_allgather and mpi_reduce_scatter,
with two variants: one for variable inputs, one for fixed size
inputs.
Modified graph_fnd_owner to pass padded and uniform sized input to
A2A.
This commit is contained in:
Salvatore Filippone
2020-01-09 10:44:01 +00:00
parent 7c908c0849
commit 3cfdc033fd
4 changed files with 182 additions and 57 deletions
-24
View File
@@ -285,14 +285,6 @@ module psb_desc_mod
module procedure psb_cdfree
end interface psb_free
interface psb_cd_set_maxspace
module procedure psb_cd_set_maxspace
end interface psb_cd_set_maxspace
interface psb_cd_get_maxspace
module procedure psb_cd_get_maxspace
end interface psb_cd_get_maxspace
interface psb_cd_set_large_threshold
module procedure psb_i_cd_set_large_threshold
end interface psb_cd_set_large_threshold
@@ -310,7 +302,6 @@ module psb_desc_mod
integer(psb_lpk_), private, save :: cd_large_threshold = psb_default_large_threshold
integer(psb_ipk_), private, save :: cd_maxspace = -1
contains
@@ -362,21 +353,6 @@ contains
integer(psb_lpk_) :: val
val = cd_large_threshold
end function psb_cd_get_large_threshold
subroutine psb_cd_set_maxspace(ith)
implicit none
integer(psb_ipk_), intent(in) :: ith
if (ith > 0) then
cd_maxspace = ith
end if
end subroutine psb_cd_set_maxspace
function psb_cd_get_maxspace() result(val)
implicit none
integer(psb_ipk_) :: val
val = cd_maxspace
end function psb_cd_get_maxspace
function psb_cd_is_large_size(m) result(val)
use psb_penv_mod
+52 -3
View File
@@ -29,7 +29,7 @@
! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE.
!
!!$
!
!
!
! package: psb_indx_map_mod
@@ -278,13 +278,14 @@ module psb_indx_map_mod
end interface
interface
subroutine psi_a2a_fnd_owner(idx,iprc,idxmap,info)
subroutine psi_a2a_fnd_owner(idx,iprc,idxmap,info,samesize)
import :: psb_indx_map, psb_ipk_, psb_lpk_
implicit none
integer(psb_lpk_), intent(in) :: idx(:)
integer(psb_ipk_), allocatable, intent(out) :: iprc(:)
class(psb_indx_map), intent(in) :: idxmap
integer(psb_ipk_), intent(out) :: info
logical, intent(in), optional :: samesize
end subroutine psi_a2a_fnd_owner
end interface
@@ -311,6 +312,25 @@ module psb_indx_map_mod
end subroutine psi_graph_fnd_owner
end interface
interface psb_cd_set_maxspace
module procedure psb_cd_set_maxspace
end interface psb_cd_set_maxspace
interface psb_cd_get_maxspace
module procedure psb_cd_get_maxspace
end interface psb_cd_get_maxspace
interface psb_cd_set_samplesize
module procedure psb_cd_set_samplesize
end interface psb_cd_set_samplesize
interface psb_cd_get_samplesize
module procedure psb_cd_get_samplesize
end interface psb_cd_get_samplesize
integer(psb_ipk_), private, save :: cd_maxspace = -1
integer(psb_ipk_), private, save :: samplesize = 32
integer, parameter :: psi_symm_flag_norv_ = 0
integer, parameter :: psi_symm_flag_inrv_ = 1
interface psi_symm_dep_list
@@ -363,7 +383,36 @@ contains
val = 'Unknown ?'
end select
end function psi_get_adj_alg_fmt
subroutine psb_cd_set_maxspace(ith)
implicit none
integer(psb_ipk_), intent(in) :: ith
if (ith > 0) then
cd_maxspace = ith
end if
end subroutine psb_cd_set_maxspace
function psb_cd_get_maxspace() result(val)
implicit none
integer(psb_ipk_) :: val
val = cd_maxspace
end function psb_cd_get_maxspace
subroutine psb_cd_set_samplesize(ith)
implicit none
integer(psb_ipk_), intent(in) :: ith
if (ith > 0) then
samplesize = ith
end if
end subroutine psb_cd_set_samplesize
function psb_cd_get_samplesize() result(val)
implicit none
integer(psb_ipk_) :: val
val = samplesize
end function psb_cd_get_samplesize
!>
!! \memberof psb_indx_map