From e3085a5f79679afd8ebd607084a13d1a2ffbee3e Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 27 Jul 2017 14:49:34 +0100 Subject: [PATCH] Make errcom not blocking. Cache in info_mpik. Fix makefile. --- base/modules/psb_error_impl.F90 | 2 +- base/modules/psb_error_mod.F90 | 26 ++++++++++++++++++++++++-- base/modules/psi_penv_mod.F90 | 26 +++++++++++++++++--------- test/fileread/Makefile | 4 ++-- 4 files changed, 44 insertions(+), 14 deletions(-) diff --git a/base/modules/psb_error_impl.F90 b/base/modules/psb_error_impl.F90 index 5216a9cc..a6db7796 100644 --- a/base/modules/psb_error_impl.F90 +++ b/base/modules/psb_error_impl.F90 @@ -5,7 +5,7 @@ subroutine psb_errcomm(ictxt, err) integer(psb_mpik_), intent(in) :: ictxt integer(psb_ipk_), intent(inout):: err - call psb_amx(ictxt, err) + if (psb_get_global_checks()) call psb_amx(ictxt, err) end subroutine psb_errcomm diff --git a/base/modules/psb_error_mod.F90 b/base/modules/psb_error_mod.F90 index cdfc2006..5dad978c 100644 --- a/base/modules/psb_error_mod.F90 +++ b/base/modules/psb_error_mod.F90 @@ -63,8 +63,8 @@ module psb_error_mod & psb_clean_errstack, psb_error_handler, & & psb_ser_error_handler, psb_par_error_handler, & & psb_ser_error_print_stack, psb_par_error_print_stack,& - & psb_error_print_stack, psb_errmsg, psb_ach_errmsg - + & psb_error_print_stack, psb_errmsg, psb_ach_errmsg, & + & psb_set_global_checks, psb_clear_global_checks, psb_get_global_checks interface psb_error_handler subroutine psb_ser_error_handler(err_act) @@ -161,9 +161,31 @@ module psb_error_mod integer(psb_ipk_), save :: verbosity_level = 1 integer(psb_ipk_), save :: err_action = psb_act_abort_ integer(psb_ipk_), save :: debug_level = 0, debug_unit, serial_debug_level=0 + logical, save :: comm_global_checks = .false. contains + subroutine psb_set_global_checks(val) + logical, intent(in), optional :: val + if (present(val)) then + comm_global_checks = val + else + comm_global_checks = .true. + end if + end subroutine psb_set_global_checks + subroutine psb_clear_global_checks() + + comm_global_checks = .false. + + end subroutine psb_clear_global_checks + + function psb_get_global_checks() result(val) + logical :: val + + val = comm_global_checks + end function psb_get_global_checks + + #if defined(LONG_INTEGERS) subroutine psb_errcomm_ipk(ictxt, err) integer(psb_ipk_), intent(in) :: ictxt diff --git a/base/modules/psi_penv_mod.F90 b/base/modules/psi_penv_mod.F90 index afff8ee1..3c93467a 100644 --- a/base/modules/psi_penv_mod.F90 +++ b/base/modules/psi_penv_mod.F90 @@ -253,11 +253,17 @@ contains integer(psb_ipk_), intent(in) :: ictxt integer(psb_ipk_), intent(out) :: iam, np - integer(psb_mpik_) :: iictxt, iiam, inp - iictxt = ictxt - call psb_info(iictxt,iiam,inp) - iam = iiam - np = inp + ! + ! Simple caching scheme, keep track + ! of the last CTXT encountered. + ! + integer(psb_mpik_), save :: lctxt=-1, lam, lnp + if (ictxt /= lctxt) then + lctxt = ictxt + call psb_info(lctxt,lam,lnp) + end if + iam = lam + np = lnp end subroutine psb_info_ipk @@ -515,8 +521,10 @@ contains integer(psb_mpik_), intent(in) :: ictxt integer(psb_mpik_), intent(out) :: iam, np integer(psb_mpik_) :: info - ! Cache the values for the most recent CTXT to speed - ! up subsequent queries + ! + ! Simple caching scheme, keep track + ! of the last CTXT encountered. + ! integer(psb_mpik_), save :: lctxt=-1, lam, lnp #if defined(SERIAL_MPI) @@ -527,7 +535,7 @@ contains np = -1 if (ictxt == lctxt) then iam = lam - np = lnp + np = lnp else if (ictxt /= mpi_comm_null) then call mpi_comm_size(ictxt,np,info) @@ -537,7 +545,7 @@ contains end if lctxt = ictxt lam = iam - lnp = np + lnp = np end if #endif diff --git a/test/fileread/Makefile b/test/fileread/Makefile index 66b2b4c3..dbdc82ae 100644 --- a/test/fileread/Makefile +++ b/test/fileread/Makefile @@ -5,7 +5,7 @@ include $(INCDIR)/Make.inc.psblas # Libraries used # LIBDIR=$(INSTALLDIR)/lib/ -PSBLAS_LIB= -L$(LIBDIR) -L/opencoarray-1.7.4 -lcaf_mpi -lpsb_util -lpsb_krylov -lpsb_prec -lpsb_base +PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_krylov -lpsb_prec -lpsb_base LDLIBS=$(PSBLDLIBS) FINCLUDES=$(FMFLAG)$(INCDIR) $(FMFLAG). @@ -35,7 +35,7 @@ psb_zf_sample: $(ZFOBJS) /bin/mv psb_zf_sample $(EXEDIR) .f90.o: - $(MPF90) $(F90COPT) $(FINCLUDES) $(FDEFINES) -c $< + $(MPFC) $(FCOPT) $(FINCLUDES) $(FDEFINES) -c $< clean: /bin/rm -f $(DFOBJS) $(ZFOBJS) $(SFOBJS) $(CFOBJS)\