From 02f1ef741cc50092cb8543b09d13e6d21254f3ac Mon Sep 17 00:00:00 2001 From: Stack-1 Date: Mon, 23 Mar 2026 11:00:35 +0100 Subject: [PATCH] [] --- base/comm/internals/psi_cswapdata.F90 | 564 +++-- base/comm/internals/psi_cswaptran.F90 | 526 ++++- base/comm/internals/psi_dswapdata.F90 | 34 +- base/comm/internals/psi_dswaptran.F90 | 518 ++++- base/comm/internals/psi_iswapdata.F90 | 665 ++++-- base/comm/internals/psi_iswaptran.F90 | 577 ++++-- base/comm/internals/psi_lswapdata.F90 | 587 ++++-- base/comm/internals/psi_lswaptran.F90 | 619 ++++-- base/comm/internals/psi_sswapdata.F90 | 20 +- base/comm/internals/psi_sswaptran.F90 | 576 ++++-- base/comm/internals/psi_zswapdata.F90 | 468 ++++- base/comm/internals/psi_zswaptran.F90 | 618 ++++-- base/modules/Makefile | 2 +- base/modules/comm/psi_c_comm_v_mod.f90 | 88 +- base/modules/comm/psi_d_comm_v_mod.f90 | 31 +- base/modules/comm/psi_i_comm_v_mod.f90 | 88 +- base/modules/comm/psi_l_comm_v_mod.f90 | 88 +- base/modules/comm/psi_s_comm_v_mod.f90 | 20 - base/modules/comm/psi_z_comm_v_mod.f90 | 88 +- base/modules/serial/psb_c_base_vect_mod.F90 | 74 + base/modules/serial/psb_i_base_vect_mod.F90 | 83 +- base/modules/serial/psb_l_base_vect_mod.F90 | 90 +- base/modules/serial/psb_z_base_vect_mod.F90 | 74 + log.txt | 1819 ----------------- .../geaxpby/psblas_geaxpby_test.log | 1013 +++------ .../gedot/psblas_gedot_test.log | 1 + .../psblas_test_results.log | 712 +++++++ test/computational_routines/test.sh | 58 +- 28 files changed, 6017 insertions(+), 4084 deletions(-) delete mode 100644 log.txt diff --git a/base/comm/internals/psi_cswapdata.F90 b/base/comm/internals/psi_cswapdata.F90 index 657c9de6..cf673322 100644 --- a/base/comm/internals/psi_cswapdata.F90 +++ b/base/comm/internals/psi_cswapdata.F90 @@ -89,9 +89,10 @@ ! ! submodule (psi_c_comm_v_mod) psi_c_swapdata_impl + use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod contains - subroutine psi_cswapdata_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_cswapdata_vect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -101,34 +102,38 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + class(psb_c_base_vect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + character(len=30) :: name info = psb_success_ name = 'psi_cswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then + if (.not.psb_is_asb_desc(desc_a)) then info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 @@ -140,14 +145,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') + goto 9999 + end if + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + if (baseline) then + call psi_cswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_cswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -158,22 +194,8 @@ contains end subroutine psi_cswapdata_vect - ! - ! - ! Subroutine: psi_cswap_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_cswap_vidx_vect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) - + subroutine psi_cswap_baseline_vect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -182,13 +204,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me @@ -196,15 +218,15 @@ contains & iret, nesd, nerv integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti, n logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_cswap_vidx_vect' + info = psb_success_ + name = 'psi_cswap_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -222,8 +244,8 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n call idx%sync() if (debug) write(*,*) me,'Internal buffer' @@ -240,12 +262,12 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -266,7 +288,7 @@ contains ! Then gather for sending. ! pnti = 1 - do i=1, totxch + do i=1, num_neighbors nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ @@ -290,7 +312,7 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -323,12 +345,12 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -367,7 +389,7 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -407,7 +429,149 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_cswap_vidx_vect + end subroutine psi_cswap_baseline_vect + + + subroutine psi_cswap_neighbor_topology_vect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_cswap_nbr_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_spk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_cswap_neighbor_topology_vect ! ! @@ -426,34 +590,36 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_cswapdata_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then + if (.not.psb_is_asb_desc(desc_a)) then info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 @@ -465,14 +631,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') + goto 9999 + end if + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + if (baseline) then + call psi_cswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_cswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -483,22 +680,8 @@ contains end subroutine psi_cswapdata_multivect - ! - ! - ! Subroutine: psi_cswap_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_cswap_vidx_multivect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) - + subroutine psi_cswap_baseline_multivect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -506,21 +689,20 @@ contains #ifdef PSB_MPI_H include 'mpif.h' #endif - - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_) :: beta + class(psb_c_base_multivect_type) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -547,8 +729,8 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n call idx%sync() @@ -566,14 +748,14 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -594,9 +776,9 @@ contains ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ @@ -617,10 +799,10 @@ contains ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -652,14 +834,14 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -695,9 +877,9 @@ contains if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -737,6 +919,150 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_cswap_vidx_multivect + end subroutine psi_cswap_baseline_multivect + + + subroutine psi_cswap_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_c_base_multivect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_cswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_spk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_cswap_neighbor_topology_multivect + + end submodule psi_c_swapdata_impl diff --git a/base/comm/internals/psi_cswaptran.F90 b/base/comm/internals/psi_cswaptran.F90 index 56985264..8c233e17 100644 --- a/base/comm/internals/psi_cswaptran.F90 +++ b/base/comm/internals/psi_cswaptran.F90 @@ -103,22 +103,26 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_cswaptran_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -142,14 +146,46 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_ctran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_ctran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -172,9 +208,8 @@ contains ! ! ! - module subroutine psi_ctran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - + module subroutine psi_ctran_baseline_vect(ctxt,flag,beta,y,idx,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi #endif @@ -183,28 +218,28 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_ctran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -222,8 +257,8 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n call idx%sync() @@ -241,13 +276,13 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -270,7 +305,7 @@ contains ! pnti = 1 snd_pt = 1 - do i=1, totxch + do i=1, num_neighbors nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ @@ -296,7 +331,7 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -329,12 +364,12 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -373,7 +408,7 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -414,9 +449,152 @@ contains return - end subroutine psi_ctran_vidx_vect + end subroutine psi_ctran_baseline_vect + + + + subroutine psi_ctran_neighbor_topology_vect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_cswap_trn_nbr_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_vect: building topology' + call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_spk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + return + end subroutine psi_ctran_neighbor_topology_vect + ! ! ! @@ -437,22 +615,26 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_cswaptran_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -476,14 +658,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_ctran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_ctran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -507,8 +720,8 @@ contains ! ! ! - module subroutine psi_ctran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + module subroutine psi_ctran_baseline_multivect(ctxt,flag,beta,y,idx,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -518,20 +731,20 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -558,8 +771,8 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n call idx%sync() @@ -577,15 +790,15 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -606,9 +819,9 @@ contains ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ @@ -629,10 +842,10 @@ contains ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -665,14 +878,14 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_complex_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -708,9 +921,9 @@ contains if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -753,6 +966,151 @@ contains return - end subroutine psi_ctran_vidx_multivect + end subroutine psi_ctran_baseline_multivect + + + + subroutine psi_ctran_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_ctran_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_vect: building topology' + call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_spk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_ctran_neighbor_topology_multivect end submodule psi_c_swaptran_impl + + diff --git a/base/comm/internals/psi_dswapdata.F90 b/base/comm/internals/psi_dswapdata.F90 index 4ed8cb48..c21c2bbf 100644 --- a/base/comm/internals/psi_dswapdata.F90 +++ b/base/comm/internals/psi_dswapdata.F90 @@ -109,18 +109,17 @@ contains integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av ! error handling variables - integer(psb_ipk_) :: err_act - integer(psb_mpk_) :: me, np - character(len=30) :: name + integer(psb_ipk_) :: err_act + character(len=30) :: name info = psb_success_ name = 'psi_dswapdata_vect' @@ -448,8 +447,8 @@ contains #endif type(psb_ctxt_type), intent(in) :: ctxt - real(psb_dpk_), intent(in) :: beta integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: comm_indexes integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv @@ -466,7 +465,7 @@ contains info = psb_success_ - name = 'psi_dswap_nbr_vect' + name = 'psi_dswap_neighbor_topology_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -622,16 +621,17 @@ contains integer(psb_ipk_), optional :: data ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes - character(len=30) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name + info = psb_success_ name = 'psi_dswapdata_multivect' call psb_erractionsave(err_act) diff --git a/base/comm/internals/psi_dswaptran.F90 b/base/comm/internals/psi_dswaptran.F90 index 75e18f2a..ec6e6d2e 100644 --- a/base/comm/internals/psi_dswaptran.F90 +++ b/base/comm/internals/psi_dswaptran.F90 @@ -111,12 +111,17 @@ contains integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes character(len=20) :: name + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ name = 'psi_dswaptran_vect' call psb_erractionsave(err_act) @@ -142,14 +147,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_dtran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_dtran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -161,7 +197,7 @@ contains ! ! - ! Subroutine: psi_dtran_vidx_vect + ! Subroutine: psi_dtran_baseline_vect ! Data exchange among processes. ! ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods @@ -172,8 +208,8 @@ contains ! ! ! - module subroutine psi_dtran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + module subroutine psi_dtran_baseline_vect(ctxt,flag,beta,y,idx,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -188,7 +224,7 @@ contains real(psb_dpk_), intent(in) :: beta class(psb_d_base_vect_type), intent(inout) :: y class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv integer(psb_ipk_), intent(out) :: info ! locals @@ -196,7 +232,7 @@ contains integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -204,7 +240,7 @@ contains character(len=20) :: name info = psb_success_ - name = 'psi_dtran_vidx_vect' + name = 'psi_dtran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -222,8 +258,8 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n call idx%sync() @@ -241,13 +277,13 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 p2ptag = psb_double_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -270,7 +306,7 @@ contains ! pnti = 1 snd_pt = 1 - do i=1, totxch + do i=1, num_neighbors nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ @@ -296,7 +332,7 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_double_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -329,12 +365,12 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_double_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -373,7 +409,7 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -414,7 +450,169 @@ contains return - end subroutine psi_dtran_vidx_vect + end subroutine psi_dtran_baseline_vect + + + + + subroutine psi_dtran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_dtran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_dtran_neighbor_topology_vect + + ! @@ -445,21 +643,26 @@ contains integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + - info=psb_success_ - name='psi_swap_tranv' + info = psb_success_ + name = 'psi_dswaptran_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -476,14 +679,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_dtran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_dtran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -493,22 +727,8 @@ contains return end subroutine psi_dswaptran_multivect - - ! - ! - ! Subroutine: psi_dtran_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_dtran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + subroutine psi_dtran_baseline_multivect(ctxt,flag,beta,y,idx,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -524,14 +744,14 @@ contains class(psb_d_base_multivect_type), intent(inout) :: y real(psb_dpk_), intent(in) :: beta class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -558,8 +778,8 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n call idx%sync() @@ -577,15 +797,15 @@ contains end if if (debug) write(*,*) me,'do_send start' call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_double_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -606,9 +826,9 @@ contains ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ @@ -629,10 +849,10 @@ contains ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_double_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -665,14 +885,14 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_double_swap_tag - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -708,9 +928,9 @@ contains if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch + do i=1, num_neighbors proc_to_comm = idx%v(pnti+psb_proc_id_) nerv = idx%v(pnti+psb_n_elem_recv_) nesd = idx%v(pnti+nerv+psb_n_elem_send_) @@ -753,6 +973,166 @@ contains return - end subroutine psi_dtran_vidx_multivect + end subroutine psi_dtran_baseline_multivect + + + subroutine psi_dtran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_dpk_), intent(in) :: beta + class(psb_d_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_dtran_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! For transpose exchange: gather recv area first (we will send "recv" data) + if (debug) write(*,*) me,' nbr_tran_vect: gathering recv data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv swapping send/recv arrays + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer (recv_indexes gathered) + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_recv + 1), & ! recv buffer (will contain send_indexes data) + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! For transpose exchange: scatter the data that correspond to peers' send area + if (debug) write(*,*) me,' nbr_tran_vect: scattering send-index data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_dtran_neighbor_topology_multivect + + end submodule psi_d_swaptran_impl diff --git a/base/comm/internals/psi_iswapdata.F90 b/base/comm/internals/psi_iswapdata.F90 index 8d659f9b..4d749ce6 100644 --- a/base/comm/internals/psi_iswapdata.F90 +++ b/base/comm/internals/psi_iswapdata.F90 @@ -100,22 +100,26 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(out) :: info ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_iswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -128,7 +132,7 @@ contains endif if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ + info = psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 endif @@ -139,14 +143,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_iswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_iswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -157,21 +192,8 @@ contains end subroutine psi_iswapdata_vect - ! - ! - ! Subroutine: psi_iswap_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_iswap_vidx_vect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) + subroutine psi_iswap_baseline_vect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -181,13 +203,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me @@ -221,9 +243,9 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() + totrcv_ = total_recv * n + totsnd_ = total_send * n + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -238,16 +260,16 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) rcv_pt = 1+pnti+psb_n_elem_recv_ prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) @@ -265,13 +287,13 @@ contains ! Then gather for sending. ! pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) + call y%gth(idx_pt,nesd,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -289,10 +311,10 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -322,15 +344,15 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -366,17 +388,17 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) + call y%sct(rcv_pt,nerv,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do ! @@ -406,16 +428,174 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_iswap_vidx_vect - - ! - ! - ! Subroutine: psi_iswapdata_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encaspulated multivector. - ! - ! + end subroutine psi_iswap_baseline_vect + + + + subroutine psi_iswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_iswap_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_iswap_neighbor_topology_vect + + + + + + + + module subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -425,35 +605,39 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name - info=psb_success_ - name='psi_swap_datav' + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_iswapdata_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() icomm = ctxt%get_mpic() call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ + info = psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 endif @@ -464,14 +648,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_iswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_iswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -482,21 +697,8 @@ contains end subroutine psi_iswapdata_multivect - ! - ! - ! Subroutine: psi_iswap_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_iswap_vidx_multivect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) + subroutine psi_iswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -506,13 +708,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -526,8 +728,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_iswap_baseline_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -546,10 +748,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + totrcv_ = total_recv * n + totsnd_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -564,18 +766,18 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt @@ -595,11 +797,11 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) + call y%gth(idx_pt,snd_pt,nesd,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -619,10 +821,10 @@ contains snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if ((nesd>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(snd_pt),n*nesd,& @@ -651,17 +853,17 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nesd>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -696,15 +898,15 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) + call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -736,6 +938,173 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_iswap_vidx_multivect + end subroutine psi_iswap_baseline_multivect + + + + + + +subroutine psi_iswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info + + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_iswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + ! --------------------------------------------------------- + ! START phase: build topology (if needed), gather, post MPI + ! --------------------------------------------------------- + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + ! Lazy initialization: build the topology on first call + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Buffer layout: + ! combuf(1 : total_send) = send area + ! combuf(total_send+1 : total_send+total_recv) = recv area + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + ! Gather send data into contiguous send buffer (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + ! Wait for device (important for GPU subclasses) + call y%device_wait() + + ! Post non-blocking neighborhood alltoallv + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & ! send buffer + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_send + 1), & ! recv buffer + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if ! do_start + + ! --------------------------------------------------------- + ! WAIT phase: complete MPI, scatter received data + ! --------------------------------------------------------- + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + ! No matching start? Something is wrong + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + ! Wait for the non-blocking collective to complete + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + ! Scatter received data to local vector positions (polymorphic for GPU) + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + + ! Clean up + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if ! do_wait + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return +end subroutine psi_iswap_neighbor_topology_multivect + + + + + end submodule psi_i_swapdata_impl diff --git a/base/comm/internals/psi_iswaptran.F90 b/base/comm/internals/psi_iswaptran.F90 index 0454bc1e..2e540bb3 100644 --- a/base/comm/internals/psi_iswaptran.F90 +++ b/base/comm/internals/psi_iswaptran.F90 @@ -80,7 +80,6 @@ ! beta - integer Choose overwrite or sum. ! y - type(psb_i_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -90,7 +89,7 @@ ! psb_comm_mov_ use ovr_mst_idx ! ! -submodule (psi_i_comm_v_mod) psi_i_swaptran_impl +submodule (psi_i_comm_v_mod) psi_i_swaptran_impl use psb_base_mod contains module subroutine psi_iswaptran_vect(flag,beta,y,desc_a,info,data) @@ -103,19 +102,21 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + character(len=20) :: name info = psb_success_ name = 'psi_iswaptran_vect' @@ -142,14 +143,33 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + ! choose baseline or neighbor-topology algorithm + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start= iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if (baseline) then + call psi_itran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else if (neighbor_a2av) then + call psi_itran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else + call psb_errpush(psb_err_mpi_error_,name,a_err='Incompatible flag settings') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -172,8 +192,8 @@ contains ! ! ! - module subroutine psi_itran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + subroutine psi_itran_baseline_vect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -183,13 +203,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -203,12 +223,12 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_itran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -222,10 +242,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + totrcv_ = total_recv * n + totsnd_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -240,17 +260,17 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -270,14 +290,14 @@ contains ! pnti = 1 snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) + call y%gth(idx_pt,nerv,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -296,10 +316,10 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -329,15 +349,15 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -373,17 +393,17 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) + call y%sct(snd_pt,nesd,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do ! @@ -414,19 +434,149 @@ contains return - end subroutine psi_itran_vidx_vect + end subroutine psi_itran_baseline_vect + + + subroutine psi_itran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_itran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran: gathering send data,', topology_total_send,' elems' + ! For tran we gather from recv_indexes (swap of roles) + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran: scattering recv data,', topology_total_recv,' elems' + ! For tran we scatter into send_indexes (swap of roles) + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran: done' + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_itran_neighbor_topology_vect + - ! - ! - ! - ! - ! Subroutine: psi_iswaptran_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encaspulated multivector. - ! - ! module subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD @@ -437,22 +587,27 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name - info=psb_success_ - name='psi_swap_tranv' + ! local variables for communication + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_iswaptran_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -476,14 +631,32 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start= iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if (baseline) then + call psi_itran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else if (neighbor_a2av) then + call psi_itran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else + call psb_errpush(psb_err_mpi_error_,name,a_err='Incompatible flag settings') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -494,21 +667,8 @@ contains end subroutine psi_iswaptran_multivect - ! - ! - ! Subroutine: psi_itran_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_itran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + module subroutine psi_itran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -518,13 +678,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -538,12 +698,12 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_itran_baseline_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -558,10 +718,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + totrcv_ = total_recv * n + totsnd_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -576,19 +736,19 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt @@ -608,11 +768,11 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) + call y%gth(idx_pt,rcv_pt,nerv,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -632,10 +792,10 @@ contains snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then @@ -665,17 +825,17 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_int_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -710,15 +870,15 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) + call y%sct(idx_pt,snd_pt,nesd,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -753,6 +913,145 @@ contains return - end subroutine psi_itran_vidx_multivect + end subroutine psi_itran_baseline_multivect + + + subroutine psi_itran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_itran_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_mv: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_mv: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_mv: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_mv: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_dpk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_mv: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_mv: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_mv: done' + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_itran_neighbor_topology_multivect + end submodule psi_i_swaptran_impl diff --git a/base/comm/internals/psi_lswapdata.F90 b/base/comm/internals/psi_lswapdata.F90 index 46b607df..11327e34 100644 --- a/base/comm/internals/psi_lswapdata.F90 +++ b/base/comm/internals/psi_lswapdata.F90 @@ -87,7 +87,7 @@ ! ! ! -submodule (psi_l_comm_v_mod) psi_l_swapdata_impl +submodule (psi_l_comm_v_mod) psi_l_swapdata_impl use psb_base_mod contains subroutine psi_lswapdata_vect(flag,beta,y,desc_a,info,data) @@ -100,22 +100,30 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_datav' + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! Decide which communication scheme to use: baseline (point-to-point / alltoallv) + ! or neighbor alltoallv topology (MPI >= 3.0). Follow conventions used in other + ! swapdata implementations: baseline when any of swap_mpi/swap_sync/swap_send/swap_recv + ! is set; neighbor topology when swap_start or swap_wait is set. + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + + info = psb_success_ + name = 'psi_lswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -139,14 +147,40 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_lswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else if (neighbor_a2av) then + call psi_lswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -157,21 +191,8 @@ contains end subroutine psi_lswapdata_vect - ! - ! - ! Subroutine: psi_lswap_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an exanspulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_lswap_vidx_vect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) + subroutine psi_lswap_baseline_vect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -181,13 +202,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me @@ -202,8 +223,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_lswap_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -221,9 +242,9 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n - call idx%sync() + totrcv_ = total_recv * n + totsnd_ = total_send * n + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -238,16 +259,16 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) rcv_pt = 1+pnti+psb_n_elem_recv_ prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) @@ -265,13 +286,13 @@ contains ! Then gather for sending. ! pnti = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = snd_pt - call y%gth(idx_pt,nesd,idx) + call y%gth(idx_pt,nesd,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -289,10 +310,10 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -322,15 +343,15 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -366,17 +387,17 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+nerv-1) - call y%sct(rcv_pt,nerv,idx,beta) + call y%sct(rcv_pt,nerv,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do ! @@ -406,7 +427,7 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_lswap_vidx_vect + end subroutine psi_lswap_baseline_vect ! ! @@ -425,22 +446,27 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name - info=psb_success_ - name='psi_swap_datav' + ! Decide which communication scheme to use: baseline (point-to-point / alltoallv) + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + + info = psb_success_ + name = 'psi_lswapdata_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -464,14 +490,39 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_lswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else if (neighbor_a2av) then + call psi_lswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -482,21 +533,8 @@ contains end subroutine psi_lswapdata_multivect - ! - ! - ! Subroutine: psi_lswap_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_lswap_vidx_multivect(ctxt,flag,beta,y,idx, & - & totxch,totsnd,totrcv,info) + subroutine psi_lswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -509,10 +547,10 @@ contains type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + class(psb_l_base_multivect_type), intent(inout) :: y + integer(psb_lpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -546,10 +584,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + totrcv_ = total_recv * n + totsnd_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -564,18 +602,18 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nerv>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),rcv_pt @@ -595,11 +633,11 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ - call y%gth(idx_pt,snd_pt,nesd,idx) + call y%gth(idx_pt,snd_pt,nesd,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -619,10 +657,10 @@ contains snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if ((nesd>0).and.(proc_to_comm /= me)) then call mpi_isend(y%combuf(snd_pt),n*nesd,& @@ -651,17 +689,17 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nesd>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -696,15 +734,15 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(rcv_pt:rcv_pt+n*nerv-1) - call y%sct(idx_pt,rcv_pt,nerv,idx,beta) + call y%sct(idx_pt,rcv_pt,nerv,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -736,6 +774,281 @@ contains 9999 call psb_error_handler(ctxt,err_act) return - end subroutine psi_lswap_vidx_multivect + end subroutine psi_lswap_baseline_multivect + + subroutine psi_lswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_lswap_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_swap: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_swap: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_swap: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_swap: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_lpk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_lpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_swap: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_swap: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_swap: done' + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_lswap_neighbor_topology_vect + + + subroutine psi_lswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type), intent(inout) :: y + integer(psb_lpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_lswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_mv: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_mv: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_mv: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_mv: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_lpk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_lpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_mv: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_mv: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_mv: done' + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_lswap_neighbor_topology_multivect end submodule psi_l_swapdata_impl diff --git a/base/comm/internals/psi_lswaptran.F90 b/base/comm/internals/psi_lswaptran.F90 index ff7d3400..8dc03239 100644 --- a/base/comm/internals/psi_lswaptran.F90 +++ b/base/comm/internals/psi_lswaptran.F90 @@ -102,22 +102,26 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name - info=psb_success_ - name='psi_swap_tranv' + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + + info = psb_success_ + name = 'psi_lswaptran_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -130,7 +134,7 @@ contains endif if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ + info = psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 endif @@ -141,14 +145,39 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_ltran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else if (neighbor_a2av) then + call psi_ltran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -158,21 +187,9 @@ contains return end subroutine psi_lswaptran_vect - ! - ! - ! Subroutine: psi_ltran_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_ltran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + + subroutine psi_ltran_baseline_vect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -182,32 +199,32 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_ltran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then - info=psb_err_context_error_ + info = psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif @@ -221,10 +238,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -239,17 +256,17 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -269,14 +286,14 @@ contains ! pnti = 1 snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) + call y%gth(idx_pt,nerv,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -295,10 +312,10 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -328,15 +345,15 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -372,17 +389,17 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) + call y%sct(snd_pt,nesd,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do ! @@ -413,21 +430,10 @@ contains return - end subroutine psi_ltran_vidx_vect - + end subroutine psi_ltran_baseline_vect - ! - ! - ! - ! - ! Subroutine: psi_lswaptran_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encaspulated multivector. - ! - ! - module subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,info,data) + subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi #endif @@ -436,22 +442,25 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name - info=psb_success_ - name='psi_swap_tranv' + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_lswaptran_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -475,14 +484,39 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_ltran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else if (neighbor_a2av) then + call psi_ltran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) goto 9999 + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -493,21 +527,8 @@ contains end subroutine psi_lswaptran_multivect - ! - ! - ! Subroutine: psi_ltran_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_ltran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + subroutine psi_ltran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -517,28 +538,28 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_ltran_baseline_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -557,10 +578,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -575,19 +596,19 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt @@ -605,13 +626,13 @@ contains ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) + call y%gth(idx_pt,rcv_pt,nerv,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -628,13 +649,13 @@ contains ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then @@ -664,17 +685,17 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_long_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -707,17 +728,17 @@ contains if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) + call y%sct(idx_pt,snd_pt,nesd,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -752,6 +773,282 @@ contains return - end subroutine psi_ltran_vidx_multivect + end subroutine psi_ltran_baseline_multivect + + + subroutine psi_ltran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_vect_type) :: y + integer(psb_lpk_) :: beta + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_ltran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_lpk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_lpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran: done' + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_ltran_neighbor_topology_vect + + + subroutine psi_ltran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_l_base_multivect_type) :: y + integer(psb_lpk_) :: beta + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + info = psb_success_ + name = 'psi_ltran_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_mv: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_mv: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_mv: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_mv: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_lpk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_lpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_mv: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_mv: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_mv: done' + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_ltran_neighbor_topology_multivect end submodule psi_l_swaptran_impl diff --git a/base/comm/internals/psi_sswapdata.F90 b/base/comm/internals/psi_sswapdata.F90 index 87bc2718..c023724a 100644 --- a/base/comm/internals/psi_sswapdata.F90 +++ b/base/comm/internals/psi_sswapdata.F90 @@ -103,26 +103,26 @@ contains #endif integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_s_base_vect_type), intent(inout) :: y real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act - class(psb_i_base_vect_type), pointer :: comm_indexes + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes ! local variables used to detect the communication scheme - logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait - logical :: baseline, neighbor_a2av + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av ! error handling variables - integer(psb_ipk_) :: err_act - integer(psb_mpk_) :: me, np - character(len=30) :: name + integer(psb_ipk_) :: err_act + integer(psb_mpk_) :: me, np + character(len=30) :: name info = psb_success_ diff --git a/base/comm/internals/psi_sswaptran.F90 b/base/comm/internals/psi_sswaptran.F90 index 8d739dcb..452e3192 100644 --- a/base/comm/internals/psi_sswaptran.F90 +++ b/base/comm/internals/psi_sswaptran.F90 @@ -80,7 +80,6 @@ ! beta - real Choose overwrite or sum. ! y - type(psb_s_vect_type) The data area ! desc_a - type(psb_desc_type). The communication descriptor. -! our own internal allocation. ! info - integer. return code. ! data - integer which list is to be used to exchange data ! default psb_comm_halo_ @@ -111,11 +110,15 @@ contains integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av info = psb_success_ name = 'psi_sswaptran_vect' @@ -131,7 +134,7 @@ contains endif if (.not.psb_is_asb_desc(desc_a)) then - info=psb_err_invalid_cd_state_ + info = psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 endif @@ -142,14 +145,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_stran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_stran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -159,21 +193,9 @@ contains return end subroutine psi_sswaptran_vect - ! - ! - ! Subroutine: psi_stran_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_stran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + + module subroutine psi_stran_baseline_vect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -185,18 +207,18 @@ contains type(psb_ctxt_type), intent(in) :: ctxt integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info + real(psb_spk_), intent(in) :: beta class(psb_s_base_vect_type), intent(inout) :: y - real(psb_spk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -204,7 +226,7 @@ contains character(len=20) :: name info=psb_success_ - name='psi_swap_tran' + name='psi_stran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -222,10 +244,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -240,17 +262,17 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -270,14 +292,14 @@ contains ! pnti = 1 snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) + call y%gth(idx_pt,nerv,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -296,10 +318,10 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -329,15 +351,15 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -373,17 +395,17 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) + call y%sct(snd_pt,nesd,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do ! @@ -414,7 +436,155 @@ contains return - end subroutine psi_stran_vidx_vect + end subroutine psi_stran_baseline_vect + + + + subroutine psi_stran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_spk_), intent(in) :: beta + class(psb_s_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_stran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_spk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_stran_neighbor_topology_vect + + + + + + ! @@ -445,11 +615,15 @@ contains integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av info = psb_success_ name = 'psi_sswaptran_multivect' @@ -476,14 +650,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_stran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_stran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -494,21 +699,8 @@ contains end subroutine psi_sswaptran_multivect - ! - ! - ! Subroutine: psi_stran_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_stran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + subroutine psi_stran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -522,8 +714,8 @@ contains integer(psb_ipk_), intent(in) :: flag real(psb_spk_), intent(in) :: beta class(psb_s_base_multivect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd,totrcv + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv integer(psb_ipk_), intent(out) :: info @@ -532,7 +724,7 @@ contains integer(psb_mpk_) :: proc_to_comm, p2ptag, p2pstat(mpi_status_size), iret integer(psb_mpk_) :: icomm integer(psb_mpk_), allocatable :: prcid(:) - integer(psb_ipk_) :: err_act, i, idx_pt, totsnd_, totrcv_,& + integer(psb_ipk_) :: err_act, i, idx_pt, total_send_, total_recv_,& & snd_pt, rcv_pt, pnti logical :: swap_mpi, swap_sync, swap_send, swap_recv,& & albf,do_send,do_recv @@ -559,10 +751,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + total_recv_ = total_recv * n + total_send_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -577,19 +769,19 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt @@ -607,13 +799,13 @@ contains ! Then gather for sending. ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) + call y%gth(idx_pt,rcv_pt,nerv,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -630,13 +822,13 @@ contains ! pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then @@ -666,17 +858,17 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 p2ptag = psb_real_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -709,17 +901,17 @@ contains if (debug) write(*,*) me,' scatter' pnti = 1 - snd_pt = totrcv_+1 + snd_pt = total_recv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) + call y%sct(idx_pt,snd_pt,nesd,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -754,6 +946,150 @@ contains return - end subroutine psi_stran_vidx_multivect + end subroutine psi_stran_baseline_multivect + + + + subroutine psi_stran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + real(psb_spk_), intent(in) :: beta + class(psb_s_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_stran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_r_spk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_r_spk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_stran_neighbor_topology_multivect + + end submodule psi_s_swaptran_impl diff --git a/base/comm/internals/psi_zswapdata.F90 b/base/comm/internals/psi_zswapdata.F90 index e525a45d..601bc391 100644 --- a/base/comm/internals/psi_zswapdata.F90 +++ b/base/comm/internals/psi_zswapdata.F90 @@ -88,9 +88,10 @@ ! ! submodule (psi_z_comm_v_mod) psi_z_swapdata_impl + use psb_desc_const_mod, only: psb_swap_start_, psb_swap_wait_ use psb_base_mod contains - subroutine psi_zswapdata_vect(flag,beta,y,desc_a,info,data) + module subroutine psi_zswapdata_vect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD use mpi @@ -100,34 +101,37 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + class(psb_z_base_vect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name - info=psb_success_ - name='psi_swap_datav' + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_zswapdata_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then + if (.not.psb_is_asb_desc(desc_a)) then info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 @@ -139,14 +143,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_zswap_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_zswap_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -157,6 +192,163 @@ contains end subroutine psi_zswapdata_vect + subroutine psi_zswap_baseline_vect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + implicit none + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + call psi_zswap_vidx_vect(ctxt,flag,beta,y,idx,num_neighbors,total_send,total_recv,info) + end subroutine psi_zswap_baseline_vect + + + subroutine psi_zswap_neighbor_topology_vect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_vect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_zswap_nbr_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_dpk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_zswap_neighbor_topology_vect + + ! ! ! Subroutine: psi_zswap_vidx_vect @@ -425,34 +617,36 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + class(psb_z_base_multivect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, data_, err_act - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, data_, err_act + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=30) :: name - info=psb_success_ - name='psi_swap_datav' + info = psb_success_ + name = 'psi_zswapdata_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() - icomm = ctxt%get_mpic() - call psb_info(ctxt,me,np) + call psb_info(ctxt,me,np) if (np == -1) then info=psb_err_context_error_ call psb_errpush(info,name) goto 9999 endif - if (.not.psb_is_asb_desc(desc_a)) then + if (.not.psb_is_asb_desc(desc_a)) then info=psb_err_invalid_cd_state_ call psb_errpush(info,name) goto 9999 @@ -464,14 +658,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) - if (info /= psb_success_) then - call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_,name,a_err='desc_a%get_list_p') goto 9999 end if - call psi_swapdata(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info=psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_zswap_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_zswap_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -482,6 +707,163 @@ contains end subroutine psi_zswapdata_multivect + subroutine psi_zswap_baseline_multivect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + implicit none + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + call psi_zswap_vidx_multivect(ctxt,flag,beta,y,idx,num_neighbors,total_send,total_recv,info) + end subroutine psi_zswap_baseline_multivect + + + subroutine psi_zswap_neighbor_topology_multivect(ctxt,flag,beta,y,idx, & + & num_neighbors,total_send,total_recv,info) + +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(out) :: info + class(psb_z_base_multivect_type), intent(inout) :: y + complex(psb_dpk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: idx + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + + ! locals + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_zswap_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call idx%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_vect: building topology' + call y%neighbor_topology%init(idx%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_vect: gathering send data,', topology_total_send,' elems' + call y%gth(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(1:topology_total_send)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_vect: posting MPI_Ineighbor_alltoallv' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_dpk_, & + & y%combuf(topology_total_send + 1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_vect: scattering recv data,', topology_total_recv,' elems' + call y%sct(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(topology_total_send+1:topology_total_send+topology_total_recv), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_zswap_neighbor_topology_multivect + + ! ! ! Subroutine: psi_zswap_vidx_multivect diff --git a/base/comm/internals/psi_zswaptran.F90 b/base/comm/internals/psi_zswaptran.F90 index 7011cf39..308d19be 100644 --- a/base/comm/internals/psi_zswaptran.F90 +++ b/base/comm/internals/psi_zswaptran.F90 @@ -102,22 +102,27 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av - info=psb_success_ - name='psi_swap_tranv' + + info = psb_success_ + name = 'psi_zswaptran_vect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -141,14 +146,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_ztran_baseline_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_ztran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if call psb_erractionrestore(err_act) return @@ -158,21 +194,8 @@ contains return end subroutine psi_zswaptran_vect - ! - ! - ! Subroutine: psi_ztran_vidx_vect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated vector. Relies on the gather/scatter methods - ! of vectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_ztran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + subroutine psi_ztran_baseline_vect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -182,13 +205,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -202,8 +225,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_ztran_baseline_vect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -221,10 +244,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + totrcv_ = total_recv * n + totsnd_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -239,17 +262,17 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -269,14 +292,14 @@ contains ! pnti = 1 snd_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ idx_pt = rcv_pt - call y%gth(idx_pt,nerv,idx) + call y%gth(idx_pt,nerv,comm_indexes) pnti = pnti + nerv + nesd + 3 end do @@ -295,10 +318,10 @@ contains snd_pt = 1 rcv_pt = 1 p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -328,15 +351,15 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ @@ -372,17 +395,17 @@ contains pnti = 1 snd_pt = 1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ snd_pt = 1+pnti+nerv+psb_n_elem_send_ rcv_pt = 1+pnti+psb_n_elem_recv_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+nesd-1) - call y%sct(snd_pt,nesd,idx,beta) + call y%sct(snd_pt,nesd,comm_indexes,beta) pnti = pnti + nerv + nesd + 3 end do ! @@ -413,19 +436,151 @@ contains return - end subroutine psi_ztran_vidx_vect + end subroutine psi_ztran_baseline_vect + + + subroutine psi_ztran_neighbor_topology_vect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_ztran_neighbor_topology_vect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_dpk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_ztran_neighbor_topology_vect + - ! - ! - ! - ! - ! Subroutine: psi_zswaptran_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encaspulated multivector. - ! - ! module subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,info,data) #ifdef PSB_MPI_MOD @@ -436,22 +591,26 @@ contains include 'mpif.h' #endif - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type),target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + type(psb_desc_type),target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data ! locals - type(psb_ctxt_type) :: ctxt - integer(psb_mpk_) :: icomm - integer(psb_ipk_) :: np, me, idxs, idxr, totxch, err_act, data_ - class(psb_i_base_vect_type), pointer :: d_vidx - character(len=20) :: name - - info=psb_success_ - name='psi_swap_tranv' + type(psb_ctxt_type) :: ctxt + integer(psb_mpk_) :: icomm + integer(psb_ipk_) :: np, me, total_send, total_recv, num_neighbors, err_act, data_ + class(psb_i_base_vect_type), pointer :: comm_indexes + character(len=20) :: name + + ! local variables used to detect the communication scheme + logical :: swap_mpi, swap_sync, swap_send, swap_recv, swap_start, swap_wait + logical :: baseline, neighbor_a2av + + info = psb_success_ + name = 'psi_zswaptran_multivect' call psb_erractionsave(err_act) ctxt = desc_a%get_context() @@ -475,14 +634,45 @@ contains data_ = psb_comm_halo_ end if - call desc_a%get_list_p(data_,d_vidx,totxch,idxr,idxs,info) + call desc_a%get_list_p(data_,comm_indexes,num_neighbors,total_recv,total_send,info) if (info /= psb_success_) then call psb_errpush(psb_err_internal_error_,name,a_err='psb_cd_get_list') goto 9999 end if + swap_mpi = iand(flag,psb_swap_mpi_) /= 0 + swap_sync = iand(flag,psb_swap_sync_) /= 0 + swap_send = iand(flag,psb_swap_send_) /= 0 + swap_recv = iand(flag,psb_swap_recv_) /= 0 + swap_start = iand(flag,psb_swap_start_) /= 0 + swap_wait = iand(flag,psb_swap_wait_) /= 0 + + baseline = swap_mpi .or. swap_send .or. swap_recv .or. swap_sync + neighbor_a2av = swap_start .or. swap_wait + + if( (baseline.eqv..true.).and.(neighbor_a2av.eqv..true.) ) then + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: both baseline and neighbor_a2av are true') + goto 9999 + end if + + if (baseline) then + call psi_ztran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='baseline swap') + goto 9999 + end if + else if (neighbor_a2av) then + call psi_ztran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes,num_neighbors,total_send,total_recv,info) + if (info /= psb_success_) then + call psb_errpush(info,name,a_err='neighbor a2av swap') + goto 9999 + end if + else + info = psb_err_mpi_error_ + call psb_errpush(info,name,a_err='Incompatible flag settings: neither baseline nor neighbor_a2av is true') + goto 9999 + end if - call psi_swaptran(ctxt,flag,beta,y,d_vidx,totxch,idxs,idxr,info) - if (info /= psb_success_) goto 9999 call psb_erractionrestore(err_act) return @@ -493,21 +683,8 @@ contains end subroutine psi_zswaptran_multivect - ! - ! - ! Subroutine: psi_ztran_vidx_multivect - ! Data exchange among processes. - ! - ! Takes care of Y an encapsulated multivector. Relies on the gather/scatter methods - ! of multivectors. - ! - ! The real workhorse: the outer routine will only choose the index list - ! this one takes the index list and does the actual exchange. - ! - ! - ! - module subroutine psi_ztran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) + module subroutine psi_ztran_baseline_multivect(ctxt,flag,beta,y,comm_indexes,& + & num_neighbors,total_send,total_recv,info) #ifdef PSB_MPI_MOD use mpi @@ -517,13 +694,13 @@ contains include 'mpif.h' #endif - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send, total_recv + integer(psb_ipk_), intent(out) :: info ! locals integer(psb_mpk_) :: np, me, nesd, nerv, n @@ -537,8 +714,8 @@ contains logical, parameter :: usersend=.false., debug=.false. character(len=20) :: name - info=psb_success_ - name='psi_swap_tran' + info = psb_success_ + name = 'psi_ztran_baseline_multivect' call psb_erractionsave(err_act) call psb_info(ctxt,me,np) if (np == -1) then @@ -557,10 +734,10 @@ contains do_send = swap_mpi .or. swap_sync .or. swap_send do_recv = swap_mpi .or. swap_sync .or. swap_recv - totrcv_ = totrcv * n - totsnd_ = totsnd * n + totrcv_ = total_recv * n + totsnd_ = total_send * n - call idx%sync() + call comm_indexes%sync() if (debug) write(*,*) me,'Internal buffer' if (do_send) then @@ -575,19 +752,19 @@ contains end if end if if (debug) write(*,*) me,'do_send start' - call y%new_buffer(ione*size(idx%v),info) - call y%new_comid(totxch,info) + call y%new_buffer(ione*size(comm_indexes%v),info) + call y%new_comid(num_neighbors,info) y%comid = mpi_request_null - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) ! First I post all the non blocking receives pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) prcid(i) = psb_get_mpi_rank(ctxt,proc_to_comm) if ((nesd>0).and.(proc_to_comm /= me)) then if (debug) write(*,*) me,'Posting receive from',prcid(i),snd_pt @@ -607,11 +784,11 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ - call y%gth(idx_pt,rcv_pt,nerv,idx) + call y%gth(idx_pt,rcv_pt,nerv,comm_indexes) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -631,10 +808,10 @@ contains snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+psb_n_elem_recv_ if ((nerv>0).and.(proc_to_comm /= me)) then @@ -664,17 +841,17 @@ contains call psb_errpush(info,name,m_err=(/-2/)) goto 9999 end if - call psb_realloc(totxch,prcid,info) + call psb_realloc(num_neighbors,prcid,info) if (debug) write(*,*) me,' wait' pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 p2ptag = psb_dcomplex_swap_tag - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) if (proc_to_comm /= me)then if (nerv>0) then call mpi_wait(y%comid(i,1),p2pstat,iret) @@ -709,15 +886,15 @@ contains pnti = 1 snd_pt = totrcv_+1 rcv_pt = 1 - do i=1, totxch - proc_to_comm = idx%v(pnti+psb_proc_id_) - nerv = idx%v(pnti+psb_n_elem_recv_) - nesd = idx%v(pnti+nerv+psb_n_elem_send_) + do i=1, num_neighbors + proc_to_comm = comm_indexes%v(pnti+psb_proc_id_) + nerv = comm_indexes%v(pnti+psb_n_elem_recv_) + nesd = comm_indexes%v(pnti+nerv+psb_n_elem_send_) idx_pt = 1+pnti+nerv+psb_n_elem_send_ if (debug) write(0,*)me,' Received from: ',prcid(i),& & y%combuf(snd_pt:snd_pt+n*nesd-1) - call y%sct(idx_pt,snd_pt,nesd,idx,beta) + call y%sct(idx_pt,snd_pt,nesd,comm_indexes,beta) rcv_pt = rcv_pt + n*nerv snd_pt = snd_pt + n*nesd pnti = pnti + nerv + nesd + 3 @@ -752,6 +929,149 @@ contains return - end subroutine psi_ztran_vidx_multivect + end subroutine psi_ztran_baseline_multivect + + + + + subroutine psi_ztran_neighbor_topology_multivect(ctxt,flag,beta,y,comm_indexes, & + & num_neighbors,total_send,total_recv,info) +#ifdef PSB_MPI_MOD + use mpi +#endif + implicit none +#ifdef PSB_MPI_H + include 'mpif.h' +#endif + + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + class(psb_i_base_vect_type), intent(inout) :: comm_indexes + integer(psb_ipk_), intent(in) :: num_neighbors,total_send,total_recv + integer(psb_ipk_), intent(out) :: info + + ! locals + integer(psb_mpk_) :: icomm + integer(psb_mpk_) :: np, me + integer(psb_mpk_) :: iret, p2pstat(mpi_status_size) + integer(psb_ipk_) :: err_act, topology_total_send, topology_total_recv, buffer_size + logical :: do_start, do_wait + logical, parameter :: debug = .false. + character(len=30) :: name + + + info = psb_success_ + name = 'psi_ztran_neighbor_topology_multivect' + call psb_erractionsave(err_act) + call psb_info(ctxt,me,np) + if (np == -1) then + info=psb_err_context_error_ + call psb_errpush(info,name) + goto 9999 + endif + + icomm = ctxt%get_mpic() + + do_start = iand(flag,psb_swap_start_) /= 0 + do_wait = iand(flag,psb_swap_wait_) /= 0 + + call comm_indexes%sync() + + if (do_start) then + if(debug) write(*,*) me,' nbr_tran_vect: starting data exchange' + if (.not. y%neighbor_topology%is_initialized) then + if (debug) write(*,*) me,' nbr_tran_vect: building topology' + call y%neighbor_topology%init(comm_indexes%v, num_neighbors, total_send, total_recv, & + & ctxt, icomm, info) + if (info /= psb_success_) then + call psb_errpush(psb_err_internal_error_, name, & + & a_err='neighbor_topology_init') + goto 9999 + end if + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + buffer_size = topology_total_send + topology_total_recv + + call y%new_buffer(buffer_size, info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + y%communication_handle = mpi_request_null + + if (debug) write(*,*) me,' nbr_tran_vect: gathering (recv) data,', topology_total_recv,' elems' + call y%gth(int(topology_total_recv,psb_mpk_), & + & y%neighbor_topology%recv_indexes, & + & y%combuf(1:topology_total_recv)) + + call y%device_wait() + + if (debug) write(*,*) me,' nbr_tran_vect: posting MPI_Ineighbor_alltoallv (swapped)' + call mpi_ineighbor_alltoallv( & + & y%combuf(1), & + & y%neighbor_topology%recv_counts, & + & y%neighbor_topology%recv_displs, & + & psb_mpi_c_dpk_, & + & y%combuf(topology_total_recv + 1), & + & y%neighbor_topology%send_counts, & + & y%neighbor_topology%send_displs, & + & psb_mpi_c_dpk_, & + & y%neighbor_topology%graph_comm, & + & y%communication_handle, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + end if + + if (do_wait) then + + if (y%communication_handle == mpi_request_null) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/-2/)) + goto 9999 + end if + + topology_total_send = y%neighbor_topology%total_send + topology_total_recv = y%neighbor_topology%total_recv + + if (debug) write(*,*) me,' nbr_tran_vect: waiting on MPI request' + call mpi_wait(y%communication_handle, p2pstat, iret) + if (iret /= mpi_success) then + info = psb_err_mpi_error_ + call psb_errpush(info, name, m_err=(/iret/)) + goto 9999 + end if + + if (debug) write(*,*) me,' nbr_tran_vect: scattering (send) data,', topology_total_send,' elems' + call y%sct(int(topology_total_send,psb_mpk_), & + & y%neighbor_topology%send_indexes, & + & y%combuf(topology_total_recv+1:topology_total_recv+topology_total_send), & + & beta) + + y%communication_handle = mpi_request_null + call y%device_wait() + call y%maybe_free_buffer(info) + if (info /= 0) then + call psb_errpush(psb_err_alloc_dealloc_, name) + goto 9999 + end if + if (debug) write(*,*) me,' nbr_tran_vect: done' + + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(ctxt,err_act) + + return + end subroutine psi_ztran_neighbor_topology_multivect end submodule psi_z_swaptran_impl diff --git a/base/modules/Makefile b/base/modules/Makefile index 0f2ff5bb..3fd14a42 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -264,7 +264,7 @@ serial/psb_c_base_mat_mod.o: serial/psb_c_base_vect_mod.o serial/psb_z_base_mat_mod.o: serial/psb_z_base_vect_mod.o serial/psb_l_base_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_z_base_vect_mod.o: serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o comm/psb_neighbor_topology_mod.o -serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_z_base_vect_mod.o: auxil/psi_serial_mod.o psb_realloc_mod.o +serial/psb_i_base_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_z_base_vect_mod.o: auxil/psi_serial_mod.o psb_realloc_mod.o comm/psb_neighbor_topology_mod.o serial/psb_s_mat_mod.o: serial/psb_s_base_mat_mod.o serial/psb_s_csr_mat_mod.o serial/psb_s_csc_mat_mod.o serial/psb_s_vect_mod.o \ serial/psb_i_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_mat_mod.o: serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_vect_mod.o \ diff --git a/base/modules/comm/psi_c_comm_v_mod.f90 b/base/modules/comm/psi_c_comm_v_mod.f90 index f6e7f3d0..9c573e7c 100644 --- a/base/modules/comm/psi_c_comm_v_mod.f90 +++ b/base/modules/comm/psi_c_comm_v_mod.f90 @@ -37,81 +37,41 @@ module psi_c_comm_v_mod interface psi_swapdata module subroutine psi_cswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_cswapdata_vect module subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + class(psb_c_base_multivect_type), intent(inout) :: y + complex(psb_spk_), intent(in) :: beta + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_cswapdata_multivect - module subroutine psi_cswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_cswap_vidx_vect - module subroutine psi_cswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_cswap_vidx_multivect end interface psi_swapdata interface psi_swaptran module subroutine psi_cswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_cswaptran_vect module subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_spk_), intent(in) :: beta + class(psb_c_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_cswaptran_multivect - module subroutine psi_ctran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_vect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_ctran_vidx_vect - module subroutine psi_ctran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_c_base_multivect_type) :: y - complex(psb_spk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_ctran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd diff --git a/base/modules/comm/psi_d_comm_v_mod.f90 b/base/modules/comm/psi_d_comm_v_mod.f90 index e22ed0f5..19380e28 100644 --- a/base/modules/comm/psi_d_comm_v_mod.f90 +++ b/base/modules/comm/psi_d_comm_v_mod.f90 @@ -61,7 +61,9 @@ module psi_d_comm_v_mod interface psi_swaptran ! --------------------------------------------------------------- - ! Upper call in order to populate idx using desc_a%get_list_p + ! Upper call in order to populate idx using desc_a%get_list_p + ! and then call different communications schemes depending + ! on flag variable ! --------------------------------------------------------------- module subroutine psi_dswaptran_vect(flag,beta,y,desc_a,info,data) integer(psb_ipk_), intent(in) :: flag @@ -79,33 +81,6 @@ module psi_d_comm_v_mod integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional :: data end subroutine psi_dswaptran_multivect - - ! --------------------------------------------------------------- - - ! --------------------------------------------------------------- - ! Wrapper that calls different communications schemes depending on - ! flag variable - ! --------------------------------------------------------------- - module subroutine psi_dtran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_vect_type), intent(inout) :: y - real(psb_dpk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_dtran_vidx_vect - module subroutine psi_dtran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_d_base_multivect_type), intent(inout) :: y - real(psb_dpk_), intent(in) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_dtran_vidx_multivect ! --------------------------------------------------------------- end interface psi_swaptran diff --git a/base/modules/comm/psi_i_comm_v_mod.f90 b/base/modules/comm/psi_i_comm_v_mod.f90 index 6db43c15..b729ece6 100644 --- a/base/modules/comm/psi_i_comm_v_mod.f90 +++ b/base/modules/comm/psi_i_comm_v_mod.f90 @@ -38,81 +38,41 @@ module psi_i_comm_v_mod interface psi_swapdata module subroutine psi_iswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_iswapdata_vect module subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_iswapdata_multivect - module subroutine psi_iswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_iswap_vidx_vect - module subroutine psi_iswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_iswap_vidx_multivect end interface psi_swapdata interface psi_swaptran module subroutine psi_iswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_iswaptran_vect module subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_ipk_), intent(in) :: beta + class(psb_i_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_iswaptran_multivect - module subroutine psi_itran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_vect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_itran_vidx_vect - module subroutine psi_itran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_i_base_multivect_type) :: y - integer(psb_ipk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_itran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd diff --git a/base/modules/comm/psi_l_comm_v_mod.f90 b/base/modules/comm/psi_l_comm_v_mod.f90 index 3d30ba41..bcc33a2c 100644 --- a/base/modules/comm/psi_l_comm_v_mod.f90 +++ b/base/modules/comm/psi_l_comm_v_mod.f90 @@ -39,81 +39,41 @@ module psi_l_comm_v_mod interface psi_swapdata module subroutine psi_lswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_lswapdata_vect module subroutine psi_lswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_lswapdata_multivect - module subroutine psi_lswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_lswap_vidx_vect - module subroutine psi_lswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_lswap_vidx_multivect end interface psi_swapdata interface psi_swaptran module subroutine psi_lswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_lswaptran_vect module subroutine psi_lswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + integer(psb_lpk_), intent(in) :: beta + class(psb_l_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_lswaptran_multivect - module subroutine psi_ltran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_vect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_ltran_vidx_vect - module subroutine psi_ltran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_l_base_multivect_type) :: y - integer(psb_lpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_ltran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd diff --git a/base/modules/comm/psi_s_comm_v_mod.f90 b/base/modules/comm/psi_s_comm_v_mod.f90 index 7becf153..65cb904f 100644 --- a/base/modules/comm/psi_s_comm_v_mod.f90 +++ b/base/modules/comm/psi_s_comm_v_mod.f90 @@ -73,26 +73,6 @@ module psi_s_comm_v_mod integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), optional :: data end subroutine psi_sswaptran_multivect - module subroutine psi_stran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - real(psb_spk_), intent(in) :: beta - class(psb_s_base_vect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - integer(psb_ipk_), intent(out) :: info - end subroutine psi_stran_vidx_vect - module subroutine psi_stran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - real(psb_spk_), intent(in) :: beta - class(psb_s_base_multivect_type), intent(inout) :: y - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - integer(psb_ipk_), intent(out) :: info - end subroutine psi_stran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd diff --git a/base/modules/comm/psi_z_comm_v_mod.f90 b/base/modules/comm/psi_z_comm_v_mod.f90 index 2421c59d..745d4531 100644 --- a/base/modules/comm/psi_z_comm_v_mod.f90 +++ b/base/modules/comm/psi_z_comm_v_mod.f90 @@ -37,81 +37,41 @@ module psi_z_comm_v_mod interface psi_swapdata module subroutine psi_zswapdata_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_zswapdata_vect module subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_zswapdata_multivect - module subroutine psi_zswap_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_zswap_vidx_vect - module subroutine psi_zswap_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_zswap_vidx_multivect end interface psi_swapdata interface psi_swaptran module subroutine psi_zswaptran_vect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_vect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_zswaptran_vect module subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,info,data) - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - type(psb_desc_type), target :: desc_a - integer(psb_ipk_), optional :: data + integer(psb_ipk_), intent(in) :: flag + complex(psb_dpk_), intent(in) :: beta + class(psb_z_base_multivect_type), intent(inout) :: y + type(psb_desc_type), target :: desc_a + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional :: data end subroutine psi_zswaptran_multivect - module subroutine psi_ztran_vidx_vect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_vect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_ztran_vidx_vect - module subroutine psi_ztran_vidx_multivect(ctxt,flag,beta,y,idx,& - & totxch,totsnd,totrcv,info) - type(psb_ctxt_type), intent(in) :: ctxt - integer(psb_ipk_), intent(in) :: flag - integer(psb_ipk_), intent(out) :: info - class(psb_z_base_multivect_type) :: y - complex(psb_dpk_) :: beta - class(psb_i_base_vect_type), intent(inout) :: idx - integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv - end subroutine psi_ztran_vidx_multivect end interface psi_swaptran interface psi_ovrl_upd diff --git a/base/modules/serial/psb_c_base_vect_mod.F90 b/base/modules/serial/psb_c_base_vect_mod.F90 index a30e2547..dc16f63b 100644 --- a/base/modules/serial/psb_c_base_vect_mod.F90 +++ b/base/modules/serial/psb_c_base_vect_mod.F90 @@ -49,6 +49,7 @@ module psb_c_base_vect_mod use psb_realloc_mod use psb_i_base_vect_mod use psb_l_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_c_base_vect_type !! The psb_c_base_vect_type @@ -65,6 +66,7 @@ module psb_c_base_vect_mod complex(psb_spk_), allocatable :: v(:) complex(psb_spk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -77,6 +79,8 @@ module psb_c_base_vect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators @@ -241,6 +245,10 @@ module psb_c_base_vect_mod procedure, pass(z) :: addconst_v2 => c_base_addconst_v2 generic, public :: addconst => addconst_a2,addconst_v2 + ! Methods used to handle topology in neighbor_alltoallv communication scheme + procedure, pass(x) :: init_topology => c_base_init_topology + procedure, pass(x) :: free_topology => c_base_free_topology + end type psb_c_base_vect_type @@ -2430,6 +2438,35 @@ contains if (x%is_dev()) call x%sync() call z%addconst(x%v,b,info) end subroutine c_base_addconst_v2 + + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine c_base_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine c_base_init_topology + + subroutine c_base_free_topology(x, info) + implicit none + class(psb_c_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine c_base_free_topology + ! -------------------------------------------------------------------- end module psb_c_base_vect_mod @@ -2439,6 +2476,7 @@ module psb_c_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_c_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_c_base_vect_type !! The psb_c_base_vect_type @@ -2458,6 +2496,7 @@ module psb_c_base_multivect_mod complex(psb_spk_), allocatable :: v(:,:) complex(psb_spk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -2470,6 +2509,8 @@ module psb_c_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators @@ -2595,6 +2636,10 @@ module psb_c_base_multivect_mod procedure, pass(y) :: sctb_x => c_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => c_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf + + ! Neighbor alltoallv communication topology handling + procedure, pass(x) :: init_topology => c_base_mlv_init_topology + procedure, pass(x) :: free_topology => c_base_mlv_free_topology end type psb_c_base_multivect_type interface psb_c_base_multivect @@ -4118,4 +4163,33 @@ contains end subroutine c_base_mlv_device_wait + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine c_base_mlv_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_c_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine c_base_mlv_init_topology + + subroutine c_base_mlv_free_topology(x, info) + implicit none + class(psb_c_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine c_base_mlv_free_topology + ! -------------------------------------------------------------------- + end module psb_c_base_multivect_mod diff --git a/base/modules/serial/psb_i_base_vect_mod.F90 b/base/modules/serial/psb_i_base_vect_mod.F90 index 21413168..92fa7d9d 100644 --- a/base/modules/serial/psb_i_base_vect_mod.F90 +++ b/base/modules/serial/psb_i_base_vect_mod.F90 @@ -47,6 +47,7 @@ module psb_i_base_vect_mod use psb_const_mod use psb_error_mod use psb_realloc_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_i_base_vect_type !! The psb_i_base_vect_type @@ -62,7 +63,9 @@ module psb_i_base_vect_mod !> Values. integer(psb_ipk_), allocatable :: v(:) integer(psb_ipk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -75,6 +78,9 @@ module psb_i_base_vect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology + contains ! ! Constructors/allocators @@ -170,9 +176,9 @@ module psb_i_base_vect_mod procedure, pass(x) :: check_addr => i_base_check_addr - - - + ! Methods used to handle topology in neighbor_alltoallv communication scheme + procedure, pass(x) :: init_topology => i_base_init_topology + procedure, pass(x) :: free_topology => i_base_free_topology end type psb_i_base_vect_type @@ -1387,6 +1393,33 @@ contains end subroutine i_base_sctb_buf + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine i_base_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_i_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine i_base_init_topology + + subroutine i_base_free_topology(x, info) + implicit none + class(psb_i_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine i_base_free_topology + ! -------------------------------------------------------------------- end module psb_i_base_vect_mod @@ -1397,6 +1430,7 @@ module psb_i_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_i_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_i_base_vect_type !! The psb_i_base_vect_type @@ -1415,7 +1449,9 @@ module psb_i_base_multivect_mod !> Values. integer(psb_ipk_), allocatable :: v(:,:) integer(psb_ipk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -1428,6 +1464,9 @@ module psb_i_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology + contains ! ! Constructors/allocators @@ -1520,6 +1559,11 @@ module psb_i_base_multivect_mod procedure, pass(y) :: sctb_x => i_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => i_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf + + ! Neighbor alltoallv communication topology handling + procedure, pass(x) :: init_topology => i_base_mlv_init_topology + procedure, pass(x) :: free_topology => i_base_mlv_free_topology + end type psb_i_base_multivect_type interface psb_i_base_multivect @@ -2561,4 +2605,33 @@ contains end subroutine i_base_mlv_device_wait + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine i_base_mlv_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_i_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine i_base_mlv_init_topology + + subroutine i_base_mlv_free_topology(x, info) + implicit none + class(psb_i_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine i_base_mlv_free_topology + ! -------------------------------------------------------------------- + end module psb_i_base_multivect_mod diff --git a/base/modules/serial/psb_l_base_vect_mod.F90 b/base/modules/serial/psb_l_base_vect_mod.F90 index 874c097c..b7668495 100644 --- a/base/modules/serial/psb_l_base_vect_mod.F90 +++ b/base/modules/serial/psb_l_base_vect_mod.F90 @@ -48,6 +48,7 @@ module psb_l_base_vect_mod use psb_error_mod use psb_realloc_mod use psb_i_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_l_base_vect_type !! The psb_l_base_vect_type @@ -63,7 +64,9 @@ module psb_l_base_vect_mod !> Values. integer(psb_lpk_), allocatable :: v(:) integer(psb_lpk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -76,6 +79,10 @@ module psb_l_base_vect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + + type(psb_neighbor_topology_type) :: neighbor_topology + contains ! ! Constructors/allocators @@ -172,9 +179,9 @@ module psb_l_base_vect_mod procedure, pass(x) :: check_addr => l_base_check_addr - - - + ! Methods used to handle topology in neighbor_alltoallv communication scheme + procedure, pass(x) :: init_topology => l_base_init_topology + procedure, pass(x) :: free_topology => l_base_free_topology end type psb_l_base_vect_type @@ -1388,6 +1395,34 @@ contains end subroutine l_base_sctb_buf + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine l_base_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_l_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine l_base_init_topology + + subroutine l_base_free_topology(x, info) + implicit none + class(psb_l_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine l_base_free_topology + ! -------------------------------------------------------------------- + end module psb_l_base_vect_mod @@ -1398,6 +1433,7 @@ module psb_l_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_l_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_l_base_vect_type !! The psb_l_base_vect_type @@ -1416,7 +1452,9 @@ module psb_l_base_multivect_mod !> Values. integer(psb_lpk_), allocatable :: v(:,:) integer(psb_lpk_), allocatable :: combuf(:) - integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_), allocatable :: comid(:,:) ! This is used only for Isend/Irecv scheme, to store the communication handles for each neighbor + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange + !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -1429,6 +1467,9 @@ module psb_l_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology + contains ! ! Constructors/allocators @@ -1521,6 +1562,12 @@ module psb_l_base_multivect_mod procedure, pass(y) :: sctb_x => l_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => l_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf + + + ! Neighbor alltoallv communication topology handling + procedure, pass(x) :: init_topology => l_base_mlv_init_topology + procedure, pass(x) :: free_topology => l_base_mlv_free_topology + end type psb_l_base_multivect_type interface psb_l_base_multivect @@ -2562,4 +2609,37 @@ contains end subroutine l_base_mlv_device_wait + + + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine l_base_mlv_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_l_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine l_base_mlv_init_topology + + subroutine l_base_mlv_free_topology(x, info) + implicit none + class(psb_l_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine l_base_mlv_free_topology + ! -------------------------------------------------------------------- + + + end module psb_l_base_multivect_mod diff --git a/base/modules/serial/psb_z_base_vect_mod.F90 b/base/modules/serial/psb_z_base_vect_mod.F90 index 14197408..7b08c25e 100644 --- a/base/modules/serial/psb_z_base_vect_mod.F90 +++ b/base/modules/serial/psb_z_base_vect_mod.F90 @@ -49,6 +49,7 @@ module psb_z_base_vect_mod use psb_realloc_mod use psb_i_base_vect_mod use psb_l_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_z_base_vect_type !! The psb_z_base_vect_type @@ -65,6 +66,7 @@ module psb_z_base_vect_mod complex(psb_dpk_), allocatable :: v(:) complex(psb_dpk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -77,6 +79,8 @@ module psb_z_base_vect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators @@ -241,6 +245,10 @@ module psb_z_base_vect_mod procedure, pass(z) :: addconst_v2 => z_base_addconst_v2 generic, public :: addconst => addconst_a2,addconst_v2 + ! Methods used to handle topology in neighbor_alltoallv communication scheme + procedure, pass(x) :: init_topology => z_base_init_topology + procedure, pass(x) :: free_topology => z_base_free_topology + end type psb_z_base_vect_type @@ -2430,6 +2438,35 @@ contains if (x%is_dev()) call x%sync() call z%addconst(x%v,b,info) end subroutine z_base_addconst_v2 + + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine z_base_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine z_base_init_topology + + subroutine z_base_free_topology(x, info) + implicit none + class(psb_z_base_vect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine z_base_free_topology + ! -------------------------------------------------------------------- end module psb_z_base_vect_mod @@ -2439,6 +2476,7 @@ module psb_z_base_multivect_mod use psb_error_mod use psb_realloc_mod use psb_z_base_vect_mod + use psb_neighbor_topology_mod !> \namespace psb_base_mod \class psb_z_base_vect_type !! The psb_z_base_vect_type @@ -2458,6 +2496,7 @@ module psb_z_base_multivect_mod complex(psb_dpk_), allocatable :: v(:,:) complex(psb_dpk_), allocatable :: combuf(:) integer(psb_mpk_), allocatable :: comid(:,:) + integer(psb_mpk_) :: communication_handle ! This is used only for Isend/Irecv scheme, to store the communication handle for the whole halo exchange !> vector bldstate: !! null: pristine; !! build: it's being filled with entries; @@ -2470,6 +2509,8 @@ module psb_z_base_multivect_mod integer(psb_ipk_), private :: dupl = psb_dupl_null_ integer(psb_ipk_), private :: ncfs = 0 integer(psb_ipk_), allocatable :: iv(:) + + type(psb_neighbor_topology_type) :: neighbor_topology contains ! ! Constructors/allocators @@ -2595,6 +2636,10 @@ module psb_z_base_multivect_mod procedure, pass(y) :: sctb_x => z_base_mlv_sctb_x procedure, pass(y) :: sctb_buf => z_base_mlv_sctb_buf generic, public :: sct => sctb, sctbr2, sctb_x, sctb_buf + + ! Neighbor alltoallv communication topology handling + procedure, pass(x) :: init_topology => z_base_mlv_init_topology + procedure, pass(x) :: free_topology => z_base_mlv_free_topology end type psb_z_base_multivect_type interface psb_z_base_multivect @@ -4118,4 +4163,33 @@ contains end subroutine z_base_mlv_device_wait + + ! -------------------------------------------------------------------- + ! Implementation of methods used for neighbor alltoallv communication + ! -------------------------------------------------------------------- + subroutine z_base_mlv_init_topology(x, halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + implicit none + class(psb_z_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(in) :: halo_index(:) + integer(psb_ipk_), intent(in) :: num_exchanges, total_send_elems, total_recv_elems + type(psb_ctxt_type), intent(in) :: ctxt + integer(psb_mpk_), intent(in) :: icomm + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%init(halo_index, num_exchanges, & + & total_send_elems, total_recv_elems, ctxt, icomm, info) + + end subroutine z_base_mlv_init_topology + + subroutine z_base_mlv_free_topology(x, info) + implicit none + class(psb_z_base_multivect_type), intent(inout) :: x + integer(psb_ipk_), intent(out) :: info + + call x%neighbor_topology%free(info) + + end subroutine z_base_mlv_free_topology + ! -------------------------------------------------------------------- + end module psb_z_base_multivect_mod diff --git a/log.txt b/log.txt deleted file mode 100644 index 8ae9e16a..00000000 --- a/log.txt +++ /dev/null @@ -1,1819 +0,0 @@ -(if test ! -d lib ; then mkdir lib; fi) -make -C base mods -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C modules objs F90="" F90COPT=" " -(if test ! -d include ; then mkdir include; fi; /usr/bin/install -c -p -m 644 Make.inc include/Make.inc.psblas) -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_const_mod.F90 -o psb_const_mod.o -(if test ! -d modules ; then mkdir modules; fi;) -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cbind_const_mod.F90 -o psb_cbind_const_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_mod.F90 -o psb_error_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_string_mod.f90 -o auxil/psb_string_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_m_serial_mod.f90 -o auxil/psi_m_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_e_serial_mod.f90 -o auxil/psi_e_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_s_serial_mod.f90 -o auxil/psi_s_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_d_serial_mod.f90 -o auxil/psi_d_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_c_serial_mod.f90 -o auxil/psi_c_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_z_serial_mod.f90 -o auxil/psi_z_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_acx_mod.f90 -o auxil/psi_acx_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_alcx_mod.f90 -o auxil/psi_alcx_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_lcx_mod.f90 -o auxil/psi_lcx_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_realloc_mod.F90 -o auxil/psb_m_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_realloc_mod.F90 -o auxil/psb_e_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_realloc_mod.F90 -o auxil/psb_s_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_realloc_mod.F90 -o auxil/psb_d_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_realloc_mod.F90 -o auxil/psb_c_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_realloc_mod.F90 -o auxil/psb_z_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_realloc_mod.F90 -o psb_realloc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psi_serial_mod.f90 -o auxil/psi_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c desc/psb_desc_const_mod.f90 -o desc/psb_desc_const_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_hsort_mod.f90 -o auxil/psb_m_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_isort_mod.f90 -o auxil/psb_m_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_msort_mod.f90 -o auxil/psb_m_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_m_qsort_mod.f90 -o auxil/psb_m_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_hsort_mod.f90 -o auxil/psb_e_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_isort_mod.f90 -o auxil/psb_e_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_msort_mod.f90 -o auxil/psb_e_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_e_qsort_mod.f90 -o auxil/psb_e_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_mod.f90 -o auxil/psb_s_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_isort_mod.f90 -o auxil/psb_s_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_msort_mod.f90 -o auxil/psb_s_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_qsort_mod.f90 -o auxil/psb_s_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_mod.f90 -o auxil/psb_d_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_isort_mod.f90 -o auxil/psb_d_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_msort_mod.f90 -o auxil/psb_d_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_qsort_mod.f90 -o auxil/psb_d_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_mod.f90 -o auxil/psb_c_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_isort_mod.f90 -o auxil/psb_c_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_msort_mod.f90 -o auxil/psb_c_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_qsort_mod.f90 -o auxil/psb_c_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_mod.f90 -o auxil/psb_z_hsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_isort_mod.f90 -o auxil/psb_z_isort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_msort_mod.f90 -o auxil/psb_z_msort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_qsort_mod.f90 -o auxil/psb_z_qsort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_i_hsort_x_mod.f90 -o auxil/psb_i_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_l_hsort_x_mod.f90 -o auxil/psb_l_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_hsort_x_mod.f90 -o auxil/psb_s_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_m_ip_reord_mod.F90 -o auxil/psb_m_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_e_ip_reord_mod.F90 -o auxil/psb_e_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_s_ip_reord_mod.F90 -o auxil/psb_s_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_d_ip_reord_mod.F90 -o auxil/psb_d_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_c_ip_reord_mod.F90 -o auxil/psb_c_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_z_ip_reord_mod.F90 -o auxil/psb_z_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_mod.F90 -o desc/psb_hash_mod.o -mpicc -g -O3 -I. -c desc/psb_hashval.c -o desc/psb_hashval.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c comm/psb_neighbor_topology_mod.F90 -o comm/psb_neighbor_topology_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_hsort_x_mod.f90 -o auxil/psb_d_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_hsort_x_mod.f90 -o auxil/psb_c_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_base_vect_mod.F90 -o serial/psb_i_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_base_mat_mod.F90 -o serial/psb_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_hsort_x_mod.f90 -o auxil/psb_z_hsort_x_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c auxil/psb_ip_reord_mod.F90 -o auxil/psb_ip_reord_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_sort_mod.f90 -o auxil/psb_sort_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_i_vect_mod.F90 -o serial/psb_i_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_base_vect_mod.F90 -o serial/psb_l_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_l_vect_mod.F90 -o serial/psb_l_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_vect_mod.F90 -o serial/psb_d_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_vect_mod.F90 -o serial/psb_s_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_vect_mod.F90 -o serial/psb_c_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_vect_mod.F90 -o serial/psb_z_base_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_vect_mod.F90 -o serial/psb_z_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_base_mat_mod.F90 -o serial/psb_z_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_vect_mod.F90 -o serial/psb_d_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_base_mat_mod.F90 -o serial/psb_d_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_vect_mod.F90 -o serial/psb_s_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_base_mat_mod.F90 -o serial/psb_s_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csr_mat_mod.f90 -o serial/psb_z_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_csc_mat_mod.f90 -o serial/psb_z_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csr_mat_mod.f90 -o serial/psb_d_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_csc_mat_mod.f90 -o serial/psb_d_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_vect_mod.F90 -o serial/psb_c_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_base_mat_mod.F90 -o serial/psb_c_base_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csr_mat_mod.f90 -o serial/psb_s_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_csc_mat_mod.f90 -o serial/psb_s_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_z_rb_idx_tree_mod.f90 -o auxil/psb_z_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_d_rb_idx_tree_mod.f90 -o auxil/psb_d_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csr_mat_mod.f90 -o serial/psb_c_csr_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_csc_mat_mod.f90 -o serial/psb_c_csc_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_s_rb_idx_tree_mod.f90 -o auxil/psb_s_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_z_mat_mod.F90 -o serial/psb_z_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_c_rb_idx_tree_mod.f90 -o auxil/psb_c_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_d_mat_mod.F90 -o serial/psb_d_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c auxil/psb_rb_idx_tree_mod.f90 -o auxil/psb_rb_idx_tree_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_s_mat_mod.F90 -o serial/psb_s_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_vect_mod.f90 -o serial/psb_vect_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c serial/psb_c_mat_mod.F90 -o serial/psb_c_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_mat_mod.f90 -o serial/psb_mat_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_s_serial_mod.f90 -o serial/psb_s_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_d_serial_mod.f90 -o serial/psb_d_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_c_serial_mod.f90 -o serial/psb_c_serial_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_z_serial_mod.f90 -o serial/psb_z_serial_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_penv_mod.F90 -o penv/psi_penv_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_p2p_mod.F90 -o penv/psi_i2_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_p2p_mod.F90 -o penv/psi_m_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_p2p_mod.F90 -o penv/psi_e_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_p2p_mod.F90 -o penv/psi_s_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_p2p_mod.F90 -o penv/psi_d_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_p2p_mod.F90 -o penv/psi_c_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_p2p_mod.F90 -o penv/psi_z_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_i2_collective_mod.F90 -o penv/psi_i2_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_e_collective_mod.F90 -o penv/psi_e_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_m_collective_mod.F90 -o penv/psi_m_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_s_collective_mod.F90 -o penv/psi_s_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_d_collective_mod.F90 -o penv/psi_d_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_c_collective_mod.F90 -o penv/psi_c_collective_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c penv/psi_z_collective_mod.F90 -o penv/psi_z_collective_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_p2p_mod.F90 -o penv/psi_p2p_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c serial/psb_serial_mod.f90 -o serial/psb_serial_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c penv/psi_collective_mod.F90 -o penv/psi_collective_mod.o -mpifort -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -frecursive -g -O3 -c psb_penv_mod.F90 -o psb_penv_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_indx_map_mod.F90 -o desc/psb_indx_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_timers_mod.f90 -o psb_timers_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_error_impl.F90 -o psb_error_impl.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_hash_map_mod.F90 -o desc/psb_hash_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_list_map_mod.F90 -o desc/psb_list_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_repl_map_mod.F90 -o desc/psb_repl_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_gen_block_map_mod.F90 -o desc/psb_gen_block_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_glist_map_mod.F90 -o desc/psb_glist_map_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c desc/psb_desc_mod.F90 -o desc/psb_desc_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_e_comm_a_mod.f90 -o comm/psi_e_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_m_comm_a_mod.f90 -o comm/psi_m_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_a_mod.f90 -o comm/psi_s_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_a_mod.f90 -o comm/psi_d_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_a_mod.f90 -o comm/psi_c_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_a_mod.f90 -o comm/psi_z_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_i_comm_mod.f90 -o comm/psb_i_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_l_comm_mod.f90 -o comm/psb_l_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_mod.f90 -o comm/psb_s_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_mod.f90 -o comm/psb_d_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_mod.f90 -o comm/psb_c_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_mod.f90 -o comm/psb_z_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_m_comm_a_mod.f90 -o comm/psb_m_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_e_comm_a_mod.f90 -o comm/psb_e_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_comm_a_mod.f90 -o comm/psb_s_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_comm_a_mod.f90 -o comm/psb_d_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_comm_a_mod.f90 -o comm/psb_c_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_comm_a_mod.f90 -o comm/psb_z_comm_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_s_psblas_mod.F90 -o psblas/psb_s_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_c_psblas_mod.F90 -o psblas/psb_c_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_d_psblas_mod.F90 -o psblas/psb_d_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psblas/psb_z_psblas_mod.F90 -o psblas/psb_z_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_check_mod.f90 -o psb_check_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_d_comm_v_mod.f90 -o comm/psi_d_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_s_comm_v_mod.f90 -o comm/psi_s_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_z_comm_v_mod.f90 -o comm/psi_z_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_c_comm_v_mod.f90 -o comm/psi_c_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_i_comm_v_mod.f90 -o comm/psi_i_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psi_l_comm_v_mod.f90 -o comm/psi_l_comm_v_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_i_mod.F90 -o psi_i_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_mod.F90 -o psi_s_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_mod.F90 -o psi_z_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_mod.F90 -o psi_d_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_mod.F90 -o psi_c_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_l_mod.F90 -o psi_l_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psblas/psb_psblas_mod.f90 -o psblas/psb_psblas_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psi_mod.f90 -o psi_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_comm_mod.f90 -o comm/psb_comm_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_cd_tools_mod.F90 -o tools/psb_cd_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_m_tools_a_mod.f90 -o tools/psb_m_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_e_tools_a_mod.f90 -o tools/psb_e_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_s_tools_mod.F90 -o tools/psb_s_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_d_tools_mod.F90 -o tools/psb_d_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_c_tools_mod.F90 -o tools/psb_c_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_z_tools_mod.F90 -o tools/psb_z_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_s_tools_a_mod.f90 -o tools/psb_s_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_d_tools_a_mod.f90 -o tools/psb_d_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_c_tools_a_mod.f90 -o tools/psb_c_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_z_tools_a_mod.f90 -o tools/psb_z_tools_a_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_i_tools_mod.F90 -o tools/psb_i_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c tools/psb_l_tools_mod.F90 -o tools/psb_l_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c tools/psb_tools_mod.f90 -o tools/psb_tools_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_base_linmap_mod.f90 -o comm/psb_base_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_s_linmap_mod.f90 -o comm/psb_s_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_d_linmap_mod.f90 -o comm/psb_d_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_c_linmap_mod.f90 -o comm/psb_c_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_z_linmap_mod.f90 -o comm/psb_z_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c comm/psb_linmap_mod.f90 -o comm/psb_linmap_mod.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c error.f90 -o error.o -mpifort -frecursive -g -O3 -I../ -I. -I. -c psb_base_mod.f90 -o psb_base_mod.o -mpicc -g -O3 -I. -c cutil.c -o cutil.o -/usr/bin/install -c -p -p *.mod ../../modules -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C util mods -make -C prec mods -make -C ext mods -make -C base objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_blockpart_mod.f90 -o psb_blockpart_mod.o -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_const_mod.f90 -o psb_prec_const_mod.o -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -mpicc -g -O3 -I. -I../include -c psb_metis_int.c -o psb_metis_int.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_ell_mat_mod.f90 -o psb_d_ell_mat_mod.o -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C modules objs F90="" F90COPT=" " -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_i_ext_util_mod.f90 -o psi_i_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_partidx_mod.F90 -o psb_partidx_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_tools_mod.f90 -o psb_c_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_s_ext_util_mod.f90 -o psi_s_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_hbio_mod.f90 -o psb_hbio_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_tools_mod.f90 -o psb_d_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_c_ext_util_mod.f90 -o psi_c_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_tools_mod.f90 -o psb_s_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mmio_mod.F90 -o psb_mmio_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_d_ext_util_mod.f90 -o psi_d_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_mod.f90 -o psb_s_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_tools_mod.f90 -o psb_z_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_z_ext_util_mod.f90 -o psi_z_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_mod.f90 -o psb_d_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_ell_mat_mod.f90 -o psb_s_ell_mat_mod.o -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -/usr/bin/install -c -p -p *.mod ../../modules -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_mod.f90 -o psb_c_mat_dist_mod.o -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make -C serial objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C impl objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_base_mat_impl.f90 -o psb_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_base_mat_impl.F90 -o psb_s_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_ell_mat_mod.f90 -o psb_c_ell_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_base_mat_impl.F90 -o psb_d_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_mod.f90 -o psb_z_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_ell_mat_mod.f90 -o psb_z_ell_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_renum_mod.f90 -o psb_s_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_renum_mod.f90 -o psb_d_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_renum_mod.f90 -o psb_c_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_renum_mod.f90 -o psb_z_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_gps_mod.f90 -o psb_gps_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dns_mat_mod.f90 -o psb_s_dns_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dns_mat_mod.f90 -o psb_d_dns_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dns_mat_mod.f90 -o psb_c_dns_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_metispart_mod.F90 -o psb_metispart_mod.o -make -C comm objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C internals objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata.F90 -o psi_dswapdata.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_restr.f90 -o psi_iovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_save.f90 -o psi_iovrl_save.o -make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter.F90 -o psb_dscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_base_prec_mod.f90 -o psb_s_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_base_prec_mod.f90 -o psb_d_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_mat_dist_mod.f90 -o psb_mat_dist_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_iovrl_upd.f90 -o psi_iovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_base_prec_mod.f90 -o psb_c_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dns_mat_mod.f90 -o psb_z_dns_mat_mod.o -make -C sort objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_hsort_impl.f90 -o psb_s_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psi_ext_util_mod.f90 -o psi_ext_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter.F90 -o psb_zscatter.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_isort_impl.f90 -o psb_s_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_msort_impl.f90 -o psb_s_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_base_prec_mod.f90 -o psb_z_base_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ilu_fact_mod.f90 -o psb_d_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lsame.f90 -o psb_lsame.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather.f90 -o psb_dgather.o -make -C auxil objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_desc_index.F90 -o psi_desc_index.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_s_qsort_impl.f90 -o psb_s_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_hsort_impl.f90 -o psb_d_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_isort_impl.f90 -o psb_d_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_msort_impl.f90 -o psb_d_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hll_mat_mod.f90 -o psb_d_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_iscatter.F90 -o psb_iscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_lscatter.F90 -o psb_lscatter.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter.F90 -o psb_cscatter.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran.F90 -o psi_dswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_renum_mod.f90 -o psb_renum_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_fnd_owner.F90 -o psi_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo.f90 -o psb_dhalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_d_qsort_impl.f90 -o psb_d_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hll_mat_mod.f90 -o psb_s_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_hsort_impl.f90 -o psb_c_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_ainv_tools_mod.f90 -o psb_ainv_tools_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_bnd_elem.f90 -o psi_crea_bnd_elem.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter.F90 -o psb_sscatter.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hll_mat_mod.f90 -o psb_c_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl.f90 -o psb_dovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dscatter_a.F90 -o psb_dscatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_isort_impl.f90 -o psb_c_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zscatter_a.F90 -o psb_zscatter_a.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hll_mat_mod.f90 -o psb_z_hll_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_msort_impl.f90 -o psb_c_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather.f90 -o psb_sgather.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_c_qsort_impl.f90 -o psb_c_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_dia_mat_mod.f90 -o psb_d_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata.F90 -o psi_sswapdata.o -make -C psblas objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddot.f90 -o psb_ddot.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_d_hdia_mat_mod.f90 -o psb_d_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_dia_mat_mod.f90 -o psb_s_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_s_hdia_mat_mod.f90 -o psb_s_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_mscatter_a.F90 -o psb_mscatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_base_mat_impl.F90 -o psb_c_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_dia_mat_mod.f90 -o psb_c_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_base_mat_impl.F90 -o psb_z_base_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_c_hdia_mat_mod.f90 -o psb_c_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_dia_mat_mod.f90 -o psb_z_dia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo.f90 -o psb_shalo.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -c psb_z_hdia_mat_mod.f90 -o psb_z_hdia_mat_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_a2a_fnd_owner.F90 -o psi_a2a_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../include -I../modules -I. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ext_mod.F90 -o psb_ext_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl.f90 -o psb_sovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_restr.f90 -o psi_lovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_hsort_impl.f90 -o psb_z_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ilu_fact_mod.f90 -o psb_s_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_isort_impl.f90 -o psb_z_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_ainv_fact_mod.f90 -o psb_s_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ilu_fact_mod.f90 -o psb_c_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_save.f90 -o psi_lovrl_save.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_msort_impl.f90 -o psb_z_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_z_qsort_impl.f90 -o psb_z_qsort_impl.o -make -C tools objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_icdasb.F90 -o psb_icdasb.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran.F90 -o psi_sswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_igather.f90 -o psb_igather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_escatter_a.F90 -o psb_escatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_hsort_impl.f90 -o psb_m_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cscatter_a.F90 -o psb_cscatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_isort_impl.f90 -o psb_m_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sscatter_a.F90 -o psb_sscatter_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_msort_impl.f90 -o psb_m_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_ainv_fact_mod.f90 -o psb_c_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspgather.F90 -o psb_dspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdall.f90 -o psb_cdall.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_m_qsort_impl.f90 -o psb_m_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ihalo.f90 -o psb_ihalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_graph_fnd_owner.F90 -o psi_graph_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_hsort_impl.f90 -o psb_e_hsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssphalo.F90 -o psb_ssphalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_lovrl_upd.f90 -o psi_lovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswapdata.F90 -o psi_iswapdata.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_isort_impl.f90 -o psb_e_isort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_index.f90 -o psi_crea_index.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_msort_impl.f90 -o psb_e_msort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax.f90 -o psb_damax.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invk_fact_mod.f90 -o psb_c_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psb_e_qsort_impl.f90 -o psb_e_qsort_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum.f90 -o psb_dasum.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr.f90 -o psi_sovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csr_impl.F90 -o psb_s_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_coo_impl.F90 -o psb_s_coo_impl.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save.f90 -o psi_sovrl_save.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdals.f90 -o psb_cdals.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd.f90 -o psi_sovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_csc_impl.F90 -o psb_s_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_m_serial_impl.F90 -o psi_m_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_iswaptran.F90 -o psi_iswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_invt_fact_mod.f90 -o psb_c_invt_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_adjcncy_fnd_owner.F90 -o psi_adjcncy_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daxpby.f90 -o psb_daxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrm2.f90 -o psb_dnrm2.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnrmi.f90 -o psb_dnrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspmm.f90 -o psb_dspmm.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_mat_impl.F90 -o psb_s_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_crea_ovr_elem.f90 -o psi_crea_ovr_elem.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmpovrl.f90 -o psi_bld_tmpovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspgather.F90 -o psb_sspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ilu_fact_mod.f90 -o psb_z_ilu_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswapdata.F90 -o psi_lswapdata.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdalv.f90 -o psb_cdalv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_inloc.f90 -o psb_cd_inloc.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_util_mod.f90 -o psb_util_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspgather.F90 -o psb_zspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsphalo.F90 -o psb_dsphalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_symm_dep_list.F90 -o psi_symm_dep_list.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_ainv_fact_mod.f90 -o psb_z_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invk_fact_mod.f90 -o psb_z_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_lswaptran.F90 -o psi_lswaptran.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_invt_fact_mod.f90 -o psb_z_invt_fact_mod.o -/bin/cp -p *.mod ../modules -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdins.F90 -o psb_cdins.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr.f90 -o psi_dovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save.f90 -o psi_dovrl_save.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd.f90 -o psi_dovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata.F90 -o psi_cswapdata.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_iovrl.f90 -o psb_iovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_rb_idx_tree_impl.F90 -o psb_s_rb_idx_tree_impl.o -make -C ext objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -/bin/cp -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_from_coo.f90 -o psb_s_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_dia_to_coo.f90 -o psb_s_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_biconjg_mod.F90 -o psb_c_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr.f90 -o psi_covrl_restr.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lgather.f90 -o psb_lgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lhalo.f90 -o psb_lhalo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_lovrl.f90 -o psb_lovrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspgather.F90 -o psb_cspgather.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_bld_tmphalo.f90 -o psi_bld_tmphalo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_coo.f90 -o psb_s_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_from_fmt.f90 -o psb_s_cp_ell_from_fmt.o -/usr/bin/install -c -p -p *.mod ../modules -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_sort_dl.f90 -o psi_sort_dl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csphalo.F90 -o psb_csphalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran.F90 -o psi_cswaptran.o -make -C util objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -/usr/bin/install -c -p -p *.mod ../modules -mpicc -g -O3 -I. -I../include -c psb_amd_order.c -o psb_amd_order.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_hbio_impl.f90 -o psb_s_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspsm.f90 -o psb_dspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_hbio_impl.f90 -o psb_d_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_biconjg_mod.F90 -o psb_d_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save.f90 -o psi_covrl_save.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_biconjg_mod.F90 -o psb_s_biconjg_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_coo.f90 -o psb_s_cp_ell_to_coo.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather.f90 -o psb_cgather.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata.F90 -o psi_zswapdata.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspnrm1.f90 -o psb_sspnrm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_ell_to_fmt.f90 -o psb_s_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_hbio_impl.f90 -o psb_c_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_e_serial_impl.F90 -o psi_e_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_indx_map_fnd_owner.F90 -o psi_indx_map_fnd_owner.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_desc_impl.f90 -o psi_desc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_biconjg_mod.F90 -o psb_z_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dspnrm1.f90 -o psb_dspnrm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdprt.f90 -o psb_cdprt.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd.f90 -o psi_covrl_upd.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_from_coo.f90 -o psb_s_cp_hdia_from_coo.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr.f90 -o psi_zovrl_restr.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save.f90 -o psi_zovrl_save.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran.F90 -o psi_zswaptran.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hdia_to_coo.f90 -o psb_s_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csr_impl.F90 -o psb_d_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdren.f90 -o psb_cdren.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_coo_impl.F90 -o psb_d_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd.f90 -o psi_zovrl_upd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_s_serial_impl.F90 -o psi_s_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspnrm1.f90 -o psb_cspnrm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_coo.f90 -o psb_s_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_from_fmt.f90 -o psb_s_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_hash_impl.f90 -o psi_hash_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psi_srtlist.f90 -o psi_srtlist.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsphalo.F90 -o psb_zsphalo.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_type.f90 -o psb_s_prec_type.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_csc_impl.F90 -o psb_d_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswapdata_a.F90 -o psi_dswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspnrm1.f90 -o psb_zspnrm1.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cdrep.f90 -o psb_cdrep.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_get_overlap.f90 -o psb_get_overlap.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_d_serial_impl.F90 -o psi_d_serial_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_coo.f90 -o psb_s_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_bld_glb_dep_list.F90 -o psi_bld_glb_dep_list.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_xtr_loc_dl.F90 -o psi_xtr_loc_dl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_hbio_impl.f90 -o psb_z_hbio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mmio_impl.f90 -o psb_s_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax.f90 -o psb_zamax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum.f90 -o psb_zasum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_c_serial_impl.F90 -o psi_c_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_type.f90 -o psb_d_prec_type.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_type.f90 -o psb_c_prec_type.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_cp_hll_to_fmt.f90 -o psb_s_cp_hll_to_fmt.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_restr_a.f90 -o psi_movrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_dswaptran_a.F90 -o psi_dswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_save_a.f90 -o psi_movrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaxpby.f90 -o psb_zaxpby.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_aclsum.f90 -o psb_s_dia_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_allocate_mnnz.f90 -o psb_s_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_arwsum.f90 -o psb_s_dia_arwsum.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mmio_impl.f90 -o psb_d_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswapdata_a.F90 -o psi_sswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcdbldext.F90 -o psb_dcdbldext.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_colsum.f90 -o psb_s_dia_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetptn.f90 -o psb_s_dia_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_mat_impl.F90 -o psb_d_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csgetrow.f90 -o psb_s_dia_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmm.f90 -o psb_s_dia_csmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_lstext.f90 -o psb_cd_lstext.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mmio_impl.f90 -o psb_c_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_remap.F90 -o psb_cd_remap.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_sswaptran_a.F90 -o psi_sswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_z_serial_impl.F90 -o psi_z_serial_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcdbldext.F90 -o psb_zcdbldext.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_csmv.f90 -o psb_s_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_get_diag.f90 -o psb_s_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_maxval.f90 -o psb_s_dia_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_mold.f90 -o psb_s_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_print.f90 -o psb_s_dia_print.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_type.f90 -o psb_z_prec_type.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mmio_impl.f90 -o psb_z_mmio_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_rb_idx_tree_impl.F90 -o psb_d_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csr_impl.F90 -o psb_c_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_coo_impl.F90 -o psb_c_coo_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reallocate_nz.f90 -o psb_s_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_movrl_upd_a.f90 -o psi_movrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scdbldext.F90 -o psb_scdbldext.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_restr_a.f90 -o psi_eovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswapdata_a.F90 -o psi_mswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_save_a.f90 -o psi_eovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdot.f90 -o psb_zdot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrm2.f90 -o psb_znrm2.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_reinit.f90 -o psb_s_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_rowsum.f90 -o psb_s_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scal.f90 -o psb_s_dia_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dia_scals.f90 -o psb_s_dia_scals.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo.f90 -o psb_chalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_csc_impl.F90 -o psb_c_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccdbldext.F90 -o psb_ccdbldext.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_mswaptran_a.F90 -o psi_mswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_mat_impl.F90 -o psb_c_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cdcpy.F90 -o psb_cdcpy.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_reinit.f90 -o psb_cd_reinit.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_switch_ovl_indxmap.f90 -o psb_cd_switch_ovl_indxmap.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_aclsum.f90 -o psb_s_ell_aclsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cd_renum_block.F90 -o psb_cd_renum_block.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_ainv_fact_mod.f90 -o psb_d_ainv_fact_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_allocate_mnnz.f90 -o psb_s_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_mat.F90 -o psb_s_remote_mat.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_arwsum.f90 -o psb_s_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_colsum.f90 -o psb_s_ell_colsum.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswapdata_a.F90 -o psi_eswapdata_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetblk.f90 -o psb_s_ell_csgetblk.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znrmi.f90 -o psb_znrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invk_fact_mod.f90 -o psb_d_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspmm.f90 -o psb_zspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl.f90 -o psb_covrl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_mat.F90 -o psb_d_remote_mat.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_invt_fact_mod.f90 -o psb_d_invt_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invk_fact_mod.f90 -o psb_s_invk_fact_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather.f90 -o psb_zgather.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_i_mmio_impl.F90 -o psb_i_mmio_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetptn.f90 -o psb_s_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csgetrow.f90 -o psb_s_ell_csgetrow.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspalloc.f90 -o psb_dspalloc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_mat.F90 -o psb_c_remote_mat.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_eswaptran_a.F90 -o psi_eswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspasb.f90 -o psb_dspasb.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmm.f90 -o psb_s_ell_csmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remap.F90 -o psb_d_remap.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo.f90 -o psb_zhalo.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_rb_idx_tree_impl.F90 -o psb_c_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zspsm.f90 -o psb_zspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_mat.F90 -o psb_z_remote_mat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl.f90 -o psb_zovrl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csr_impl.F90 -o psb_z_csr_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saxpby.f90 -o psb_saxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dspfree.f90 -o psb_dspfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspins.F90 -o psb_dspins.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_coo_impl.F90 -o psb_z_coo_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_invt_fact_mod.f90 -o psb_s_invt_fact_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csmv.f90 -o psb_s_ell_csmv.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswapdata_a.F90 -o psi_cswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_csc_impl.F90 -o psb_z_csc_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remote_vect.F90 -o psb_s_remote_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_biconjg_mod.F90 -o psb_biconjg_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_mat_impl.F90 -o psb_z_mat_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_srwextd.f90 -o psb_srwextd.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_mat_dist_impl.f90 -o psb_s_mat_dist_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgather_a.f90 -o psb_dgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_remote_vect.F90 -o psb_d_remote_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnm1.f90 -o psb_s_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csnmi.f90 -o psb_s_ell_csnmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dhalo_a.f90 -o psb_dhalo_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_cswaptran_a.F90 -o psi_cswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_type.f90 -o psb_prec_type.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remote_vect.F90 -o psb_c_remote_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdot.f90 -o psb_sdot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dsprn.f90 -o psb_dsprn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_csput.f90 -o psb_s_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssm.f90 -o psb_s_ell_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_cssv.f90 -o psb_s_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_get_diag.f90 -o psb_s_ell_get_diag.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remote_vect.F90 -o psb_z_remote_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_maxval.f90 -o psb_s_ell_maxval.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_drwextd.f90 -o psb_drwextd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dovrl_a.f90 -o psb_dovrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgather_a.f90 -o psb_sgather_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_mold.f90 -o psb_s_ell_mold.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_eovrl_upd_a.f90 -o psi_eovrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_prec_mod.f90 -o psb_s_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswapdata_a.F90 -o psi_zswapdata_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_e_remote_vect.F90 -o psb_e_remote_vect.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_restr_a.f90 -o psi_sovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_crwextd.f90 -o psb_crwextd.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_prec_mod.f90 -o psb_d_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_prec_mod.f90 -o psb_c_prec_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_print.f90 -o psb_s_ell_print.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_m_remote_vect.F90 -o psb_m_remote_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_prec_mod.f90 -o psb_z_prec_mod.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_save_a.f90 -o psi_sovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_rb_idx_tree_impl.F90 -o psb_z_rb_idx_tree_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum.f90 -o psb_sasum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_shalo_a.f90 -o psb_shalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sovrl_a.f90 -o psb_sovrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_mat_dist_impl.f90 -o psb_d_mat_dist_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_mat_dist_impl.f90 -o psb_c_mat_dist_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reallocate_nz.f90 -o psb_s_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax.f90 -o psb_samax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mgather_a.f90 -o psb_mgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_mhalo_a.f90 -o psb_mhalo_a.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_movrl_a.f90 -o psb_movrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrm2.f90 -o psb_snrm2.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_zswaptran_a.F90 -o psi_zswaptran_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspalloc.f90 -o psb_sspalloc.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_mat_dist_impl.f90 -o psb_z_mat_dist_impl.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_sovrl_upd_a.f90 -o psi_sovrl_upd_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_reinit.f90 -o psb_s_ell_reinit.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snrmi.f90 -o psb_snrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspasb.f90 -o psb_sspasb.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_prec_mod.f90 -o psb_prec_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_rowsum.f90 -o psb_s_ell_rowsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspmm.f90 -o psb_sspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_egather_a.f90 -o psb_egather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ehalo_a.f90 -o psb_ehalo_a.o -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_eovrl_a.f90 -o psb_eovrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgather_a.f90 -o psb_cgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_diagprec.f90 -o psb_d_diagprec.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_restr_a.f90 -o psi_dovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_save_a.f90 -o psi_dovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_nullprec.f90 -o psb_d_nullprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_remap.F90 -o psb_s_remap.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_bjacprec.f90 -o psb_d_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_dovrl_upd_a.f90 -o psi_dovrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sspsm.f90 -o psb_sspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax.f90 -o psb_camax.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zrwextd.f90 -o psb_zrwextd.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scal.f90 -o psb_s_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_scals.f90 -o psb_s_ell_scals.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_chalo_a.f90 -o psb_chalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_covrl_a.f90 -o psb_covrl_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sspfree.f90 -o psb_sspfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspins.F90 -o psb_sspins.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_diagprec.f90 -o psb_s_diagprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgather_a.f90 -o psb_zgather_a.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_renum_impl.F90 -o psb_s_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zhalo_a.f90 -o psb_zhalo_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum.f90 -o psb_casum.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_restr_a.f90 -o psi_covrl_restr_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_ell_trim.f90 -o psb_s_ell_trim.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caxpby.f90 -o psb_caxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdot.f90 -o psb_cdot.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrm2.f90 -o psb_cnrm2.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_nullprec.f90 -o psb_s_nullprec.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zovrl_a.f90 -o psb_zovrl_a.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_save_a.f90 -o psi_covrl_save_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_allocate_mnnz.f90 -o psb_s_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_covrl_upd_a.f90 -o psi_covrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnrmi.f90 -o psb_cnrmi.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspmm.f90 -o psb_cspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cspsm.f90 -o psb_cspsm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ssprn.f90 -o psb_ssprn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_glob_to_loc.f90 -o psb_glob_to_loc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cmlt_vect.f90 -o psb_cmlt_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_csmv.f90 -o psb_s_hdia_csmv.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sspspmm.F90 -o psb_sspspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dspspmm.F90 -o psb_dspspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspspmm.F90 -o psb_cspspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_bjacprec.f90 -o psb_s_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_restr_a.f90 -o psi_zovrl_restr_a.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_diagprec.f90 -o psb_c_diagprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_nullprec.f90 -o psb_c_nullprec.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_mold.f90 -o psb_s_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hdia_print.f90 -o psb_s_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_aclsum.f90 -o psb_s_hll_aclsum.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_save_a.f90 -o psi_zovrl_save_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspspmm.F90 -o psb_zspspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_bjacprec.f90 -o psb_c_bjacprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_diagprec.f90 -o psb_z_diagprec.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_allocate_mnnz.f90 -o psb_s_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_arwsum.f90 -o psb_s_hll_arwsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ssymbmm.f90 -o psb_ssymbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dmlt_vect.f90 -o psb_dmlt_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zmlt_vect.f90 -o psb_zmlt_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_loc_to_glob.f90 -o psb_loc_to_glob.o -mpifort -frecursive -g -O3 -I. -I../../modules -I../.. -c psi_zovrl_upd_a.f90 -o psi_zovrl_upd_a.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_renum_impl.F90 -o psb_d_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_nullprec.f90 -o psb_z_nullprec.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_bjacprec.f90 -o psb_z_bjacprec.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_colsum.f90 -o psb_s_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetblk.f90 -o psb_s_hll_csgetblk.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iallc.f90 -o psb_iallc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iasb.f90 -o psb_iasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_smlt_vect.f90 -o psb_smlt_vect.o -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cdiv_vect.f90 -o psb_cdiv_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetptn.f90 -o psb_s_hll_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dsymbmm.f90 -o psb_dsymbmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csgetrow.f90 -o psb_s_hll_csgetrow.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ddiv_vect.f90 -o psb_ddiv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zdiv_vect.f90 -o psb_zdiv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_ifree.f90 -o psb_ifree.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmm.f90 -o psb_s_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csmv.f90 -o psb_s_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnm1.f90 -o psb_s_hll_csnm1.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_renum_impl.F90 -o psb_c_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_renum_impl.F90 -o psb_z_renum_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sdiv_vect.f90 -o psb_sdiv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cinv_vect.f90 -o psb_cinv_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csnmi.f90 -o psb_s_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_csput.f90 -o psb_s_hll_csput.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_iins.f90 -o psb_iins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_csymbmm.f90 -o psb_csymbmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssm.f90 -o psb_s_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_cssv.f90 -o psb_s_hll_cssv.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dinv_vect.f90 -o psb_dinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zinv_vect.f90 -o psb_zinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lallc.f90 -o psb_lallc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sinv_vect.f90 -o psb_sinv_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dcmp_vect.f90 -o psb_dcmp_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_get_diag.f90 -o psb_s_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_maxval.f90 -o psb_s_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_mold.f90 -o psb_s_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_print.f90 -o psb_s_hll_print.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zsymbmm.f90 -o psb_zsymbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_scmp_vect.f90 -o psb_scmp_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_ccmp_vect.f90 -o psb_ccmp_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zcmp_vect.f90 -o psb_zcmp_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reallocate_nz.f90 -o psb_s_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cabs_vect.f90 -o psb_cabs_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_snumbmm.f90 -o psb_snumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dabs_vect.f90 -o psb_dabs_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sabs_vect.f90 -o psb_sabs_vect.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lasb.f90 -o psb_lasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zabs_vect.f90 -o psb_zabs_vect.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_reinit.f90 -o psb_s_hll_reinit.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cgetmatinfo.F90 -o psb_cgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dgetmatinfo.F90 -o psb_dgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sgetmatinfo.F90 -o psb_sgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dnumbmm.f90 -o psb_dnumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zgetmatinfo.F90 -o psb_zgetmatinfo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lfree.f90 -o psb_lfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cnumbmm.f90 -o psb_cnumbmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_lins.f90 -o psb_lins.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_rowsum.f90 -o psb_s_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scal.f90 -o psb_s_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_hll_scals.f90 -o psb_s_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_dia_from_coo.f90 -o psb_s_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psi_build_mtpart.F90 -o psi_build_mtpart.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_coo.f90 -o psb_s_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc.f90 -o psb_sallc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb.f90 -o psb_sasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree.f90 -o psb_sfree.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_from_fmt.f90 -o psb_s_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_znumbmm.f90 -o psb_znumbmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_coo.f90 -o psb_s_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_ell_to_fmt.f90 -o psb_s_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_from_coo.f90 -o psb_s_mv_hdia_from_coo.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c smmp.f90 -o smmp.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c lsmmp.f90 -o lsmmp.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sgeprt.f90 -o psb_sgeprt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hdia_to_coo.f90 -o psb_s_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_coo.f90 -o psb_s_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dgeprt.f90 -o psb_dgeprt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins.f90 -o psb_sins.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_from_fmt.f90 -o psb_s_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_coo.f90 -o psb_s_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_mv_hll_to_fmt.f90 -o psb_s_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_from_coo.f90 -o psb_c_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_cgeprt.f90 -o psb_cgeprt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_dia_to_coo.f90 -o psb_c_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc.f90 -o psb_dallc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_coo.f90 -o psb_c_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zgeprt.f90 -o psb_zgeprt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_from_fmt.f90 -o psb_c_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_coo.f90 -o psb_c_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_ell_to_fmt.f90 -o psb_c_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spdot_srtd.f90 -o psb_spdot_srtd.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb.f90 -o psb_dasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_aspxpby.f90 -o psb_aspxpby.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree.f90 -o psb_dfree.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_from_coo.f90 -o psb_c_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins.f90 -o psb_dins.o -/usr/bin/install -c -p -p *.mod ../modules -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_spge_dot.f90 -o psb_spge_dot.o -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_saplusat.f90 -o psb_saplusat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_daplusat.f90 -o psb_daplusat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_caplusat.f90 -o psb_caplusat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zaplusat.f90 -o psb_zaplusat.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_samax_s.f90 -o psb_samax_s.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hdia_to_coo.f90 -o psb_c_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_damax_s.f90 -o psb_damax_s.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_coo.f90 -o psb_c_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_camax_s.f90 -o psb_camax_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zamax_s.f90 -o psb_zamax_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc.f90 -o psb_callc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb.f90 -o psb_casb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_sasum_s.f90 -o psb_sasum_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_dasum_s.f90 -o psb_dasum_s.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree.f90 -o psb_cfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_casum_s.f90 -o psb_casum_s.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_from_fmt.f90 -o psb_c_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_coo.f90 -o psb_c_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -c psb_zasum_s.f90 -o psb_zasum_s.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_cp_hll_to_fmt.f90 -o psb_c_cp_hll_to_fmt.o -make -C linsolve mods -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -mpifort -frecursive -g -O3 -I. -I../modules -c psb_base_linsolve_conv_mod.f90 -o psb_base_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_linsolve_mod.f90 -o psb_linsolve_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_aclsum.f90 -o psb_c_dia_aclsum.o -make -C prec objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_prec_type_impl.f90 -o psb_s_prec_type_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins.f90 -o psb_cins.o -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_prec_type_impl.f90 -o psb_d_prec_type_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_allocate_mnnz.f90 -o psb_c_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_prec_type_impl.f90 -o psb_c_prec_type_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc.f90 -o psb_zallc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_arwsum.f90 -o psb_c_dia_arwsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb.f90 -o psb_zasb.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree.f90 -o psb_zfree.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_s_linsolve_conv_mod.f90 -o psb_s_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins.f90 -o psb_zins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mallc_a.f90 -o psb_mallc_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_colsum.f90 -o psb_c_dia_colsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_masb_a.f90 -o psb_masb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mfree_a.f90 -o psb_mfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetptn.f90 -o psb_c_dia_csgetptn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_mins_a.f90 -o psb_mins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eallc_a.f90 -o psb_eallc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_easb_a.f90 -o psb_easb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_efree_a.f90 -o psb_efree_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_eins_a.f90 -o psb_eins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sallc_a.f90 -o psb_sallc_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csgetrow.f90 -o psb_c_dia_csgetrow.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_c_linsolve_conv_mod.f90 -o psb_c_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sasb_a.f90 -o psb_sasb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sfree_a.f90 -o psb_sfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmm.f90 -o psb_c_dia_csmm.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_d_linsolve_conv_mod.f90 -o psb_d_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -c psb_z_linsolve_conv_mod.f90 -o psb_z_linsolve_conv_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_prec_type_impl.f90 -o psb_z_prec_type_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sins_a.f90 -o psb_sins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dallc_a.f90 -o psb_dallc_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_diagprec_impl.f90 -o psb_d_diagprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dasb_a.f90 -o psb_dasb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dfree_a.f90 -o psb_dfree_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dins_a.f90 -o psb_dins_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_csmv.f90 -o psb_c_dia_csmv.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_callc_a.f90 -o psb_callc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_casb_a.f90 -o psb_casb_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_get_diag.f90 -o psb_c_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_bjacprec_impl.f90 -o psb_d_bjacprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cfree_a.f90 -o psb_cfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_maxval.f90 -o psb_c_dia_maxval.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cins_a.f90 -o psb_cins_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zallc_a.f90 -o psb_zallc_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zasb_a.f90 -o psb_zasb_a.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zfree_a.f90 -o psb_zfree_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_mold.f90 -o psb_c_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_nullprec_impl.f90 -o psb_d_nullprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zins_a.f90 -o psb_zins_a.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilu0_fact.f90 -o psb_d_ilu0_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_print.f90 -o psb_c_dia_print.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspalloc.f90 -o psb_zspalloc.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reallocate_nz.f90 -o psb_c_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_iluk_fact.f90 -o psb_d_iluk_fact.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspasb.f90 -o psb_zspasb.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_reinit.f90 -o psb_c_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_rowsum.f90 -o psb_c_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scal.f90 -o psb_c_dia_scal.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_remap.F90 -o psb_z_remap.o -/usr/bin/install -c -p -p *.mod ../modules -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ilut_fact.f90 -o psb_d_ilut_fact.o -make -C cbind objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -cd base && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_objhandle_mod.F90 -o psb_objhandle_mod.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_base.c -o psb_c_base.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sbase.c -o psb_c_sbase.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dbase.c -o psb_c_dbase.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cbase.c -o psb_c_cbase.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zbase.c -o psb_c_zbase.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zspfree.f90 -o psb_zspfree.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_scomm.c -o psb_c_scomm.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dcomm.c -o psb_c_dcomm.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_ccomm.c -o psb_c_ccomm.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zcomm.c -o psb_c_zcomm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zspins.F90 -o psb_zspins.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cpenv_mod.F90 -o psb_cpenv_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zsprn.f90 -o psb_zsprn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecbld.f90 -o psb_dprecbld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dia_scals.f90 -o psb_c_dia_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dprecinit.f90 -o psb_dprecinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_aclsum.f90 -o psb_c_ell_aclsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspalloc.f90 -o psb_cspalloc.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspasb.f90 -o psb_cspasb.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_diagprec_impl.f90 -o psb_s_diagprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_remap.F90 -o psb_c_remap.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cspfree.f90 -o psb_cspfree.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cspins.F90 -o psb_cspins.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_csprn.f90 -o psb_csprn.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cd_set_bld.f90 -o psb_cd_set_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_bjacprec_impl.f90 -o psb_s_bjacprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_allocate_mnnz.f90 -o psb_c_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_map.f90 -o psb_s_map.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_map.f90 -o psb_d_map.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_arwsum.f90 -o psb_c_ell_arwsum.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_base_tools_cbind_mod.F90 -o psb_base_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_map.f90 -o psb_c_map.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_nullprec_impl.f90 -o psb_s_nullprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilu0_fact.f90 -o psb_s_ilu0_fact.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_map.f90 -o psb_z_map.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_s_par_csr_spspmm.f90 -o psb_s_par_csr_spspmm.o -make -C linsolve objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dkrylov.f90 -o psb_dkrylov.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_colsum.f90 -o psb_c_ell_colsum.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_d_par_csr_spspmm.f90 -o psb_d_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_iluk_fact.f90 -o psb_s_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_skrylov.f90 -o psb_skrylov.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ilut_fact.f90 -o psb_s_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetblk.f90 -o psb_c_ell_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetptn.f90 -o psb_c_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csgetrow.f90 -o psb_c_ell_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ckrylov.f90 -o psb_ckrylov.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_psblas_cbind_mod.f90 -o psb_s_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_psblas_cbind_mod.f90 -o psb_d_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_psblas_cbind_mod.f90 -o psb_c_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zkrylov.f90 -o psb_zkrylov.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecbld.f90 -o psb_sprecbld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sprecinit.f90 -o psb_sprecinit.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_psblas_cbind_mod.f90 -o psb_z_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmm.f90 -o psb_c_ell_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_diagprec_impl.f90 -o psb_c_diagprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_c_par_csr_spspmm.f90 -o psb_c_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_z_par_csr_spspmm.f90 -o psb_z_par_csr_spspmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drichardson.f90 -o psb_drichardson.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_glob_transpose.F90 -o psb_s_glob_transpose.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srichardson.f90 -o psb_srichardson.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_tools_cbind_mod.F90 -o psb_s_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csmv.f90 -o psb_c_ell_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_bjacprec_impl.f90 -o psb_c_bjacprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crichardson.f90 -o psb_crichardson.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrichardson.f90 -o psb_zrichardson.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_s_serial_cbind_mod.F90 -o psb_s_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_tools_cbind_mod.F90 -o psb_d_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_serial_cbind_mod.F90 -o psb_d_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstab.f90 -o psb_dcgstab.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dcg.F90 -o psb_dcg.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_d_glob_transpose.F90 -o psb_d_glob_transpose.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_tools_cbind_mod.F90 -o psb_c_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_serial_cbind_mod.F90 -o psb_c_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnm1.f90 -o psb_c_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dfcg.F90 -o psb_dfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_nullprec_impl.f90 -o psb_c_nullprec_impl.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_c_glob_transpose.F90 -o psb_c_glob_transpose.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dgcr.f90 -o psb_dgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgs.f90 -o psb_dcgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csnmi.f90 -o psb_c_ell_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilu0_fact.f90 -o psb_c_ilu0_fact.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_tools_cbind_mod.F90 -o psb_z_tools_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_serial_cbind_mod.F90 -o psb_z_serial_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_iluk_fact.f90 -o psb_c_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ilut_fact.f90 -o psb_c_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_csput.f90 -o psb_c_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dbicg.f90 -o psb_dbicg.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_comm_cbind_mod.f90 -o psb_s_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssm.f90 -o psb_c_ell_cssm.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_comm_cbind_mod.f90 -o psb_d_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_dcgstabl.f90 -o psb_dcgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecbld.f90 -o psb_cprecbld.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_comm_cbind_mod.f90 -o psb_c_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cprecinit.f90 -o psb_cprecinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drgmres.f90 -o psb_drgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_cssv.f90 -o psb_c_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstab.f90 -o psb_scgstab.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_z_glob_transpose.F90 -o psb_z_glob_transpose.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_cgetelem.f90 -o psb_cgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_diagprec_impl.f90 -o psb_z_diagprec_impl.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_comm_cbind_mod.f90 -o psb_z_comm_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_bjacprec_impl.f90 -o psb_z_bjacprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_nullprec_impl.f90 -o psb_z_nullprec_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_scg.F90 -o psb_scg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_get_diag.f90 -o psb_c_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_sfcg.F90 -o psb_sfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sgcr.f90 -o psb_sgcr.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_psblas_cbind_mod.f90 -o psb_base_psblas_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_dgetelem.f90 -o psb_dgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilu0_fact.f90 -o psb_z_ilu0_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgs.f90 -o psb_scgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_sbicg.f90 -o psb_sbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_maxval.f90 -o psb_c_ell_maxval.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_sgetelem.f90 -o psb_sgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_scgstabl.f90 -o psb_scgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srgmres.f90 -o psb_srgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstab.f90 -o psb_ccgstab.o -mpifort -frecursive -g -O3 -I. -I../modules -I.. -I../modules -c psb_zgetelem.f90 -o psb_zgetelem.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_iluk_fact.f90 -o psb_z_iluk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ccg.F90 -o psb_ccg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ilut_fact.f90 -o psb_z_ilut_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecbld.f90 -o psb_zprecbld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_mold.f90 -o psb_c_ell_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_cfcg.F90 -o psb_cfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cgcr.f90 -o psb_cgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgs.f90 -o psb_ccgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_cbicg.f90 -o psb_cbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_ccgstabl.f90 -o psb_ccgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_print.f90 -o psb_c_ell_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crgmres.f90 -o psb_crgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reallocate_nz.f90 -o psb_c_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_reinit.f90 -o psb_c_ell_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zprecinit.f90 -o psb_zprecinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_rowsum.f90 -o psb_c_ell_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scal.f90 -o psb_c_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstab.f90 -o psb_zcgstab.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zcg.F90 -o psb_zcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_scals.f90 -o psb_c_ell_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zfcg.F90 -o psb_zfcg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zgcr.f90 -o psb_zgcr.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sparsify.f90 -o psb_c_sparsify.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgs.f90 -o psb_zcgs.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_ell_trim.f90 -o psb_c_ell_trim.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_allocate_mnnz.f90 -o psb_c_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zbicg.f90 -o psb_zbicg.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sparsify.f90 -o psb_d_sparsify.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sparsify.f90 -o psb_s_sparsify.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zcgstabl.f90 -o psb_zcgstabl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrgmres.f90 -o psb_zrgmres.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sparsify.f90 -o psb_z_sparsify.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_csmv.f90 -o psb_c_hdia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_mold.f90 -o psb_c_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_crwclip.f90 -o psb_crwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hdia_print.f90 -o psb_c_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_aclsum.f90 -o psb_c_hll_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_drwclip.f90 -o psb_drwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_srwclip.f90 -o psb_srwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_allocate_mnnz.f90 -o psb_c_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_arwsum.f90 -o psb_c_hll_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_zrwclip.f90 -o psb_zrwclip.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_sp_drop.f90 -o psb_c_sp_drop.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_colsum.f90 -o psb_c_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetblk.f90 -o psb_c_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_sp_drop.f90 -o psb_d_sp_drop.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_sp_drop.f90 -o psb_s_sp_drop.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_sp_drop.f90 -o psb_z_sp_drop.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk_noth.F90 -o psb_dsparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetptn.f90 -o psb_c_hll_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csgetrow.f90 -o psb_c_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmm.f90 -o psb_c_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_llk.F90 -o psb_dsparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_mlk.F90 -o psb_dsparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csmv.f90 -o psb_c_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnm1.f90 -o psb_c_hll_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_ft_llk.F90 -o psb_dsparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_dsparse_biconjg_s_llk.F90 -o psb_dsparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk_noth.F90 -o psb_csparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_llk.F90 -o psb_csparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_mlk.F90 -o psb_csparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csnmi.f90 -o psb_c_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_csput.f90 -o psb_c_hll_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_ft_llk.F90 -o psb_csparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssm.f90 -o psb_c_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_csparse_biconjg_s_llk.F90 -o psb_csparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_cbind_mod.f90 -o psb_base_cbind_mod.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_cssv.f90 -o psb_c_hll_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk_noth.F90 -o psb_zsparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_get_diag.f90 -o psb_c_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_maxval.f90 -o psb_c_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_mold.f90 -o psb_c_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_llk.F90 -o psb_zsparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_print.f90 -o psb_c_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_mlk.F90 -o psb_zsparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_ft_llk.F90 -o psb_zsparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_zsparse_biconjg_s_llk.F90 -o psb_zsparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk_noth.F90 -o psb_ssparse_biconjg_llk_noth.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reallocate_nz.f90 -o psb_c_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_reinit.f90 -o psb_c_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_rowsum.f90 -o psb_c_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scal.f90 -o psb_c_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_llk.F90 -o psb_ssparse_biconjg_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_mlk.F90 -o psb_ssparse_biconjg_mlk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_hll_scals.f90 -o psb_c_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_dia_from_coo.f90 -o psb_c_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_ft_llk.F90 -o psb_ssparse_biconjg_s_ft_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_coo.f90 -o psb_c_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -DPSB_HAVE_LAPACK -DPSB_HAVE_FLUSH_STMT -DPSB_LPK8 -DPSB_IPK4 -DPSB_MPI_MOD -c psb_ssparse_biconjg_s_llk.F90 -o psb_ssparse_biconjg_s_llk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_from_fmt.f90 -o psb_c_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_coo.f90 -o psb_c_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_ainv_bld.f90 -o psb_d_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_ell_to_fmt.f90 -o psb_c_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_from_coo.f90 -o psb_c_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hdia_to_coo.f90 -o psb_c_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_coo.f90 -o psb_c_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_from_fmt.f90 -o psb_c_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_ainv_bld.f90 -o psb_c_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_ainv_bld.f90 -o psb_s_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_coo.f90 -o psb_c_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_ainv_bld.f90 -o psb_z_ainv_bld.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invt_fact.f90 -o psb_c_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_mv_hll_to_fmt.f90 -o psb_c_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invt_fact.f90 -o psb_d_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_from_coo.f90 -o psb_d_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_dia_to_coo.f90 -o psb_d_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_coo.f90 -o psb_d_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_from_fmt.f90 -o psb_d_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invt_fact.f90 -o psb_s_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_coo.f90 -o psb_d_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invt_fact.f90 -o psb_z_invt_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_ell_to_fmt.f90 -o psb_d_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_c_invk_fact.f90 -o psb_c_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_from_coo.f90 -o psb_d_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hdia_to_coo.f90 -o psb_d_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_d_invk_fact.f90 -o psb_d_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_coo.f90 -o psb_d_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_from_fmt.f90 -o psb_d_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_coo.f90 -o psb_d_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_cp_hll_to_fmt.f90 -o psb_d_cp_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_aclsum.f90 -o psb_d_dia_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_s_invk_fact.f90 -o psb_s_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_allocate_mnnz.f90 -o psb_d_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_arwsum.f90 -o psb_d_dia_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_colsum.f90 -o psb_d_dia_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetptn.f90 -o psb_d_dia_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -c psb_z_invk_fact.f90 -o psb_z_invk_fact.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csgetrow.f90 -o psb_d_dia_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmm.f90 -o psb_d_dia_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_csmv.f90 -o psb_d_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_get_diag.f90 -o psb_d_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_maxval.f90 -o psb_d_dia_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_mold.f90 -o psb_d_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_print.f90 -o psb_d_dia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reallocate_nz.f90 -o psb_d_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_reinit.f90 -o psb_d_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_rowsum.f90 -o psb_d_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scal.f90 -o psb_d_dia_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dia_scals.f90 -o psb_d_dia_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_aclsum.f90 -o psb_d_ell_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_allocate_mnnz.f90 -o psb_d_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_arwsum.f90 -o psb_d_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_colsum.f90 -o psb_d_ell_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetblk.f90 -o psb_d_ell_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetptn.f90 -o psb_d_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csgetrow.f90 -o psb_d_ell_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmm.f90 -o psb_d_ell_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csmv.f90 -o psb_d_ell_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnm1.f90 -o psb_d_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csnmi.f90 -o psb_d_ell_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_csput.f90 -o psb_d_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssm.f90 -o psb_d_ell_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_cssv.f90 -o psb_d_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_get_diag.f90 -o psb_d_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_maxval.f90 -o psb_d_ell_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_mold.f90 -o psb_d_ell_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_print.f90 -o psb_d_ell_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reallocate_nz.f90 -o psb_d_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_reinit.f90 -o psb_d_ell_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_rowsum.f90 -o psb_d_ell_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scal.f90 -o psb_d_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_scals.f90 -o psb_d_ell_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_ell_trim.f90 -o psb_d_ell_trim.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_allocate_mnnz.f90 -o psb_d_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_csmv.f90 -o psb_d_hdia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_mold.f90 -o psb_d_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hdia_print.f90 -o psb_d_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_aclsum.f90 -o psb_d_hll_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_allocate_mnnz.f90 -o psb_d_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_arwsum.f90 -o psb_d_hll_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_colsum.f90 -o psb_d_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetblk.f90 -o psb_d_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetptn.f90 -o psb_d_hll_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csgetrow.f90 -o psb_d_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmm.f90 -o psb_d_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csmv.f90 -o psb_d_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnm1.f90 -o psb_d_hll_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csnmi.f90 -o psb_d_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_csput.f90 -o psb_d_hll_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssm.f90 -o psb_d_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_cssv.f90 -o psb_d_hll_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_get_diag.f90 -o psb_d_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_maxval.f90 -o psb_d_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_mold.f90 -o psb_d_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_print.f90 -o psb_d_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reallocate_nz.f90 -o psb_d_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_reinit.f90 -o psb_d_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_rowsum.f90 -o psb_d_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scal.f90 -o psb_d_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_hll_scals.f90 -o psb_d_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_dia_from_coo.f90 -o psb_d_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_coo.f90 -o psb_d_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_from_fmt.f90 -o psb_d_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_coo.f90 -o psb_d_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_ell_to_fmt.f90 -o psb_d_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_from_coo.f90 -o psb_d_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hdia_to_coo.f90 -o psb_d_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_coo.f90 -o psb_d_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_from_fmt.f90 -o psb_d_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_coo.f90 -o psb_d_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_mv_hll_to_fmt.f90 -o psb_d_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_from_coo.f90 -o psb_z_cp_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_dia_to_coo.f90 -o psb_z_cp_dia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_coo.f90 -o psb_z_cp_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_from_fmt.f90 -o psb_z_cp_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_coo.f90 -o psb_z_cp_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_ell_to_fmt.f90 -o psb_z_cp_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_from_coo.f90 -o psb_z_cp_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hdia_to_coo.f90 -o psb_z_cp_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_coo.f90 -o psb_z_cp_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_from_fmt.f90 -o psb_z_cp_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_coo.f90 -o psb_z_cp_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_cp_hll_to_fmt.f90 -o psb_z_cp_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_aclsum.f90 -o psb_z_dia_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_allocate_mnnz.f90 -o psb_z_dia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_arwsum.f90 -o psb_z_dia_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_colsum.f90 -o psb_z_dia_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetptn.f90 -o psb_z_dia_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csgetrow.f90 -o psb_z_dia_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmm.f90 -o psb_z_dia_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_csmv.f90 -o psb_z_dia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_get_diag.f90 -o psb_z_dia_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_maxval.f90 -o psb_z_dia_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_mold.f90 -o psb_z_dia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_print.f90 -o psb_z_dia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reallocate_nz.f90 -o psb_z_dia_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_reinit.f90 -o psb_z_dia_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_rowsum.f90 -o psb_z_dia_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scal.f90 -o psb_z_dia_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dia_scals.f90 -o psb_z_dia_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_aclsum.f90 -o psb_z_ell_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_allocate_mnnz.f90 -o psb_z_ell_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_arwsum.f90 -o psb_z_ell_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_colsum.f90 -o psb_z_ell_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetblk.f90 -o psb_z_ell_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetptn.f90 -o psb_z_ell_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csgetrow.f90 -o psb_z_ell_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmm.f90 -o psb_z_ell_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csmv.f90 -o psb_z_ell_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnm1.f90 -o psb_z_ell_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csnmi.f90 -o psb_z_ell_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_csput.f90 -o psb_z_ell_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssm.f90 -o psb_z_ell_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_cssv.f90 -o psb_z_ell_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_get_diag.f90 -o psb_z_ell_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_maxval.f90 -o psb_z_ell_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_mold.f90 -o psb_z_ell_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_print.f90 -o psb_z_ell_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reallocate_nz.f90 -o psb_z_ell_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_reinit.f90 -o psb_z_ell_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_rowsum.f90 -o psb_z_ell_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scal.f90 -o psb_z_ell_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_scals.f90 -o psb_z_ell_scals.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_ell_trim.f90 -o psb_z_ell_trim.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_allocate_mnnz.f90 -o psb_z_hdia_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_csmv.f90 -o psb_z_hdia_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_mold.f90 -o psb_z_hdia_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hdia_print.f90 -o psb_z_hdia_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_aclsum.f90 -o psb_z_hll_aclsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_allocate_mnnz.f90 -o psb_z_hll_allocate_mnnz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_arwsum.f90 -o psb_z_hll_arwsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_colsum.f90 -o psb_z_hll_colsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetblk.f90 -o psb_z_hll_csgetblk.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetptn.f90 -o psb_z_hll_csgetptn.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csgetrow.f90 -o psb_z_hll_csgetrow.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmm.f90 -o psb_z_hll_csmm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csmv.f90 -o psb_z_hll_csmv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnm1.f90 -o psb_z_hll_csnm1.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csnmi.f90 -o psb_z_hll_csnmi.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_csput.f90 -o psb_z_hll_csput.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssm.f90 -o psb_z_hll_cssm.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_cssv.f90 -o psb_z_hll_cssv.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_get_diag.f90 -o psb_z_hll_get_diag.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_maxval.f90 -o psb_z_hll_maxval.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_mold.f90 -o psb_z_hll_mold.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_print.f90 -o psb_z_hll_print.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reallocate_nz.f90 -o psb_z_hll_reallocate_nz.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_reinit.f90 -o psb_z_hll_reinit.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_rowsum.f90 -o psb_z_hll_rowsum.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scal.f90 -o psb_z_hll_scal.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_hll_scals.f90 -o psb_z_hll_scals.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_dia_from_coo.f90 -o psb_z_mv_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_coo.f90 -o psb_z_mv_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_from_fmt.f90 -o psb_z_mv_ell_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_coo.f90 -o psb_z_mv_ell_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_ell_to_fmt.f90 -o psb_z_mv_ell_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_from_coo.f90 -o psb_z_mv_hdia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hdia_to_coo.f90 -o psb_z_mv_hdia_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_coo.f90 -o psb_z_mv_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_from_fmt.f90 -o psb_z_mv_hll_from_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_coo.f90 -o psb_z_mv_hll_to_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_mv_hll_to_fmt.f90 -o psb_z_mv_hll_to_fmt.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_ell_from_coo.f90 -o psi_s_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_ell_from_coo.f90 -o psi_c_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_ell_from_coo.f90 -o psi_d_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_ell_from_coo.f90 -o psi_z_xtr_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_ell_from_coo.f90 -o psi_s_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_ell_from_coo.f90 -o psi_c_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_ell_from_coo.f90 -o psi_d_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_ell_from_coo.f90 -o psi_z_convert_ell_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_hll_from_coo.f90 -o psi_s_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_hll_from_coo.f90 -o psi_c_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_hll_from_coo.f90 -o psi_d_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_hll_from_coo.f90 -o psi_z_convert_hll_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_dia_from_coo.f90 -o psi_s_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_dia_from_coo.f90 -o psi_c_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_dia_from_coo.f90 -o psi_d_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_dia_from_coo.f90 -o psi_z_xtr_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_xtr_coo_from_dia.f90 -o psi_s_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_xtr_coo_from_dia.f90 -o psi_d_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_xtr_coo_from_dia.f90 -o psi_c_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_xtr_coo_from_dia.f90 -o psi_z_xtr_coo_from_dia.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_s_convert_dia_from_coo.f90 -o psi_s_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_c_convert_dia_from_coo.f90 -o psi_c_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_d_convert_dia_from_coo.f90 -o psi_d_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psi_z_convert_dia_from_coo.f90 -o psi_z_convert_dia_from_coo.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_s_dns_mat_impl.f90 -o psb_s_dns_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_d_dns_mat_impl.f90 -o psb_d_dns_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_c_dns_mat_impl.f90 -o psb_c_dns_mat_impl.o -mpifort -frecursive -g -O3 -I.. -I../../modules -I../../include -I.. -c psb_z_dns_mat_impl.f90 -o psb_z_dns_mat_impl.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make objs LIBNAME=libpsb_cbind.a -cd util && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_sprec_cbind_mod.f90 -o psb_sprec_cbind_mod.o -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_c_util_cbind_mod.f90 -o psb_c_util_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dprec_cbind_mod.f90 -o psb_dprec_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_d_util_cbind_mod.f90 -o psb_d_util_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_cprec_cbind_mod.f90 -o psb_cprec_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_s_util_cbind_mod.f90 -o psb_s_util_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zprec_cbind_mod.f90 -o psb_zprec_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_z_util_cbind_mod.f90 -o psb_z_util_cbind_mod.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_sprec.c -o psb_c_sprec.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_dprec.c -o psb_c_dprec.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_cprec.c -o psb_c_cprec.o -mpicc -g -O3 -I. -I.. -I../../include -c psb_c_zprec.c -o psb_c_zprec.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_prec_cbind_mod.f90 -o psb_prec_cbind_mod.o -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_base_linsolve_cbind_mod.f90 -o psb_base_linsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_slinsolve_cbind_mod.f90 -o psb_slinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_dlinsolve_cbind_mod.f90 -o psb_dlinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_clinsolve_cbind_mod.f90 -o psb_clinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_zlinsolve_cbind_mod.f90 -o psb_zlinsolve_cbind_mod.o -mpifort -frecursive -g -O3 -I. -I.. -I../../modules -c psb_util_cbind_mod.f90 -o psb_util_cbind_mod.o -/bin/cp -p *.mod psb_linsolve_cbind.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.h ../include -/bin/cp -p *.mod ../modules/ -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -make -C cbind objs -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -cd base && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make objs LIBNAME=libpsb_cbind.a -cd util && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_linsolve_cbind.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.h ../include -/bin/cp -p *.mod ../modules/ -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -make -C base lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C modules objs F90="" F90COPT=" " -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -/usr/bin/install -c -p -p *.mod ../../modules -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make -C serial objs -make -C comm objs -make -C auxil objs -make -C psblas objs -make -C tools objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C internals objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") -make -C sort objs -make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[3]: «psb_dscatter.o» è aggiornato. -make[3]: «psi_desc_index.o» è aggiornato. -make[3]: «psb_zscatter.o» è aggiornato. -make[3]: «psi_fnd_owner.o» è aggiornato. -make[3]: «psb_iscatter.o» è aggiornato. -make[3]: «psi_a2a_fnd_owner.o» è aggiornato. -make[3]: «psb_lscatter.o» è aggiornato. -make[3]: «psi_graph_fnd_owner.o» è aggiornato. -make[3]: «psb_cscatter.o» è aggiornato. -make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. -make[3]: «psb_sscatter.o» è aggiornato. -make[3]: «psi_symm_dep_list.o» è aggiornato. -make[3]: «psb_dscatter_a.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: «psb_zscatter_a.o» è aggiornato. -make[3]: «psb_mscatter_a.o» è aggiornato. -make[3]: «psb_escatter_a.o» è aggiornato. -make[3]: «psb_cscatter_a.o» è aggiornato. -make[3]: «psb_sscatter_a.o» è aggiornato. -make[3]: «psb_dspgather.o» è aggiornato. -make[3]: «psb_sspgather.o» è aggiornato. -make[3]: «psb_zspgather.o» è aggiornato. -make[3]: «psb_cspgather.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: «psb_icdasb.o» è aggiornato. -make[3]: «psb_ssphalo.o» è aggiornato. -make[3]: «psb_dsphalo.o» è aggiornato. -make[3]: «psb_csphalo.o» è aggiornato. -make[3]: «psb_zsphalo.o» è aggiornato. -make[3]: «psb_dcdbldext.o» è aggiornato. -make[3]: «psb_zcdbldext.o» è aggiornato. -make[3]: «psb_scdbldext.o» è aggiornato. -make[3]: «psb_ccdbldext.o» è aggiornato. -make[3]: «psb_s_remote_mat.o» è aggiornato. -make[3]: «psb_d_remote_mat.o» è aggiornato. -make[3]: «psb_c_remote_mat.o» è aggiornato. -make[3]: «psb_z_remote_mat.o» è aggiornato. -make[3]: «psb_s_remote_vect.o» è aggiornato. -make[3]: «psb_d_remote_vect.o» è aggiornato. -make[3]: «psb_c_remote_vect.o» è aggiornato. -make[3]: «psb_z_remote_vect.o» è aggiornato. -make[3]: «psb_e_remote_vect.o» è aggiornato. -make[3]: «psb_m_remote_vect.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -make[4]: «psi_lswapdata.o» è aggiornato. -make[4]: «psi_lswaptran.o» è aggiornato. -make[4]: «psi_cswapdata.o» è aggiornato. -make[4]: «psi_cswaptran.o» è aggiornato. -make[4]: «psi_zswapdata.o» è aggiornato. -make[4]: «psi_zswaptran.o» è aggiornato. -make[4]: «psi_dswapdata_a.o» è aggiornato. -make[4]: «psi_dswaptran_a.o» è aggiornato. -make[4]: «psi_sswapdata_a.o» è aggiornato. -make[4]: «psi_sswaptran_a.o» è aggiornato. -make[4]: «psi_mswapdata_a.o» è aggiornato. -make[4]: «psi_mswaptran_a.o» è aggiornato. -make[4]: «psi_eswapdata_a.o» è aggiornato. -make[4]: «psi_eswaptran_a.o» è aggiornato. -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C modules lib LIBNAME=libpsb_base.a F90="" F90COPT=" " -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -/usr/bin/install -c -p -p *.mod ../../modules -/usr/bin/install -c -p -p psb_config.h psb_types.h ../../include -ar -cDr ..//libpsb_base.a psb_const_mod.o psb_cbind_const_mod.o psb_error_mod.o psb_realloc_mod.o auxil/psb_string_mod.o auxil/psb_m_realloc_mod.o auxil/psb_e_realloc_mod.o auxil/psb_s_realloc_mod.o auxil/psb_d_realloc_mod.o auxil/psb_c_realloc_mod.o auxil/psb_z_realloc_mod.o serial/psb_s_serial_mod.o serial/psb_d_serial_mod.o serial/psb_c_serial_mod.o serial/psb_z_serial_mod.o serial/psb_serial_mod.o comm/psb_neighbor_topology_mod.o serial/psb_i_base_vect_mod.o serial/psb_i_vect_mod.o serial/psb_l_base_vect_mod.o serial/psb_l_vect_mod.o serial/psb_d_base_vect_mod.o serial/psb_d_vect_mod.o serial/psb_s_base_vect_mod.o serial/psb_s_vect_mod.o serial/psb_c_base_vect_mod.o serial/psb_c_vect_mod.o serial/psb_z_base_vect_mod.o serial/psb_z_vect_mod.o serial/psb_vect_mod.o auxil/psi_serial_mod.o auxil/psi_m_serial_mod.o auxil/psi_e_serial_mod.o auxil/psi_s_serial_mod.o auxil/psi_d_serial_mod.o auxil/psi_c_serial_mod.o auxil/psi_z_serial_mod.o psi_mod.o psi_i_mod.o psi_l_mod.o psi_s_mod.o psi_d_mod.o psi_c_mod.o psi_z_mod.o auxil/psb_ip_reord_mod.o auxil/psi_acx_mod.o auxil/psi_alcx_mod.o auxil/psi_lcx_mod.o auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o auxil/psb_m_hsort_mod.o auxil/psb_m_isort_mod.o auxil/psb_m_msort_mod.o auxil/psb_m_qsort_mod.o auxil/psb_e_hsort_mod.o auxil/psb_e_isort_mod.o auxil/psb_e_msort_mod.o auxil/psb_e_qsort_mod.o auxil/psb_s_hsort_mod.o auxil/psb_s_isort_mod.o auxil/psb_s_msort_mod.o auxil/psb_s_qsort_mod.o auxil/psb_d_hsort_mod.o auxil/psb_d_isort_mod.o auxil/psb_d_msort_mod.o auxil/psb_d_qsort_mod.o auxil/psb_c_hsort_mod.o auxil/psb_c_isort_mod.o auxil/psb_c_msort_mod.o auxil/psb_c_qsort_mod.o auxil/psb_z_hsort_mod.o auxil/psb_z_isort_mod.o auxil/psb_z_msort_mod.o auxil/psb_z_qsort_mod.o auxil/psb_i_hsort_x_mod.o auxil/psb_l_hsort_x_mod.o auxil/psb_s_hsort_x_mod.o auxil/psb_d_hsort_x_mod.o auxil/psb_c_hsort_x_mod.o auxil/psb_z_hsort_x_mod.o auxil/psb_s_rb_idx_tree_mod.o auxil/psb_d_rb_idx_tree_mod.o auxil/psb_c_rb_idx_tree_mod.o auxil/psb_z_rb_idx_tree_mod.o auxil/psb_rb_idx_tree_mod.o serial/psb_base_mat_mod.o serial/psb_mat_mod.o serial/psb_s_base_mat_mod.o serial/psb_s_csr_mat_mod.o serial/psb_s_csc_mat_mod.o serial/psb_s_mat_mod.o serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_mat_mod.o serial/psb_c_base_mat_mod.o serial/psb_c_csr_mat_mod.o serial/psb_c_csc_mat_mod.o serial/psb_c_mat_mod.o serial/psb_z_base_mat_mod.o serial/psb_z_csr_mat_mod.o serial/psb_z_csc_mat_mod.o serial/psb_z_mat_mod.o desc/psb_desc_const_mod.o desc/psb_indx_map_mod.o desc/psb_gen_block_map_mod.o desc/psb_list_map_mod.o desc/psb_repl_map_mod.o desc/psb_glist_map_mod.o desc/psb_hash_map_mod.o desc/psb_hashval.o desc/psb_desc_mod.o auxil/psb_sort_mod.o tools/psb_cd_tools_mod.o tools/psb_i_tools_mod.o tools/psb_l_tools_mod.o tools/psb_s_tools_mod.o tools/psb_d_tools_mod.o tools/psb_c_tools_mod.o tools/psb_z_tools_mod.o tools/psb_m_tools_a_mod.o tools/psb_e_tools_a_mod.o tools/psb_s_tools_a_mod.o tools/psb_d_tools_a_mod.o tools/psb_c_tools_a_mod.o tools/psb_z_tools_a_mod.o tools/psb_tools_mod.o psb_penv_mod.o penv/psi_penv_mod.o penv/psi_p2p_mod.o penv/psi_m_p2p_mod.o penv/psi_i2_p2p_mod.o penv/psi_e_p2p_mod.o penv/psi_s_p2p_mod.o penv/psi_d_p2p_mod.o penv/psi_c_p2p_mod.o penv/psi_z_p2p_mod.o penv/psi_collective_mod.o penv/psi_i2_collective_mod.o penv/psi_e_collective_mod.o penv/psi_m_collective_mod.o penv/psi_s_collective_mod.o penv/psi_d_collective_mod.o penv/psi_c_collective_mod.o penv/psi_z_collective_mod.o psb_error_impl.o psb_timers_mod.o comm/psb_base_linmap_mod.o comm/psb_linmap_mod.o comm/psb_s_linmap_mod.o comm/psb_d_linmap_mod.o comm/psb_c_linmap_mod.o comm/psb_z_linmap_mod.o comm/psb_comm_mod.o comm/psb_i_comm_mod.o comm/psb_l_comm_mod.o comm/psb_s_comm_mod.o comm/psb_d_comm_mod.o comm/psb_c_comm_mod.o comm/psb_z_comm_mod.o comm/psb_m_comm_a_mod.o comm/psb_e_comm_a_mod.o comm/psb_s_comm_a_mod.o comm/psb_d_comm_a_mod.o comm/psb_c_comm_a_mod.o comm/psb_z_comm_a_mod.o comm/psi_e_comm_a_mod.o comm/psi_m_comm_a_mod.o comm/psi_s_comm_a_mod.o comm/psi_d_comm_a_mod.o comm/psi_c_comm_a_mod.o comm/psi_z_comm_a_mod.o comm/psi_i_comm_v_mod.o comm/psi_l_comm_v_mod.o comm/psi_s_comm_v_mod.o comm/psi_d_comm_v_mod.o comm/psi_c_comm_v_mod.o comm/psi_z_comm_v_mod.o psblas/psb_s_psblas_mod.o psblas/psb_c_psblas_mod.o psblas/psb_d_psblas_mod.o psblas/psb_z_psblas_mod.o psblas/psb_psblas_mod.o psb_check_mod.o desc/psb_hash_mod.o error.o psb_base_mod.o cutil.o -ranlib ..//libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/modules» -make -C serial lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C impl objs -make -C sort objs -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make[3]: Nessuna operazione da eseguire per «objs». -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -make -C impl lib -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -ar -cDr ../../libpsb_base.a psb_base_mat_impl.o psb_s_base_mat_impl.o psb_d_base_mat_impl.o psb_c_base_mat_impl.o psb_z_base_mat_impl.o psb_s_csr_impl.o psb_s_coo_impl.o psb_s_csc_impl.o psb_s_mat_impl.o psb_s_rb_idx_tree_impl.o psb_d_csr_impl.o psb_d_coo_impl.o psb_d_csc_impl.o psb_d_mat_impl.o psb_d_rb_idx_tree_impl.o psb_c_csr_impl.o psb_c_coo_impl.o psb_c_csc_impl.o psb_c_mat_impl.o psb_c_rb_idx_tree_impl.o psb_z_csr_impl.o psb_z_coo_impl.o psb_z_csc_impl.o psb_z_mat_impl.o psb_z_rb_idx_tree_impl.o -ranlib ../../libpsb_base.a -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/impl» -make -C sort lib -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -ar -cDr ../../libpsb_base.a psb_s_hsort_impl.o psb_s_isort_impl.o psb_s_msort_impl.o psb_s_qsort_impl.o psb_d_hsort_impl.o psb_d_isort_impl.o psb_d_msort_impl.o psb_d_qsort_impl.o psb_c_hsort_impl.o psb_c_isort_impl.o psb_c_msort_impl.o psb_c_qsort_impl.o psb_z_hsort_impl.o psb_z_isort_impl.o psb_z_msort_impl.o psb_z_qsort_impl.o psb_m_hsort_impl.o psb_m_isort_impl.o psb_m_msort_impl.o psb_m_qsort_impl.o psb_e_hsort_impl.o psb_e_isort_impl.o psb_e_msort_impl.o psb_e_qsort_impl.o -ranlib ../../libpsb_base.a -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial/sort» -ar -cDr ../libpsb_base.a psb_lsame.o psi_m_serial_impl.o psi_e_serial_impl.o psi_s_serial_impl.o psi_d_serial_impl.o psi_c_serial_impl.o psi_z_serial_impl.o psb_srwextd.o psb_drwextd.o psb_crwextd.o psb_zrwextd.o psb_sspspmm.o psb_dspspmm.o psb_cspspmm.o psb_zspspmm.o psb_ssymbmm.o psb_dsymbmm.o psb_csymbmm.o psb_zsymbmm.o psb_snumbmm.o psb_dnumbmm.o psb_cnumbmm.o psb_znumbmm.o smmp.o lsmmp.o psb_sgeprt.o psb_dgeprt.o psb_cgeprt.o psb_zgeprt.o psb_spdot_srtd.o psb_aspxpby.o psb_spge_dot.o psb_saplusat.o psb_daplusat.o psb_caplusat.o psb_zaplusat.o psb_samax_s.o psb_damax_s.o psb_camax_s.o psb_zamax_s.o psb_sasum_s.o psb_dasum_s.o psb_casum_s.o psb_zasum_s.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/serial» -make -C comm lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C internals objs -make psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o FC="mpifort" -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[3]: «psb_dscatter.o» è aggiornato. -make[3]: «psb_zscatter.o» è aggiornato. -make[3]: «psb_iscatter.o» è aggiornato. -make[3]: «psb_lscatter.o» è aggiornato. -make[3]: «psb_cscatter.o» è aggiornato. -make[3]: «psb_sscatter.o» è aggiornato. -make[3]: «psb_dscatter_a.o» è aggiornato. -make[3]: «psb_zscatter_a.o» è aggiornato. -make[3]: «psb_mscatter_a.o» è aggiornato. -make[3]: «psb_escatter_a.o» è aggiornato. -make[3]: «psb_cscatter_a.o» è aggiornato. -make[3]: «psb_sscatter_a.o» è aggiornato. -make[3]: «psb_dspgather.o» è aggiornato. -make[3]: «psb_sspgather.o» è aggiornato. -make[3]: «psb_zspgather.o» è aggiornato. -make[3]: «psb_cspgather.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -make[4]: «psi_lswapdata.o» è aggiornato. -make[4]: «psi_lswaptran.o» è aggiornato. -make[4]: «psi_cswapdata.o» è aggiornato. -make[4]: «psi_cswaptran.o» è aggiornato. -make[4]: «psi_zswapdata.o» è aggiornato. -make[4]: «psi_zswaptran.o» è aggiornato. -make[4]: «psi_dswapdata_a.o» è aggiornato. -make[4]: «psi_dswaptran_a.o» è aggiornato. -make[4]: «psi_sswapdata_a.o» è aggiornato. -make[4]: «psi_sswaptran_a.o» è aggiornato. -make[4]: «psi_mswapdata_a.o» è aggiornato. -make[4]: «psi_mswaptran_a.o» è aggiornato. -make[4]: «psi_eswapdata_a.o» è aggiornato. -make[4]: «psi_eswaptran_a.o» è aggiornato. -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make -C internals lib LIBNAME=libpsb_base.a -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -(make psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o FC="mpifort" ) -make[4]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -make[4]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[4]: «psi_dswapdata.o» è aggiornato. -make[4]: «psi_dswaptran.o» è aggiornato. -make[4]: «psi_sswapdata.o» è aggiornato. -make[4]: «psi_sswaptran.o» è aggiornato. -make[4]: «psi_iswapdata.o» è aggiornato. -make[4]: «psi_iswaptran.o» è aggiornato. -make[4]: «psi_lswapdata.o» è aggiornato. -make[4]: «psi_lswaptran.o» è aggiornato. -make[4]: «psi_cswapdata.o» è aggiornato. -make[4]: «psi_cswaptran.o» è aggiornato. -make[4]: «psi_zswapdata.o» è aggiornato. -make[4]: «psi_zswaptran.o» è aggiornato. -make[4]: «psi_dswapdata_a.o» è aggiornato. -make[4]: «psi_dswaptran_a.o» è aggiornato. -make[4]: «psi_sswapdata_a.o» è aggiornato. -make[4]: «psi_sswaptran_a.o» è aggiornato. -make[4]: «psi_mswapdata_a.o» è aggiornato. -make[4]: «psi_mswaptran_a.o» è aggiornato. -make[4]: «psi_eswapdata_a.o» è aggiornato. -make[4]: «psi_eswaptran_a.o» è aggiornato. -make[4]: «psi_cswapdata_a.o» è aggiornato. -make[4]: «psi_cswaptran_a.o» è aggiornato. -make[4]: «psi_zswapdata_a.o» è aggiornato. -make[4]: «psi_zswaptran_a.o» è aggiornato. -make[4]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -ar -cDr ../../libpsb_base.a psi_dswapdata.o psi_dswaptran.o psi_sswapdata.o psi_sswaptran.o psi_iswapdata.o psi_iswaptran.o psi_lswapdata.o psi_lswaptran.o psi_cswapdata.o psi_cswaptran.o psi_zswapdata.o psi_zswaptran.o psi_dswapdata_a.o psi_dswaptran_a.o psi_sswapdata_a.o psi_sswaptran_a.o psi_mswapdata_a.o psi_mswaptran_a.o psi_eswapdata_a.o psi_eswaptran_a.o psi_cswapdata_a.o psi_cswaptran_a.o psi_zswapdata_a.o psi_zswaptran_a.o psi_iovrl_restr.o psi_iovrl_save.o psi_iovrl_upd.o psi_lovrl_restr.o psi_lovrl_save.o psi_lovrl_upd.o psi_sovrl_restr.o psi_sovrl_save.o psi_sovrl_upd.o psi_dovrl_restr.o psi_dovrl_save.o psi_dovrl_upd.o psi_covrl_restr.o psi_covrl_save.o psi_covrl_upd.o psi_zovrl_restr.o psi_zovrl_save.o psi_zovrl_upd.o psi_movrl_restr_a.o psi_movrl_save_a.o psi_movrl_upd_a.o psi_eovrl_restr_a.o psi_eovrl_save_a.o psi_eovrl_upd_a.o psi_sovrl_restr_a.o psi_sovrl_save_a.o psi_sovrl_upd_a.o psi_dovrl_restr_a.o psi_dovrl_save_a.o psi_dovrl_upd_a.o psi_covrl_restr_a.o psi_covrl_save_a.o psi_covrl_upd_a.o psi_zovrl_restr_a.o psi_zovrl_save_a.o psi_zovrl_upd_a.o -ranlib ../../libpsb_base.a -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm/internals» -ar -cDr ../libpsb_base.a psb_dscatter.o psb_zscatter.o psb_iscatter.o psb_lscatter.o psb_cscatter.o psb_sscatter.o psb_dscatter_a.o psb_zscatter_a.o psb_mscatter_a.o psb_escatter_a.o psb_cscatter_a.o psb_sscatter_a.o psb_dspgather.o psb_sspgather.o psb_zspgather.o psb_cspgather.o psb_dgather.o psb_dhalo.o psb_dovrl.o psb_sgather.o psb_shalo.o psb_sovrl.o psb_igather.o psb_ihalo.o psb_iovrl.o psb_lgather.o psb_lhalo.o psb_lovrl.o psb_cgather.o psb_chalo.o psb_covrl.o psb_zgather.o psb_zhalo.o psb_zovrl.o psb_dgather_a.o psb_dhalo_a.o psb_dovrl_a.o psb_sgather_a.o psb_shalo_a.o psb_sovrl_a.o psb_mgather_a.o psb_mhalo_a.o psb_movrl_a.o psb_egather_a.o psb_ehalo_a.o psb_eovrl_a.o psb_cgather_a.o psb_chalo_a.o psb_covrl_a.o psb_zgather_a.o psb_zhalo_a.o psb_zovrl_a.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/comm» -make -C auxil lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -(make psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: «psi_desc_index.o» è aggiornato. -make[3]: «psi_fnd_owner.o» è aggiornato. -make[3]: «psi_a2a_fnd_owner.o» è aggiornato. -make[3]: «psi_graph_fnd_owner.o» è aggiornato. -make[3]: «psi_adjcncy_fnd_owner.o» è aggiornato. -make[3]: «psi_symm_dep_list.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -ar -cDr ../libpsb_base.a psi_desc_index.o psi_fnd_owner.o psi_a2a_fnd_owner.o psi_graph_fnd_owner.o psi_adjcncy_fnd_owner.o psi_symm_dep_list.o psi_crea_bnd_elem.o psi_crea_index.o psi_crea_ovr_elem.o psi_bld_tmpovrl.o psi_bld_tmphalo.o psi_sort_dl.o psi_indx_map_fnd_owner.o psi_desc_impl.o psi_hash_impl.o psi_srtlist.o psi_bld_glb_dep_list.o psi_xtr_loc_dl.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/auxil» -make -C psblas lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -ar -cDr ../libpsb_base.a psb_ddot.o psb_damax.o psb_dasum.o psb_daxpby.o psb_dnrm2.o psb_dnrmi.o psb_dspmm.o psb_dspsm.o psb_sspnrm1.o psb_dspnrm1.o psb_cspnrm1.o psb_zspnrm1.o psb_zamax.o psb_zasum.o psb_zaxpby.o psb_zdot.o psb_znrm2.o psb_znrmi.o psb_zspmm.o psb_zspsm.o psb_saxpby.o psb_sdot.o psb_sasum.o psb_samax.o psb_snrm2.o psb_snrmi.o psb_sspmm.o psb_sspsm.o psb_camax.o psb_casum.o psb_caxpby.o psb_cdot.o psb_cnrm2.o psb_cnrmi.o psb_cspmm.o psb_cspsm.o psb_cmlt_vect.o psb_dmlt_vect.o psb_zmlt_vect.o psb_smlt_vect.o psb_cdiv_vect.o psb_ddiv_vect.o psb_zdiv_vect.o psb_sdiv_vect.o psb_cinv_vect.o psb_dinv_vect.o psb_zinv_vect.o psb_sinv_vect.o psb_dcmp_vect.o psb_scmp_vect.o psb_ccmp_vect.o psb_zcmp_vect.o psb_cabs_vect.o psb_dabs_vect.o psb_sabs_vect.o psb_zabs_vect.o psb_cgetmatinfo.o psb_dgetmatinfo.o psb_sgetmatinfo.o psb_zgetmatinfo.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/psblas» -make -C tools lib LIBNAME=libpsb_base.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -(make psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o FC="mpifort") -make[3]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -make[3]: attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore. -make[3]: «psb_icdasb.o» è aggiornato. -make[3]: «psb_ssphalo.o» è aggiornato. -make[3]: «psb_dsphalo.o» è aggiornato. -make[3]: «psb_csphalo.o» è aggiornato. -make[3]: «psb_zsphalo.o» è aggiornato. -make[3]: «psb_dcdbldext.o» è aggiornato. -make[3]: «psb_zcdbldext.o» è aggiornato. -make[3]: «psb_scdbldext.o» è aggiornato. -make[3]: «psb_ccdbldext.o» è aggiornato. -make[3]: «psb_s_remote_mat.o» è aggiornato. -make[3]: «psb_d_remote_mat.o» è aggiornato. -make[3]: «psb_c_remote_mat.o» è aggiornato. -make[3]: «psb_z_remote_mat.o» è aggiornato. -make[3]: «psb_s_remote_vect.o» è aggiornato. -make[3]: «psb_d_remote_vect.o» è aggiornato. -make[3]: «psb_c_remote_vect.o» è aggiornato. -make[3]: «psb_z_remote_vect.o» è aggiornato. -make[3]: «psb_e_remote_vect.o» è aggiornato. -make[3]: «psb_m_remote_vect.o» è aggiornato. -make[3]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -ar -cDr ../libpsb_base.a psb_icdasb.o psb_ssphalo.o psb_dsphalo.o psb_csphalo.o psb_zsphalo.o psb_dcdbldext.o psb_zcdbldext.o psb_scdbldext.o psb_ccdbldext.o psb_s_remote_mat.o psb_d_remote_mat.o psb_c_remote_mat.o psb_z_remote_mat.o psb_s_remote_vect.o psb_d_remote_vect.o psb_c_remote_vect.o psb_z_remote_vect.o psb_e_remote_vect.o psb_m_remote_vect.o psb_cdall.o psb_cdals.o psb_cdalv.o psb_cd_inloc.o psb_cdins.o psb_cdprt.o psb_cdren.o psb_cdrep.o psb_get_overlap.o psb_cd_lstext.o psb_cd_remap.o psb_cdcpy.o psb_cd_reinit.o psb_cd_switch_ovl_indxmap.o psb_cd_renum_block.o psb_dspalloc.o psb_dspasb.o psb_d_remap.o psb_dspfree.o psb_dspins.o psb_dsprn.o psb_sspalloc.o psb_sspasb.o psb_s_remap.o psb_sspfree.o psb_sspins.o psb_ssprn.o psb_glob_to_loc.o psb_loc_to_glob.o psb_iallc.o psb_iasb.o psb_ifree.o psb_iins.o psb_lallc.o psb_lasb.o psb_lfree.o psb_lins.o psb_sallc.o psb_sasb.o psb_sfree.o psb_sins.o psb_dallc.o psb_dasb.o psb_dfree.o psb_dins.o psb_callc.o psb_casb.o psb_cfree.o psb_cins.o psb_zallc.o psb_zasb.o psb_zfree.o psb_zins.o psb_mallc_a.o psb_masb_a.o psb_mfree_a.o psb_mins_a.o psb_eallc_a.o psb_easb_a.o psb_efree_a.o psb_eins_a.o psb_sallc_a.o psb_sasb_a.o psb_sfree_a.o psb_sins_a.o psb_dallc_a.o psb_dasb_a.o psb_dfree_a.o psb_dins_a.o psb_callc_a.o psb_casb_a.o psb_cfree_a.o psb_cins_a.o psb_zallc_a.o psb_zasb_a.o psb_zfree_a.o psb_zins_a.o psb_zspalloc.o psb_zspasb.o psb_z_remap.o psb_zspfree.o psb_zspins.o psb_zsprn.o psb_cspalloc.o psb_cspasb.o psb_c_remap.o psb_cspfree.o psb_cspins.o psb_csprn.o psb_cd_set_bld.o psb_s_map.o psb_d_map.o psb_c_map.o psb_z_map.o psb_s_par_csr_spspmm.o psb_d_par_csr_spspmm.o psb_c_par_csr_spspmm.o psb_z_par_csr_spspmm.o psb_s_glob_transpose.o psb_d_glob_transpose.o psb_c_glob_transpose.o psb_z_glob_transpose.o psb_cgetelem.o psb_dgetelem.o psb_sgetelem.o psb_zgetelem.o -ranlib ../libpsb_base.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base/tools» -/bin/cp -p ./libpsb_base.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/base» -make -C prec lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -make -C impl lib -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -ar -cDr ../libpsb_prec.a psb_s_prec_type_impl.o psb_d_prec_type_impl.o psb_c_prec_type_impl.o psb_z_prec_type_impl.o psb_d_diagprec_impl.o psb_d_bjacprec_impl.o psb_d_nullprec_impl.o psb_d_ilu0_fact.o psb_d_iluk_fact.o psb_d_ilut_fact.o psb_dprecbld.o psb_dprecinit.o psb_s_diagprec_impl.o psb_s_bjacprec_impl.o psb_s_nullprec_impl.o psb_s_ilu0_fact.o psb_s_iluk_fact.o psb_s_ilut_fact.o psb_sprecbld.o psb_sprecinit.o psb_c_diagprec_impl.o psb_c_bjacprec_impl.o psb_c_nullprec_impl.o psb_c_ilu0_fact.o psb_c_iluk_fact.o psb_c_ilut_fact.o psb_cprecbld.o psb_cprecinit.o psb_z_diagprec_impl.o psb_z_bjacprec_impl.o psb_z_nullprec_impl.o psb_z_ilu0_fact.o psb_z_iluk_fact.o psb_z_ilut_fact.o psb_zprecbld.o psb_zprecinit.o psb_c_sparsify.o psb_d_sparsify.o psb_s_sparsify.o psb_z_sparsify.o psb_crwclip.o psb_drwclip.o psb_srwclip.o psb_zrwclip.o psb_c_sp_drop.o psb_d_sp_drop.o psb_s_sp_drop.o psb_z_sp_drop.o psb_dsparse_biconjg_llk_noth.o psb_dsparse_biconjg_llk.o psb_dsparse_biconjg_mlk.o psb_dsparse_biconjg_s_ft_llk.o psb_dsparse_biconjg_s_llk.o psb_csparse_biconjg_llk_noth.o psb_csparse_biconjg_llk.o psb_csparse_biconjg_mlk.o psb_csparse_biconjg_s_ft_llk.o psb_csparse_biconjg_s_llk.o psb_zsparse_biconjg_llk_noth.o psb_zsparse_biconjg_llk.o psb_zsparse_biconjg_mlk.o psb_zsparse_biconjg_s_ft_llk.o psb_zsparse_biconjg_s_llk.o psb_ssparse_biconjg_llk_noth.o psb_ssparse_biconjg_llk.o psb_ssparse_biconjg_mlk.o psb_ssparse_biconjg_s_ft_llk.o psb_ssparse_biconjg_s_llk.o psb_d_ainv_bld.o psb_c_ainv_bld.o psb_s_ainv_bld.o psb_z_ainv_bld.o psb_c_invt_fact.o psb_d_invt_fact.o psb_s_invt_fact.o psb_z_invt_fact.o psb_c_invk_fact.o psb_d_invk_fact.o psb_s_invk_fact.o psb_z_invk_fact.o -ranlib ../libpsb_prec.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec/impl» -ar -cDr ./libpsb_prec.a psb_prec_const_mod.o psb_s_prec_type.o psb_d_prec_type.o psb_c_prec_type.o psb_z_prec_type.o psb_s_base_prec_mod.o psb_d_base_prec_mod.o psb_c_base_prec_mod.o psb_z_base_prec_mod.o psb_prec_type.o psb_prec_mod.o psb_s_prec_mod.o psb_d_prec_mod.o psb_c_prec_mod.o psb_z_prec_mod.o psb_d_diagprec.o psb_d_nullprec.o psb_d_bjacprec.o psb_s_ilu_fact_mod.o psb_s_diagprec.o psb_s_nullprec.o psb_s_bjacprec.o psb_d_ilu_fact_mod.o psb_c_diagprec.o psb_c_nullprec.o psb_c_bjacprec.o psb_c_ilu_fact_mod.o psb_z_diagprec.o psb_z_nullprec.o psb_z_bjacprec.o psb_z_ilu_fact_mod.o psb_c_ainv_fact_mod.o psb_d_ainv_fact_mod.o psb_s_ainv_fact_mod.o psb_z_ainv_fact_mod.o psb_c_ainv_tools_mod.o psb_d_ainv_tools_mod.o psb_s_ainv_tools_mod.o psb_z_ainv_tools_mod.o psb_ainv_tools_mod.o psb_biconjg_mod.o psb_c_biconjg_mod.o psb_d_biconjg_mod.o psb_s_biconjg_mod.o psb_z_biconjg_mod.o psb_c_invt_fact_mod.o psb_d_invt_fact_mod.o psb_s_invt_fact_mod.o psb_z_invt_fact_mod.o psb_c_invk_fact_mod.o psb_d_invk_fact_mod.o psb_s_invk_fact_mod.o psb_z_invk_fact_mod.o -ranlib ./libpsb_prec.a -/bin/cp -p ./libpsb_prec.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/prec» -make -C linsolve lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -/usr/bin/install -c -p -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -make -C impl lib -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -ar -cDr ../libpsb_linsolve.a psb_dkrylov.o psb_skrylov.o psb_ckrylov.o psb_zkrylov.o psb_drichardson.o psb_srichardson.o psb_crichardson.o psb_zrichardson.o psb_dcgstab.o psb_dcg.o psb_dfcg.o psb_dgcr.o psb_dcgs.o psb_dbicg.o psb_dcgstabl.o psb_drgmres.o psb_scgstab.o psb_scg.o psb_sfcg.o psb_sgcr.o psb_scgs.o psb_sbicg.o psb_scgstabl.o psb_srgmres.o psb_ccgstab.o psb_ccg.o psb_cfcg.o psb_cgcr.o psb_ccgs.o psb_cbicg.o psb_ccgstabl.o psb_crgmres.o psb_zcgstab.o psb_zcg.o psb_zfcg.o psb_zgcr.o psb_zcgs.o psb_zbicg.o psb_zcgstabl.o psb_zrgmres.o -ranlib ../libpsb_linsolve.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve/impl» -ar -cDr ./libpsb_linsolve.a psb_base_linsolve_conv_mod.o psb_s_linsolve_conv_mod.o psb_c_linsolve_conv_mod.o psb_d_linsolve_conv_mod.o psb_z_linsolve_conv_mod.o psb_linsolve_mod.o -ranlib ./libpsb_linsolve.a -/bin/cp -p ./libpsb_linsolve.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/linsolve» -make -C util lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -/usr/bin/install -c -p -p *.mod ../modules -ar -cDr ./libpsb_util.a psb_metis_int.o psb_amd_order.o psb_util_mod.o psb_blockpart_mod.o psb_metispart_mod.o psb_partidx_mod.o psb_hbio_mod.o psb_mmio_mod.o psb_mat_dist_mod.o psb_s_mat_dist_mod.o psb_d_mat_dist_mod.o psb_c_mat_dist_mod.o psb_z_mat_dist_mod.o psb_renum_mod.o psb_gps_mod.o psb_s_renum_mod.o psb_d_renum_mod.o psb_c_renum_mod.o psb_z_renum_mod.o psb_s_hbio_impl.o psb_d_hbio_impl.o psb_c_hbio_impl.o psb_z_hbio_impl.o psb_s_mmio_impl.o psb_d_mmio_impl.o psb_c_mmio_impl.o psb_z_mmio_impl.o psb_i_mmio_impl.o psb_s_mat_dist_impl.o psb_d_mat_dist_impl.o psb_c_mat_dist_impl.o psb_z_mat_dist_impl.o psb_s_renum_impl.o psb_d_renum_impl.o psb_c_renum_impl.o psb_z_renum_impl.o psi_build_mtpart.o -ranlib ./libpsb_util.a -/bin/cp -p ./libpsb_util.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/util» -make -C cbind lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -cd base && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make objs LIBNAME=libpsb_cbind.a -cd util && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make objs LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_linsolve_cbind.h .. -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.h ../include -/bin/cp -p *.mod ../modules/ -cd base && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -Makefile:30: attenzione: sovrascrittura del set di istruzioni per l'obiettivo «.F90.o» -../../Make.inc:116: attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «.F90.o» -/bin/cp -p *.mod psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h .. -ar -cDr ../libpsb_cbind.a psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o psb_base_tools_cbind_mod.o psb_base_psblas_cbind_mod.o psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o psb_s_comm_cbind_mod.o psb_d_comm_cbind_mod.o psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o psb_c_base.o psb_c_sbase.o psb_c_dbase.o psb_c_cbase.o psb_c_zbase.o psb_c_scomm.o psb_c_dcomm.o psb_c_ccomm.o psb_c_zcomm.o -ranlib ../libpsb_cbind.a -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/base» -cd prec && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -/bin/cp -p *.mod psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h .. -ar -cDr ../libpsb_cbind.a psb_prec_cbind_mod.o psb_sprec_cbind_mod.o psb_dprec_cbind_mod.o psb_cprec_cbind_mod.o psb_zprec_cbind_mod.o psb_c_sprec.o psb_c_dprec.o psb_c_cprec.o psb_c_zprec.o -ranlib ../libpsb_cbind.a -/bin/cp -p ../libpsb_cbind.a ../../lib -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/prec» -cd linsolve && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -/bin/cp -p *.mod psb_linsolve_cbind.h .. -ar -cDr ../libpsb_cbind.a psb_base_linsolve_cbind_mod.o psb_slinsolve_cbind_mod.o psb_dlinsolve_cbind_mod.o psb_clinsolve_cbind_mod.o psb_zlinsolve_cbind_mod.o -ranlib ../libpsb_cbind.a -/bin/cp -p ../libpsb_cbind.a ../../lib -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/linsolve» -cd util && make lib LIBNAME=libpsb_cbind.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p *.mod psb_util_cbind.h psb_c_cutil.h psb_c_zutil.h psb_c_dutil.h psb_c_sutil.h .. -ar -cDr ../libpsb_cbind.a psb_util_cbind_mod.o psb_c_util_cbind_mod.o psb_d_util_cbind_mod.o psb_s_util_cbind_mod.o psb_z_util_cbind_mod.o -ranlib ../libpsb_cbind.a -/bin/cp -p ../libpsb_cbind.a ../../lib -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind/util» -/bin/cp -p ./libpsb_cbind.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/cbind» -make -C ext lib -make[1]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -/bin/cp -p *.mod ../modules -make -C impl objs -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -make[2]: Nessuna operazione da eseguire per «objs». -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -make -C impl lib LIBNAME=libpsb_ext.a -make[2]: ingresso nella directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -ar -cDr ../libpsb_ext.a psb_s_cp_dia_from_coo.o psb_s_cp_dia_to_coo.o psb_s_cp_ell_from_coo.o psb_s_cp_ell_from_fmt.o psb_s_cp_ell_to_coo.o psb_s_cp_ell_to_fmt.o psb_s_cp_hdia_from_coo.o psb_s_cp_hdia_to_coo.o psb_s_cp_hll_from_coo.o psb_s_cp_hll_from_fmt.o psb_s_cp_hll_to_coo.o psb_s_cp_hll_to_fmt.o psb_s_dia_aclsum.o psb_s_dia_allocate_mnnz.o psb_s_dia_arwsum.o psb_s_dia_colsum.o psb_s_dia_csgetptn.o psb_s_dia_csgetrow.o psb_s_dia_csmm.o psb_s_dia_csmv.o psb_s_dia_get_diag.o psb_s_dia_maxval.o psb_s_dia_mold.o psb_s_dia_print.o psb_s_dia_reallocate_nz.o psb_s_dia_reinit.o psb_s_dia_rowsum.o psb_s_dia_scal.o psb_s_dia_scals.o psb_s_ell_aclsum.o psb_s_ell_allocate_mnnz.o psb_s_ell_arwsum.o psb_s_ell_colsum.o psb_s_ell_csgetblk.o psb_s_ell_csgetptn.o psb_s_ell_csgetrow.o psb_s_ell_csmm.o psb_s_ell_csmv.o psb_s_ell_csnm1.o psb_s_ell_csnmi.o psb_s_ell_csput.o psb_s_ell_cssm.o psb_s_ell_cssv.o psb_s_ell_get_diag.o psb_s_ell_maxval.o psb_s_ell_mold.o psb_s_ell_print.o psb_s_ell_reallocate_nz.o psb_s_ell_reinit.o psb_s_ell_rowsum.o psb_s_ell_scal.o psb_s_ell_scals.o psb_s_ell_trim.o psb_s_hdia_allocate_mnnz.o psb_s_hdia_csmv.o psb_s_hdia_mold.o psb_s_hdia_print.o psb_s_hll_aclsum.o psb_s_hll_allocate_mnnz.o psb_s_hll_arwsum.o psb_s_hll_colsum.o psb_s_hll_csgetblk.o psb_s_hll_csgetptn.o psb_s_hll_csgetrow.o psb_s_hll_csmm.o psb_s_hll_csmv.o psb_s_hll_csnm1.o psb_s_hll_csnmi.o psb_s_hll_csput.o psb_s_hll_cssm.o psb_s_hll_cssv.o psb_s_hll_get_diag.o psb_s_hll_maxval.o psb_s_hll_mold.o psb_s_hll_print.o psb_s_hll_reallocate_nz.o psb_s_hll_reinit.o psb_s_hll_rowsum.o psb_s_hll_scal.o psb_s_hll_scals.o psb_s_mv_dia_from_coo.o psb_s_mv_ell_from_coo.o psb_s_mv_ell_from_fmt.o psb_s_mv_ell_to_coo.o psb_s_mv_ell_to_fmt.o psb_s_mv_hdia_from_coo.o psb_s_mv_hdia_to_coo.o psb_s_mv_hll_from_coo.o psb_s_mv_hll_from_fmt.o psb_s_mv_hll_to_coo.o psb_s_mv_hll_to_fmt.o psb_c_cp_dia_from_coo.o psb_c_cp_dia_to_coo.o psb_c_cp_ell_from_coo.o psb_c_cp_ell_from_fmt.o psb_c_cp_ell_to_coo.o psb_c_cp_ell_to_fmt.o psb_c_cp_hdia_from_coo.o psb_c_cp_hdia_to_coo.o psb_c_cp_hll_from_coo.o psb_c_cp_hll_from_fmt.o psb_c_cp_hll_to_coo.o psb_c_cp_hll_to_fmt.o psb_c_dia_aclsum.o psb_c_dia_allocate_mnnz.o psb_c_dia_arwsum.o psb_c_dia_colsum.o psb_c_dia_csgetptn.o psb_c_dia_csgetrow.o psb_c_dia_csmm.o psb_c_dia_csmv.o psb_c_dia_get_diag.o psb_c_dia_maxval.o psb_c_dia_mold.o psb_c_dia_print.o psb_c_dia_reallocate_nz.o psb_c_dia_reinit.o psb_c_dia_rowsum.o psb_c_dia_scal.o psb_c_dia_scals.o psb_c_ell_aclsum.o psb_c_ell_allocate_mnnz.o psb_c_ell_arwsum.o psb_c_ell_colsum.o psb_c_ell_csgetblk.o psb_c_ell_csgetptn.o psb_c_ell_csgetrow.o psb_c_ell_csmm.o psb_c_ell_csmv.o psb_c_ell_csnm1.o psb_c_ell_csnmi.o psb_c_ell_csput.o psb_c_ell_cssm.o psb_c_ell_cssv.o psb_c_ell_get_diag.o psb_c_ell_maxval.o psb_c_ell_mold.o psb_c_ell_print.o psb_c_ell_reallocate_nz.o psb_c_ell_reinit.o psb_c_ell_rowsum.o psb_c_ell_scal.o psb_c_ell_scals.o psb_c_ell_trim.o psb_c_hdia_allocate_mnnz.o psb_c_hdia_csmv.o psb_c_hdia_mold.o psb_c_hdia_print.o psb_c_hll_aclsum.o psb_c_hll_allocate_mnnz.o psb_c_hll_arwsum.o psb_c_hll_colsum.o psb_c_hll_csgetblk.o psb_c_hll_csgetptn.o psb_c_hll_csgetrow.o psb_c_hll_csmm.o psb_c_hll_csmv.o psb_c_hll_csnm1.o psb_c_hll_csnmi.o psb_c_hll_csput.o psb_c_hll_cssm.o psb_c_hll_cssv.o psb_c_hll_get_diag.o psb_c_hll_maxval.o psb_c_hll_mold.o psb_c_hll_print.o psb_c_hll_reallocate_nz.o psb_c_hll_reinit.o psb_c_hll_rowsum.o psb_c_hll_scal.o psb_c_hll_scals.o psb_c_mv_dia_from_coo.o psb_c_mv_ell_from_coo.o psb_c_mv_ell_from_fmt.o psb_c_mv_ell_to_coo.o psb_c_mv_ell_to_fmt.o psb_c_mv_hdia_from_coo.o psb_c_mv_hdia_to_coo.o psb_c_mv_hll_from_coo.o psb_c_mv_hll_from_fmt.o psb_c_mv_hll_to_coo.o psb_c_mv_hll_to_fmt.o psb_d_cp_dia_from_coo.o psb_d_cp_dia_to_coo.o psb_d_cp_ell_from_coo.o psb_d_cp_ell_from_fmt.o psb_d_cp_ell_to_coo.o psb_d_cp_ell_to_fmt.o psb_d_cp_hdia_from_coo.o psb_d_cp_hdia_to_coo.o psb_d_cp_hll_from_coo.o psb_d_cp_hll_from_fmt.o psb_d_cp_hll_to_coo.o psb_d_cp_hll_to_fmt.o psb_d_dia_aclsum.o psb_d_dia_allocate_mnnz.o psb_d_dia_arwsum.o psb_d_dia_colsum.o psb_d_dia_csgetptn.o psb_d_dia_csgetrow.o psb_d_dia_csmm.o psb_d_dia_csmv.o psb_d_dia_get_diag.o psb_d_dia_maxval.o psb_d_dia_mold.o psb_d_dia_print.o psb_d_dia_reallocate_nz.o psb_d_dia_reinit.o psb_d_dia_rowsum.o psb_d_dia_scal.o psb_d_dia_scals.o psb_d_ell_aclsum.o psb_d_ell_allocate_mnnz.o psb_d_ell_arwsum.o psb_d_ell_colsum.o psb_d_ell_csgetblk.o psb_d_ell_csgetptn.o psb_d_ell_csgetrow.o psb_d_ell_csmm.o psb_d_ell_csmv.o psb_d_ell_csnm1.o psb_d_ell_csnmi.o psb_d_ell_csput.o psb_d_ell_cssm.o psb_d_ell_cssv.o psb_d_ell_get_diag.o psb_d_ell_maxval.o psb_d_ell_mold.o psb_d_ell_print.o psb_d_ell_reallocate_nz.o psb_d_ell_reinit.o psb_d_ell_rowsum.o psb_d_ell_scal.o psb_d_ell_scals.o psb_d_ell_trim.o psb_d_hdia_allocate_mnnz.o psb_d_hdia_csmv.o psb_d_hdia_mold.o psb_d_hdia_print.o psb_d_hll_aclsum.o psb_d_hll_allocate_mnnz.o psb_d_hll_arwsum.o psb_d_hll_colsum.o psb_d_hll_csgetblk.o psb_d_hll_csgetptn.o psb_d_hll_csgetrow.o psb_d_hll_csmm.o psb_d_hll_csmv.o psb_d_hll_csnm1.o psb_d_hll_csnmi.o psb_d_hll_csput.o psb_d_hll_cssm.o psb_d_hll_cssv.o psb_d_hll_get_diag.o psb_d_hll_maxval.o psb_d_hll_mold.o psb_d_hll_print.o psb_d_hll_reallocate_nz.o psb_d_hll_reinit.o psb_d_hll_rowsum.o psb_d_hll_scal.o psb_d_hll_scals.o psb_d_mv_dia_from_coo.o psb_d_mv_ell_from_coo.o psb_d_mv_ell_from_fmt.o psb_d_mv_ell_to_coo.o psb_d_mv_ell_to_fmt.o psb_d_mv_hdia_from_coo.o psb_d_mv_hdia_to_coo.o psb_d_mv_hll_from_coo.o psb_d_mv_hll_from_fmt.o psb_d_mv_hll_to_coo.o psb_d_mv_hll_to_fmt.o psb_z_cp_dia_from_coo.o psb_z_cp_dia_to_coo.o psb_z_cp_ell_from_coo.o psb_z_cp_ell_from_fmt.o psb_z_cp_ell_to_coo.o psb_z_cp_ell_to_fmt.o psb_z_cp_hdia_from_coo.o psb_z_cp_hdia_to_coo.o psb_z_cp_hll_from_coo.o psb_z_cp_hll_from_fmt.o psb_z_cp_hll_to_coo.o psb_z_cp_hll_to_fmt.o psb_z_dia_aclsum.o psb_z_dia_allocate_mnnz.o psb_z_dia_arwsum.o psb_z_dia_colsum.o psb_z_dia_csgetptn.o psb_z_dia_csgetrow.o psb_z_dia_csmm.o psb_z_dia_csmv.o psb_z_dia_get_diag.o psb_z_dia_maxval.o psb_z_dia_mold.o psb_z_dia_print.o psb_z_dia_reallocate_nz.o psb_z_dia_reinit.o psb_z_dia_rowsum.o psb_z_dia_scal.o psb_z_dia_scals.o psb_z_ell_aclsum.o psb_z_ell_allocate_mnnz.o psb_z_ell_arwsum.o psb_z_ell_colsum.o psb_z_ell_csgetblk.o psb_z_ell_csgetptn.o psb_z_ell_csgetrow.o psb_z_ell_csmm.o psb_z_ell_csmv.o psb_z_ell_csnm1.o psb_z_ell_csnmi.o psb_z_ell_csput.o psb_z_ell_cssm.o psb_z_ell_cssv.o psb_z_ell_get_diag.o psb_z_ell_maxval.o psb_z_ell_mold.o psb_z_ell_print.o psb_z_ell_reallocate_nz.o psb_z_ell_reinit.o psb_z_ell_rowsum.o psb_z_ell_scal.o psb_z_ell_scals.o psb_z_ell_trim.o psb_z_hdia_allocate_mnnz.o psb_z_hdia_csmv.o psb_z_hdia_mold.o psb_z_hdia_print.o psb_z_hll_aclsum.o psb_z_hll_allocate_mnnz.o psb_z_hll_arwsum.o psb_z_hll_colsum.o psb_z_hll_csgetblk.o psb_z_hll_csgetptn.o psb_z_hll_csgetrow.o psb_z_hll_csmm.o psb_z_hll_csmv.o psb_z_hll_csnm1.o psb_z_hll_csnmi.o psb_z_hll_csput.o psb_z_hll_cssm.o psb_z_hll_cssv.o psb_z_hll_get_diag.o psb_z_hll_maxval.o psb_z_hll_mold.o psb_z_hll_print.o psb_z_hll_reallocate_nz.o psb_z_hll_reinit.o psb_z_hll_rowsum.o psb_z_hll_scal.o psb_z_hll_scals.o psb_z_mv_dia_from_coo.o psb_z_mv_ell_from_coo.o psb_z_mv_ell_from_fmt.o psb_z_mv_ell_to_coo.o psb_z_mv_ell_to_fmt.o psb_z_mv_hdia_from_coo.o psb_z_mv_hdia_to_coo.o psb_z_mv_hll_from_coo.o psb_z_mv_hll_from_fmt.o psb_z_mv_hll_to_coo.o psb_z_mv_hll_to_fmt.o psi_s_xtr_ell_from_coo.o psi_c_xtr_ell_from_coo.o psi_d_xtr_ell_from_coo.o psi_z_xtr_ell_from_coo.o psi_s_convert_ell_from_coo.o psi_c_convert_ell_from_coo.o psi_d_convert_ell_from_coo.o psi_z_convert_ell_from_coo.o psi_s_convert_hll_from_coo.o psi_c_convert_hll_from_coo.o psi_d_convert_hll_from_coo.o psi_z_convert_hll_from_coo.o psi_s_xtr_dia_from_coo.o psi_c_xtr_dia_from_coo.o psi_d_xtr_dia_from_coo.o psi_z_xtr_dia_from_coo.o psi_s_xtr_coo_from_dia.o psi_d_xtr_coo_from_dia.o psi_c_xtr_coo_from_dia.o psi_z_xtr_coo_from_dia.o psi_s_convert_dia_from_coo.o psi_c_convert_dia_from_coo.o psi_d_convert_dia_from_coo.o psi_z_convert_dia_from_coo.o psb_s_dns_mat_impl.o psb_d_dns_mat_impl.o psb_c_dns_mat_impl.o psb_z_dns_mat_impl.o -make[2]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext/impl» -ar -cDr libpsb_ext.a psb_d_ell_mat_mod.o psb_d_hll_mat_mod.o psb_s_hll_mat_mod.o psb_s_ell_mat_mod.o psb_c_hll_mat_mod.o psb_c_ell_mat_mod.o psb_z_hll_mat_mod.o psb_z_ell_mat_mod.o psb_d_dia_mat_mod.o psb_d_hdia_mat_mod.o psb_s_dia_mat_mod.o psb_s_hdia_mat_mod.o psb_c_dia_mat_mod.o psb_c_hdia_mat_mod.o psb_z_dia_mat_mod.o psb_z_hdia_mat_mod.o psb_s_dns_mat_mod.o psb_d_dns_mat_mod.o psb_c_dns_mat_mod.o psb_z_dns_mat_mod.o psi_ext_util_mod.o psi_i_ext_util_mod.o psi_s_ext_util_mod.o psi_c_ext_util_mod.o psi_d_ext_util_mod.o psi_z_ext_util_mod.o psb_ext_mod.o -/bin/cp -p libpsb_ext.a ../lib -make[1]: uscita dalla directory «/home/stack/Desktop/PSBLAS/comm/psblas3/ext» -===================================== -PSBLAS libraries Compilation Successful. diff --git a/test/computational_routines/geaxpby/psblas_geaxpby_test.log b/test/computational_routines/geaxpby/psblas_geaxpby_test.log index deefe624..182bbbc5 100644 --- a/test/computational_routines/geaxpby/psblas_geaxpby_test.log +++ b/test/computational_routines/geaxpby/psblas_geaxpby_test.log @@ -2,730 +2,293 @@ Welcome to PSBLAS version: 3.9.1 This is the psb_geaxpby_test sample program Number of processes used in this computation: 1 -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-01-19 14:36:21] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-01-19 14:36:22] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-01-19 14:36:22] Double precision check on file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-01-19 14:36:23] Double precision check on file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] -Welcome to PSBLAS version: 3.9.1 -This is the psb_geaxpby_test sample program -Number of processes used in this computation: 20 - -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-01-19 14:36:24] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-01-19 14:36:25] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-01-19 14:36:26] Generation geaxpby single precision result file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-01-19 14:36:27] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-01-19 14:36:28] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-01-19 14:36:29] Generation geaxpby single precision result file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] - -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a1_b1.mtx 1/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a1_b2.mtx 2/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a1_b3.mtx 3/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a2_b1.mtx 4/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a2_b2.mtx 5/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a2_b3.mtx 6/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a3_b1.mtx 7/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a3_b2.mtx 8/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y1_a3_b3.mtx 9/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a1_b1.mtx 10/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a1_b2.mtx 11/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a1_b3.mtx 12/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a2_b1.mtx 13/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a2_b2.mtx 14/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a2_b3.mtx 15/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a3_b1.mtx 16/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a3_b2.mtx 17/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y2_a3_b3.mtx 18/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a1_b1.mtx 19/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a1_b2.mtx 20/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a1_b3.mtx 21/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a2_b1.mtx 22/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a2_b2.mtx 23/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a2_b3.mtx 24/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a3_b1.mtx 25/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a3_b2.mtx 26/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y3_a3_b3.mtx 27/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a1_b1.mtx 28/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a1_b2.mtx 29/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a1_b3.mtx 30/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a2_b1.mtx 31/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a2_b2.mtx 32/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a2_b3.mtx 33/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a3_b1.mtx 34/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a3_b2.mtx 35/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x1_y4_a3_b3.mtx 36/144 [OK] -[2026-01-19 14:36:29] Double precision check on file parallel/sol_x2_y1_a1_b1.mtx 37/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a1_b2.mtx 38/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a1_b3.mtx 39/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a2_b1.mtx 40/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a2_b2.mtx 41/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a2_b3.mtx 42/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a3_b1.mtx 43/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a3_b2.mtx 44/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y1_a3_b3.mtx 45/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a1_b1.mtx 46/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a1_b2.mtx 47/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a1_b3.mtx 48/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a2_b1.mtx 49/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a2_b2.mtx 50/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a2_b3.mtx 51/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a3_b1.mtx 52/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a3_b2.mtx 53/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y2_a3_b3.mtx 54/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a1_b1.mtx 55/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a1_b2.mtx 56/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a1_b3.mtx 57/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a2_b1.mtx 58/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a2_b2.mtx 59/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a2_b3.mtx 60/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a3_b1.mtx 61/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a3_b2.mtx 62/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y3_a3_b3.mtx 63/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a1_b1.mtx 64/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a1_b2.mtx 65/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a1_b3.mtx 66/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a2_b1.mtx 67/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a2_b2.mtx 68/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a2_b3.mtx 69/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a3_b1.mtx 70/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a3_b2.mtx 71/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x2_y4_a3_b3.mtx 72/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a1_b1.mtx 73/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a1_b2.mtx 74/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a1_b3.mtx 75/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a2_b1.mtx 76/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a2_b2.mtx 77/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a2_b3.mtx 78/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a3_b1.mtx 79/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a3_b2.mtx 80/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y1_a3_b3.mtx 81/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a1_b1.mtx 82/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a1_b2.mtx 83/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a1_b3.mtx 84/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a2_b1.mtx 85/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a2_b2.mtx 86/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a2_b3.mtx 87/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a3_b1.mtx 88/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a3_b2.mtx 89/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y2_a3_b3.mtx 90/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y3_a1_b1.mtx 91/144 [OK] -[2026-01-19 14:36:30] Double precision check on file parallel/sol_x3_y3_a1_b2.mtx 92/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a1_b3.mtx 93/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a2_b1.mtx 94/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a2_b2.mtx 95/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a2_b3.mtx 96/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a3_b1.mtx 97/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a3_b2.mtx 98/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y3_a3_b3.mtx 99/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a1_b1.mtx 100/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a1_b2.mtx 101/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a1_b3.mtx 102/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a2_b1.mtx 103/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a2_b2.mtx 104/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a2_b3.mtx 105/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a3_b1.mtx 106/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a3_b2.mtx 107/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x3_y4_a3_b3.mtx 108/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a1_b1.mtx 109/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a1_b2.mtx 110/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a1_b3.mtx 111/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a2_b1.mtx 112/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a2_b2.mtx 113/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a2_b3.mtx 114/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a3_b1.mtx 115/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a3_b2.mtx 116/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y1_a3_b3.mtx 117/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a1_b1.mtx 118/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a1_b2.mtx 119/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a1_b3.mtx 120/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a2_b1.mtx 121/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a2_b2.mtx 122/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a2_b3.mtx 123/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a3_b1.mtx 124/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a3_b2.mtx 125/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y2_a3_b3.mtx 126/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a1_b1.mtx 127/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a1_b2.mtx 128/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a1_b3.mtx 129/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a2_b1.mtx 130/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a2_b2.mtx 131/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a2_b3.mtx 132/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a3_b1.mtx 133/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a3_b2.mtx 134/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y3_a3_b3.mtx 135/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a1_b1.mtx 136/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a1_b2.mtx 137/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a1_b3.mtx 138/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a2_b1.mtx 139/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a2_b2.mtx 140/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a2_b3.mtx 141/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a3_b1.mtx 142/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a3_b2.mtx 143/144 [OK] -[2026-01-19 14:36:31] Double precision check on file parallel/sol_x4_y4_a3_b3.mtx 144/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] -Comparison between serial/sol_x1_y1_a1_b1.mtx and parallel/sol_x1_y1_a1_b1.mtx: 0 differences -Comparison between serial/sol_x1_y1_a1_b2.mtx and parallel/sol_x1_y1_a1_b2.mtx: 0 differences -Comparison between serial/sol_x1_y1_a1_b3.mtx and parallel/sol_x1_y1_a1_b3.mtx: 0 differences -Comparison between serial/sol_x1_y1_a2_b1.mtx and parallel/sol_x1_y1_a2_b1.mtx: 0 differences -Comparison between serial/sol_x1_y1_a2_b2.mtx and parallel/sol_x1_y1_a2_b2.mtx: 0 differences -Comparison between serial/sol_x1_y1_a2_b3.mtx and parallel/sol_x1_y1_a2_b3.mtx: 0 differences -Comparison between serial/sol_x1_y1_a3_b1.mtx and parallel/sol_x1_y1_a3_b1.mtx: 0 differences -Comparison between serial/sol_x1_y1_a3_b2.mtx and parallel/sol_x1_y1_a3_b2.mtx: 0 differences -Comparison between serial/sol_x1_y1_a3_b3.mtx and parallel/sol_x1_y1_a3_b3.mtx: 0 differences -Comparison between serial/sol_x1_y2_a1_b1.mtx and parallel/sol_x1_y2_a1_b1.mtx: 0 differences -Comparison between serial/sol_x1_y2_a1_b2.mtx and parallel/sol_x1_y2_a1_b2.mtx: 0 differences -Comparison between serial/sol_x1_y2_a1_b3.mtx and parallel/sol_x1_y2_a1_b3.mtx: 0 differences -Comparison between serial/sol_x1_y2_a2_b1.mtx and parallel/sol_x1_y2_a2_b1.mtx: 0 differences -Comparison between serial/sol_x1_y2_a2_b2.mtx and parallel/sol_x1_y2_a2_b2.mtx: 0 differences -Comparison between serial/sol_x1_y2_a2_b3.mtx and parallel/sol_x1_y2_a2_b3.mtx: 0 differences -Comparison between serial/sol_x1_y2_a3_b1.mtx and parallel/sol_x1_y2_a3_b1.mtx: 0 differences -Comparison between serial/sol_x1_y2_a3_b2.mtx and parallel/sol_x1_y2_a3_b2.mtx: 0 differences -Comparison between serial/sol_x1_y2_a3_b3.mtx and parallel/sol_x1_y2_a3_b3.mtx: 0 differences -Comparison between serial/sol_x1_y3_a1_b1.mtx and parallel/sol_x1_y3_a1_b1.mtx: 0 differences -Comparison between serial/sol_x1_y3_a1_b2.mtx and parallel/sol_x1_y3_a1_b2.mtx: 0 differences -Comparison between serial/sol_x1_y3_a1_b3.mtx and parallel/sol_x1_y3_a1_b3.mtx: 0 differences -Comparison between serial/sol_x1_y3_a2_b1.mtx and parallel/sol_x1_y3_a2_b1.mtx: 0 differences -Comparison between serial/sol_x1_y3_a2_b2.mtx and parallel/sol_x1_y3_a2_b2.mtx: 0 differences -Comparison between serial/sol_x1_y3_a2_b3.mtx and parallel/sol_x1_y3_a2_b3.mtx: 0 differences -Comparison between serial/sol_x1_y3_a3_b1.mtx and parallel/sol_x1_y3_a3_b1.mtx: 0 differences -Comparison between serial/sol_x1_y3_a3_b2.mtx and parallel/sol_x1_y3_a3_b2.mtx: 0 differences -Comparison between serial/sol_x1_y3_a3_b3.mtx and parallel/sol_x1_y3_a3_b3.mtx: 0 differences -Comparison between serial/sol_x1_y4_a1_b1.mtx and parallel/sol_x1_y4_a1_b1.mtx: 0 differences -Comparison between serial/sol_x1_y4_a1_b2.mtx and parallel/sol_x1_y4_a1_b2.mtx: 0 differences -Comparison between serial/sol_x1_y4_a1_b3.mtx and parallel/sol_x1_y4_a1_b3.mtx: 0 differences -Comparison between serial/sol_x1_y4_a2_b1.mtx and parallel/sol_x1_y4_a2_b1.mtx: 0 differences -Comparison between serial/sol_x1_y4_a2_b2.mtx and parallel/sol_x1_y4_a2_b2.mtx: 0 differences -Comparison between serial/sol_x1_y4_a2_b3.mtx and parallel/sol_x1_y4_a2_b3.mtx: 0 differences -Comparison between serial/sol_x1_y4_a3_b1.mtx and parallel/sol_x1_y4_a3_b1.mtx: 0 differences -Comparison between serial/sol_x1_y4_a3_b2.mtx and parallel/sol_x1_y4_a3_b2.mtx: 0 differences -Comparison between serial/sol_x1_y4_a3_b3.mtx and parallel/sol_x1_y4_a3_b3.mtx: 0 differences -Comparison between serial/sol_x2_y1_a1_b1.mtx and parallel/sol_x2_y1_a1_b1.mtx: 0 differences -Comparison between serial/sol_x2_y1_a1_b2.mtx and parallel/sol_x2_y1_a1_b2.mtx: 0 differences -Comparison between serial/sol_x2_y1_a1_b3.mtx and parallel/sol_x2_y1_a1_b3.mtx: 0 differences -Comparison between serial/sol_x2_y1_a2_b1.mtx and parallel/sol_x2_y1_a2_b1.mtx: 0 differences -Comparison between serial/sol_x2_y1_a2_b2.mtx and parallel/sol_x2_y1_a2_b2.mtx: 0 differences -Comparison between serial/sol_x2_y1_a2_b3.mtx and parallel/sol_x2_y1_a2_b3.mtx: 0 differences -Comparison between serial/sol_x2_y1_a3_b1.mtx and parallel/sol_x2_y1_a3_b1.mtx: 0 differences -Comparison between serial/sol_x2_y1_a3_b2.mtx and parallel/sol_x2_y1_a3_b2.mtx: 0 differences -Comparison between serial/sol_x2_y1_a3_b3.mtx and parallel/sol_x2_y1_a3_b3.mtx: 0 differences -Comparison between serial/sol_x2_y2_a1_b1.mtx and parallel/sol_x2_y2_a1_b1.mtx: 0 differences -Comparison between serial/sol_x2_y2_a1_b2.mtx and parallel/sol_x2_y2_a1_b2.mtx: 0 differences -Comparison between serial/sol_x2_y2_a1_b3.mtx and parallel/sol_x2_y2_a1_b3.mtx: 0 differences -Comparison between serial/sol_x2_y2_a2_b1.mtx and parallel/sol_x2_y2_a2_b1.mtx: 0 differences -Comparison between serial/sol_x2_y2_a2_b2.mtx and parallel/sol_x2_y2_a2_b2.mtx: 0 differences -Comparison between serial/sol_x2_y2_a2_b3.mtx and parallel/sol_x2_y2_a2_b3.mtx: 0 differences -Comparison between serial/sol_x2_y2_a3_b1.mtx and parallel/sol_x2_y2_a3_b1.mtx: 0 differences -Comparison between serial/sol_x2_y2_a3_b2.mtx and parallel/sol_x2_y2_a3_b2.mtx: 0 differences -Comparison between serial/sol_x2_y2_a3_b3.mtx and parallel/sol_x2_y2_a3_b3.mtx: 0 differences -Comparison between serial/sol_x2_y3_a1_b1.mtx and parallel/sol_x2_y3_a1_b1.mtx: 0 differences -Comparison between serial/sol_x2_y3_a1_b2.mtx and parallel/sol_x2_y3_a1_b2.mtx: 0 differences -Comparison between serial/sol_x2_y3_a1_b3.mtx and parallel/sol_x2_y3_a1_b3.mtx: 0 differences -Comparison between serial/sol_x2_y3_a2_b1.mtx and parallel/sol_x2_y3_a2_b1.mtx: 0 differences -Comparison between serial/sol_x2_y3_a2_b2.mtx and parallel/sol_x2_y3_a2_b2.mtx: 0 differences -Comparison between serial/sol_x2_y3_a2_b3.mtx and parallel/sol_x2_y3_a2_b3.mtx: 0 differences -Comparison between serial/sol_x2_y3_a3_b1.mtx and parallel/sol_x2_y3_a3_b1.mtx: 0 differences -Comparison between serial/sol_x2_y3_a3_b2.mtx and parallel/sol_x2_y3_a3_b2.mtx: 0 differences -Comparison between serial/sol_x2_y3_a3_b3.mtx and parallel/sol_x2_y3_a3_b3.mtx: 0 differences -Comparison between serial/sol_x2_y4_a1_b1.mtx and parallel/sol_x2_y4_a1_b1.mtx: 0 differences -Comparison between serial/sol_x2_y4_a1_b2.mtx and parallel/sol_x2_y4_a1_b2.mtx: 0 differences -Comparison between serial/sol_x2_y4_a1_b3.mtx and parallel/sol_x2_y4_a1_b3.mtx: 0 differences -Comparison between serial/sol_x2_y4_a2_b1.mtx and parallel/sol_x2_y4_a2_b1.mtx: 0 differences -Comparison between serial/sol_x2_y4_a2_b2.mtx and parallel/sol_x2_y4_a2_b2.mtx: 0 differences -Comparison between serial/sol_x2_y4_a2_b3.mtx and parallel/sol_x2_y4_a2_b3.mtx: 0 differences -Comparison between serial/sol_x2_y4_a3_b1.mtx and parallel/sol_x2_y4_a3_b1.mtx: 0 differences -Comparison between serial/sol_x2_y4_a3_b2.mtx and parallel/sol_x2_y4_a3_b2.mtx: 0 differences -Comparison between serial/sol_x2_y4_a3_b3.mtx and parallel/sol_x2_y4_a3_b3.mtx: 0 differences -Comparison between serial/sol_x3_y1_a1_b1.mtx and parallel/sol_x3_y1_a1_b1.mtx: 0 differences -Comparison between serial/sol_x3_y1_a1_b2.mtx and parallel/sol_x3_y1_a1_b2.mtx: 0 differences -Comparison between serial/sol_x3_y1_a1_b3.mtx and parallel/sol_x3_y1_a1_b3.mtx: 0 differences -Comparison between serial/sol_x3_y1_a2_b1.mtx and parallel/sol_x3_y1_a2_b1.mtx: 0 differences -Comparison between serial/sol_x3_y1_a2_b2.mtx and parallel/sol_x3_y1_a2_b2.mtx: 0 differences -Comparison between serial/sol_x3_y1_a2_b3.mtx and parallel/sol_x3_y1_a2_b3.mtx: 0 differences -Comparison between serial/sol_x3_y1_a3_b1.mtx and parallel/sol_x3_y1_a3_b1.mtx: 0 differences -Comparison between serial/sol_x3_y1_a3_b2.mtx and parallel/sol_x3_y1_a3_b2.mtx: 0 differences -Comparison between serial/sol_x3_y1_a3_b3.mtx and parallel/sol_x3_y1_a3_b3.mtx: 0 differences -Comparison between serial/sol_x3_y2_a1_b1.mtx and parallel/sol_x3_y2_a1_b1.mtx: 0 differences -Comparison between serial/sol_x3_y2_a1_b2.mtx and parallel/sol_x3_y2_a1_b2.mtx: 0 differences -Comparison between serial/sol_x3_y2_a1_b3.mtx and parallel/sol_x3_y2_a1_b3.mtx: 0 differences -Comparison between serial/sol_x3_y2_a2_b1.mtx and parallel/sol_x3_y2_a2_b1.mtx: 0 differences -Comparison between serial/sol_x3_y2_a2_b2.mtx and parallel/sol_x3_y2_a2_b2.mtx: 0 differences -Comparison between serial/sol_x3_y2_a2_b3.mtx and parallel/sol_x3_y2_a2_b3.mtx: 0 differences -Comparison between serial/sol_x3_y2_a3_b1.mtx and parallel/sol_x3_y2_a3_b1.mtx: 0 differences -Comparison between serial/sol_x3_y2_a3_b2.mtx and parallel/sol_x3_y2_a3_b2.mtx: 0 differences -Comparison between serial/sol_x3_y2_a3_b3.mtx and parallel/sol_x3_y2_a3_b3.mtx: 0 differences -Comparison between serial/sol_x3_y3_a1_b1.mtx and parallel/sol_x3_y3_a1_b1.mtx: 0 differences -Comparison between serial/sol_x3_y3_a1_b2.mtx and parallel/sol_x3_y3_a1_b2.mtx: 0 differences -Comparison between serial/sol_x3_y3_a1_b3.mtx and parallel/sol_x3_y3_a1_b3.mtx: 0 differences -Comparison between serial/sol_x3_y3_a2_b1.mtx and parallel/sol_x3_y3_a2_b1.mtx: 0 differences -Comparison between serial/sol_x3_y3_a2_b2.mtx and parallel/sol_x3_y3_a2_b2.mtx: 0 differences -Comparison between serial/sol_x3_y3_a2_b3.mtx and parallel/sol_x3_y3_a2_b3.mtx: 0 differences -Comparison between serial/sol_x3_y3_a3_b1.mtx and parallel/sol_x3_y3_a3_b1.mtx: 0 differences -Comparison between serial/sol_x3_y3_a3_b2.mtx and parallel/sol_x3_y3_a3_b2.mtx: 0 differences -Comparison between serial/sol_x3_y3_a3_b3.mtx and parallel/sol_x3_y3_a3_b3.mtx: 0 differences -Comparison between serial/sol_x3_y4_a1_b1.mtx and parallel/sol_x3_y4_a1_b1.mtx: 0 differences -Comparison between serial/sol_x3_y4_a1_b2.mtx and parallel/sol_x3_y4_a1_b2.mtx: 0 differences -Comparison between serial/sol_x3_y4_a1_b3.mtx and parallel/sol_x3_y4_a1_b3.mtx: 0 differences -Comparison between serial/sol_x3_y4_a2_b1.mtx and parallel/sol_x3_y4_a2_b1.mtx: 0 differences -Comparison between serial/sol_x3_y4_a2_b2.mtx and parallel/sol_x3_y4_a2_b2.mtx: 0 differences -Comparison between serial/sol_x3_y4_a2_b3.mtx and parallel/sol_x3_y4_a2_b3.mtx: 0 differences -Comparison between serial/sol_x3_y4_a3_b1.mtx and parallel/sol_x3_y4_a3_b1.mtx: 0 differences -Comparison between serial/sol_x3_y4_a3_b2.mtx and parallel/sol_x3_y4_a3_b2.mtx: 0 differences -Comparison between serial/sol_x3_y4_a3_b3.mtx and parallel/sol_x3_y4_a3_b3.mtx: 0 differences -Comparison between serial/sol_x4_y1_a1_b1.mtx and parallel/sol_x4_y1_a1_b1.mtx: 0 differences -Comparison between serial/sol_x4_y1_a1_b2.mtx and parallel/sol_x4_y1_a1_b2.mtx: 0 differences -Comparison between serial/sol_x4_y1_a1_b3.mtx and parallel/sol_x4_y1_a1_b3.mtx: 0 differences -Comparison between serial/sol_x4_y1_a2_b1.mtx and parallel/sol_x4_y1_a2_b1.mtx: 0 differences -Comparison between serial/sol_x4_y1_a2_b2.mtx and parallel/sol_x4_y1_a2_b2.mtx: 0 differences -Comparison between serial/sol_x4_y1_a2_b3.mtx and parallel/sol_x4_y1_a2_b3.mtx: 0 differences -Comparison between serial/sol_x4_y1_a3_b1.mtx and parallel/sol_x4_y1_a3_b1.mtx: 0 differences -Comparison between serial/sol_x4_y1_a3_b2.mtx and parallel/sol_x4_y1_a3_b2.mtx: 0 differences -Comparison between serial/sol_x4_y1_a3_b3.mtx and parallel/sol_x4_y1_a3_b3.mtx: 0 differences -Comparison between serial/sol_x4_y2_a1_b1.mtx and parallel/sol_x4_y2_a1_b1.mtx: 0 differences -Comparison between serial/sol_x4_y2_a1_b2.mtx and parallel/sol_x4_y2_a1_b2.mtx: 0 differences -Comparison between serial/sol_x4_y2_a1_b3.mtx and parallel/sol_x4_y2_a1_b3.mtx: 0 differences -Comparison between serial/sol_x4_y2_a2_b1.mtx and parallel/sol_x4_y2_a2_b1.mtx: 0 differences -Comparison between serial/sol_x4_y2_a2_b2.mtx and parallel/sol_x4_y2_a2_b2.mtx: 0 differences -Comparison between serial/sol_x4_y2_a2_b3.mtx and parallel/sol_x4_y2_a2_b3.mtx: 0 differences -Comparison between serial/sol_x4_y2_a3_b1.mtx and parallel/sol_x4_y2_a3_b1.mtx: 0 differences -Comparison between serial/sol_x4_y2_a3_b2.mtx and parallel/sol_x4_y2_a3_b2.mtx: 0 differences -Comparison between serial/sol_x4_y2_a3_b3.mtx and parallel/sol_x4_y2_a3_b3.mtx: 0 differences -Comparison between serial/sol_x4_y3_a1_b1.mtx and parallel/sol_x4_y3_a1_b1.mtx: 0 differences -Comparison between serial/sol_x4_y3_a1_b2.mtx and parallel/sol_x4_y3_a1_b2.mtx: 0 differences -Comparison between serial/sol_x4_y3_a1_b3.mtx and parallel/sol_x4_y3_a1_b3.mtx: 0 differences -Comparison between serial/sol_x4_y3_a2_b1.mtx and parallel/sol_x4_y3_a2_b1.mtx: 0 differences -Comparison between serial/sol_x4_y3_a2_b2.mtx and parallel/sol_x4_y3_a2_b2.mtx: 0 differences -Comparison between serial/sol_x4_y3_a2_b3.mtx and parallel/sol_x4_y3_a2_b3.mtx: 0 differences -Comparison between serial/sol_x4_y3_a3_b1.mtx and parallel/sol_x4_y3_a3_b1.mtx: 0 differences -Comparison between serial/sol_x4_y3_a3_b2.mtx and parallel/sol_x4_y3_a3_b2.mtx: 0 differences -Comparison between serial/sol_x4_y3_a3_b3.mtx and parallel/sol_x4_y3_a3_b3.mtx: 0 differences -Comparison between serial/sol_x4_y4_a1_b1.mtx and parallel/sol_x4_y4_a1_b1.mtx: 0 differences -Comparison between serial/sol_x4_y4_a1_b2.mtx and parallel/sol_x4_y4_a1_b2.mtx: 0 differences -Comparison between serial/sol_x4_y4_a1_b3.mtx and parallel/sol_x4_y4_a1_b3.mtx: 0 differences -Comparison between serial/sol_x4_y4_a2_b1.mtx and parallel/sol_x4_y4_a2_b1.mtx: 0 differences -Comparison between serial/sol_x4_y4_a2_b2.mtx and parallel/sol_x4_y4_a2_b2.mtx: 0 differences -Comparison between serial/sol_x4_y4_a2_b3.mtx and parallel/sol_x4_y4_a2_b3.mtx: 0 differences -Comparison between serial/sol_x4_y4_a3_b1.mtx and parallel/sol_x4_y4_a3_b1.mtx: 0 differences -Comparison between serial/sol_x4_y4_a3_b2.mtx and parallel/sol_x4_y4_a3_b2.mtx: 0 differences -Comparison between serial/sol_x4_y4_a3_b3.mtx and parallel/sol_x4_y4_a3_b3.mtx: 0 differences diff --git a/test/computational_routines/gedot/psblas_gedot_test.log b/test/computational_routines/gedot/psblas_gedot_test.log index 1f2aef93..8f64b2eb 100644 --- a/test/computational_routines/gedot/psblas_gedot_test.log +++ b/test/computational_routines/gedot/psblas_gedot_test.log @@ -413,3 +413,4 @@ Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 difference Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences + diff --git a/test/computational_routines/psblas_test_results.log b/test/computational_routines/psblas_test_results.log index db918e71..87bd8626 100644 --- a/test/computational_routines/psblas_test_results.log +++ b/test/computational_routines/psblas_test_results.log @@ -9536,3 +9536,715 @@ Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 difference Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.1 +This is the psb_geaxpby_test sample program +Number of processes used in this computation: 1 + +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-03-23 10:37:01] Generation geaxpby single precision result file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-03-23 10:37:02] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-03-23 10:37:03] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-03-23 10:37:04] Generation geaxpby single precision result file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] + +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b1.mtx 1/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b2.mtx 2/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a1_b3.mtx 3/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b1.mtx 4/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b2.mtx 5/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a2_b3.mtx 6/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b1.mtx 7/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b2.mtx 8/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y1_a3_b3.mtx 9/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b1.mtx 10/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b2.mtx 11/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a1_b3.mtx 12/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b1.mtx 13/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b2.mtx 14/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a2_b3.mtx 15/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b1.mtx 16/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b2.mtx 17/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y2_a3_b3.mtx 18/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b1.mtx 19/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b2.mtx 20/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a1_b3.mtx 21/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b1.mtx 22/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b2.mtx 23/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a2_b3.mtx 24/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b1.mtx 25/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b2.mtx 26/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y3_a3_b3.mtx 27/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b1.mtx 28/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b2.mtx 29/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a1_b3.mtx 30/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b1.mtx 31/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b2.mtx 32/144 [OK] +[2026-03-23 10:37:04] Double precision check on file serial/sol_x1_y4_a2_b3.mtx 33/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b1.mtx 34/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b2.mtx 35/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x1_y4_a3_b3.mtx 36/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b1.mtx 37/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b2.mtx 38/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a1_b3.mtx 39/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b1.mtx 40/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b2.mtx 41/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a2_b3.mtx 42/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b1.mtx 43/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b2.mtx 44/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y1_a3_b3.mtx 45/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b1.mtx 46/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b2.mtx 47/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a1_b3.mtx 48/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b1.mtx 49/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b2.mtx 50/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a2_b3.mtx 51/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b1.mtx 52/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b2.mtx 53/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y2_a3_b3.mtx 54/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b1.mtx 55/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b2.mtx 56/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a1_b3.mtx 57/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b1.mtx 58/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b2.mtx 59/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a2_b3.mtx 60/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b1.mtx 61/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b2.mtx 62/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y3_a3_b3.mtx 63/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b1.mtx 64/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b2.mtx 65/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a1_b3.mtx 66/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b1.mtx 67/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b2.mtx 68/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a2_b3.mtx 69/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b1.mtx 70/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b2.mtx 71/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x2_y4_a3_b3.mtx 72/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b1.mtx 73/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b2.mtx 74/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a1_b3.mtx 75/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b1.mtx 76/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b2.mtx 77/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a2_b3.mtx 78/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b1.mtx 79/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b2.mtx 80/144 [OK] +[2026-03-23 10:37:05] Double precision check on file serial/sol_x3_y1_a3_b3.mtx 81/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b1.mtx 82/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b2.mtx 83/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a1_b3.mtx 84/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b1.mtx 85/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b2.mtx 86/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a2_b3.mtx 87/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b1.mtx 88/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b2.mtx 89/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y2_a3_b3.mtx 90/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b1.mtx 91/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b2.mtx 92/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a1_b3.mtx 93/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b1.mtx 94/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b2.mtx 95/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a2_b3.mtx 96/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b1.mtx 97/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b2.mtx 98/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y3_a3_b3.mtx 99/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b1.mtx 100/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b2.mtx 101/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a1_b3.mtx 102/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b1.mtx 103/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b2.mtx 104/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a2_b3.mtx 105/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b1.mtx 106/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b2.mtx 107/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x3_y4_a3_b3.mtx 108/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b1.mtx 109/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b2.mtx 110/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a1_b3.mtx 111/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b1.mtx 112/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b2.mtx 113/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a2_b3.mtx 114/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b1.mtx 115/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b2.mtx 116/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y1_a3_b3.mtx 117/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b1.mtx 118/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b2.mtx 119/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a1_b3.mtx 120/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b1.mtx 121/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b2.mtx 122/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a2_b3.mtx 123/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b1.mtx 124/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b2.mtx 125/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y2_a3_b3.mtx 126/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b1.mtx 127/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b2.mtx 128/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a1_b3.mtx 129/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a2_b1.mtx 130/144 [OK] +[2026-03-23 10:37:06] Double precision check on file serial/sol_x4_y3_a2_b2.mtx 131/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a2_b3.mtx 132/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b1.mtx 133/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b2.mtx 134/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y3_a3_b3.mtx 135/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b1.mtx 136/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b2.mtx 137/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a1_b3.mtx 138/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b1.mtx 139/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b2.mtx 140/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a2_b3.mtx 141/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b1.mtx 142/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b2.mtx 143/144 [OK] +[2026-03-23 10:37:07] Double precision check on file serial/sol_x4_y4_a3_b3.mtx 144/144 [OK] + + +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 1 + +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:27:44] Generation gedot single precision result file serial/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:27:44] Double precision check on file serial/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:27:44] Double precision check on file serial/sol_x4_y4.mtx 16/144 [OK] +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:28:19] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:28:20] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:28:20] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:28:20] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:32:44] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:32:44] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:32:45] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:32:45] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:33:40] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:33:41] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:34:42] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:34:42] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:34:43] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:34:43] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:34:43] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:34:43] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:35:32] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:35:32] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:35:32] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:35:33] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:37:17] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:37:17] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:37:18] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences +Welcome to PSBLAS version: 3.9.0 +This is the psb_gedot_test sample program +Number of processes used in this computation: 40 + +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:37:56] Generation gedot single precision result file parallel/sol_x4_y4.mtx 16/144 [OK] + +[2025-06-12 13:37:56] Double precision check on file parallel/sol_x1_y1.mtx 1/144 [OK] +[2025-06-12 13:37:56] Double precision check on file parallel/sol_x1_y2.mtx 2/144 [OK] +[2025-06-12 13:37:56] Double precision check on file parallel/sol_x1_y3.mtx 3/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x1_y4.mtx 4/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x2_y1.mtx 5/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x2_y2.mtx 6/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x2_y3.mtx 7/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x2_y4.mtx 8/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x3_y1.mtx 9/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x3_y2.mtx 10/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x3_y3.mtx 11/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x3_y4.mtx 12/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x4_y1.mtx 13/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x4_y2.mtx 14/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x4_y3.mtx 15/144 [OK] +[2025-06-12 13:37:57] Double precision check on file parallel/sol_x4_y4.mtx 16/144 [OK] + +Comparison between serial/sol_x1_y1.mtx and parallel/sol_x1_y1.mtx: 4 differences +Comparison between serial/sol_x1_y2.mtx and parallel/sol_x1_y2.mtx: 4 differences +Comparison between serial/sol_x1_y3.mtx and parallel/sol_x1_y3.mtx: 4 differences +Comparison between serial/sol_x1_y4.mtx and parallel/sol_x1_y4.mtx: 0 differences +Comparison between serial/sol_x2_y1.mtx and parallel/sol_x2_y1.mtx: 4 differences +Comparison between serial/sol_x2_y2.mtx and parallel/sol_x2_y2.mtx: 4 differences +Comparison between serial/sol_x2_y3.mtx and parallel/sol_x2_y3.mtx: 4 differences +Comparison between serial/sol_x2_y4.mtx and parallel/sol_x2_y4.mtx: 0 differences +Comparison between serial/sol_x3_y1.mtx and parallel/sol_x3_y1.mtx: 4 differences +Comparison between serial/sol_x3_y2.mtx and parallel/sol_x3_y2.mtx: 4 differences +Comparison between serial/sol_x3_y3.mtx and parallel/sol_x3_y3.mtx: 4 differences +Comparison between serial/sol_x3_y4.mtx and parallel/sol_x3_y4.mtx: 0 differences +Comparison between serial/sol_x4_y1.mtx and parallel/sol_x4_y1.mtx: 0 differences +Comparison between serial/sol_x4_y2.mtx and parallel/sol_x4_y2.mtx: 0 differences +Comparison between serial/sol_x4_y3.mtx and parallel/sol_x4_y3.mtx: 0 differences +Comparison between serial/sol_x4_y4.mtx and parallel/sol_x4_y4.mtx: 0 differences + + diff --git a/test/computational_routines/test.sh b/test/computational_routines/test.sh index 5f3b4d45..263c564c 100755 --- a/test/computational_routines/test.sh +++ b/test/computational_routines/test.sh @@ -39,35 +39,35 @@ echo -e "${BLUE}[INFO]\t Starting environment check for required modules...${RE # Check and load required modules -required_modules=("gnu/12.2.1-sys" "mpich/4.2.2" "cuda/12.5") - -for module in "${required_modules[@]}"; do - if ! module list 2>&1 | grep -q "$module"; then - echo -e "${YELLOW}[WARNING] Module not found, loading $module${RESET}" - module load "$module" - flag=1 - if ! grep -q "module load $module" "$HOME/.bashrc"; then - echo -e "[INFO]\t Adding 'module load $module' to $bashrc..." - echo "module load $module" >> "$HOME/.bashrc" - # else - # echo "'module load $module' is already present in $bashrc." - fi - else - echo -e "[INFO]\t Found module $module." - fi -done - -# Update .bashrc if necessary -if [ $flag -eq 1 ]; then - echo -e "[INFO]\t Reloading $HOME/.bashrc..." - source ~/.bashrc -fi - -# Inform the user about environment persistence -if [ "$$" -eq "$PPID" ]; then - echo -e "${YELLOW}[WARNING] Modules loaded in this script will not persist after the script finishes.${RESET}" - echo -e "${YELLOW}[WARNING] Run the script using 'source autotest.sh' to make the changes persist.${RESET}" -fi +# required_modules=("gnu/12.2.1-sys" "mpich/4.2.2" "cuda/12.5") + +# for module in "${required_modules[@]}"; do +# if ! module list 2>&1 | grep -q "$module"; then +# echo -e "${YELLOW}[WARNING] Module not found, loading $module${RESET}" +# module load "$module" +# flag=1 +# if ! grep -q "module load $module" "$HOME/.bashrc"; then +# echo -e "[INFO]\t Adding 'module load $module' to $bashrc..." +# echo "module load $module" >> "$HOME/.bashrc" +# # else +# # echo "'module load $module' is already present in $bashrc." +# fi +# else +# echo -e "[INFO]\t Found module $module." +# fi +# done +# +# # Update .bashrc if necessary +# if [ $flag -eq 1 ]; then +# echo -e "[INFO]\t Reloading $HOME/.bashrc..." +# source ~/.bashrc +# fi +# +# # Inform the user about environment persistence +# if [ "$$" -eq "$PPID" ]; then +# echo -e "${YELLOW}[WARNING] Modules loaded in this script will not persist after the script finishes.${RESET}" +# echo -e "${YELLOW}[WARNING] Run the script using 'source autotest.sh' to make the changes persist.${RESET}" +# fi echo -e "${BLUE}[INFO]\t Environment check for required modules completed.${RESET}" echo ""