From 6f6376782365200c529845dbb299bdad60d1d84d Mon Sep 17 00:00:00 2001 From: Yann Garniron Date: Wed, 13 Jul 2016 18:12:25 +0200 Subject: [PATCH] in progress - iterations --- configure | 2 +- install/scripts/install_zeromq.sh | 12 +++--- plugins/Full_CI_ZMQ/fci_zmq.irp.f | 61 +++++++++++++++-------------- plugins/Full_CI_ZMQ/selection.irp.f | 26 +++++++++--- src/Determinants/H_apply.irp.f | 2 +- src/ZMQ/utils.irp.f | 18 ++++----- 6 files changed, 69 insertions(+), 52 deletions(-) diff --git a/configure b/configure index c3a22683..2e0d6c49 100755 --- a/configure +++ b/configure @@ -142,7 +142,7 @@ ezfio = Info( default_path=join(QP_ROOT_INSTALL, "EZFIO")) zeromq = Info( - url='http://download.zeromq.org/zeromq-4.0.7.tar.gz', + url='https://github.com/zeromq/zeromq4-1/releases/download/v4.1.5/zeromq-4.1.5.tar.gz', description=' ZeroMQ', default_path=join(QP_ROOT_LIB, "libzmq.a")) diff --git a/install/scripts/install_zeromq.sh b/install/scripts/install_zeromq.sh index 73b59019..3bf2a715 100755 --- a/install/scripts/install_zeromq.sh +++ b/install/scripts/install_zeromq.sh @@ -15,14 +15,14 @@ function _install() ./configure --without-libsodium || exit 1 make -j 8 || exit 1 rm -f -- "${QP_ROOT}"/lib/libzmq.a "${QP_ROOT}"/lib/libzmq.so "${QP_ROOT}"/lib/libzmq.so.? -# cp .libs/libzmq.a "${QP_ROOT}"/lib -# cp .libs/libzmq.so "${QP_ROOT}"/lib/libzmq.so.5 - cp src/.libs/libzmq.a "${QP_ROOT}"/lib - cp src/.libs/libzmq.so "${QP_ROOT}"/lib/libzmq.so.4 + cp .libs/libzmq.a "${QP_ROOT}"/lib + cp .libs/libzmq.so "${QP_ROOT}"/lib/libzmq.so.5 +# cp src/.libs/libzmq.a "${QP_ROOT}"/lib +# cp src/.libs/libzmq.so "${QP_ROOT}"/lib/libzmq.so.4 cp include/{zmq.h,zmq_utils.h} "${QP_ROOT}"/lib cd "${QP_ROOT}"/lib -# ln -s libzmq.so.5 libzmq.so - ln -s libzmq.so.4 libzmq.so + ln -s libzmq.so.5 libzmq.so +# ln -s libzmq.so.4 libzmq.so cd ${ORIG} return 0 } diff --git a/plugins/Full_CI_ZMQ/fci_zmq.irp.f b/plugins/Full_CI_ZMQ/fci_zmq.irp.f index 221a1821..1a521ed1 100644 --- a/plugins/Full_CI_ZMQ/fci_zmq.irp.f +++ b/plugins/Full_CI_ZMQ/fci_zmq.irp.f @@ -9,37 +9,40 @@ program Full_CI_ZMQ integer :: i,ithread integer(ZMQ_PTR) :: zmq_socket_push - integer(ZMQ_PTR) :: new_zmq_push_socket + integer(ZMQ_PTR), external :: new_zmq_push_socket zmq_context = f77_zmq_ctx_new () - + PROVIDE H_apply_buffer_allocated + +! do while (N_det < N_det_max) - PROVIDE nproc - !$OMP PARALLEL PRIVATE(i,ithread,zmq_socket_push) num_threads(nproc+1) - ithread = omp_get_thread_num() - if (ithread == 0) then - call receive_selected_determinants() - else - zmq_socket_push = new_zmq_push_socket() - - do i=ithread,N_det_generators,nproc - print *, i , "/", N_det_generators - !!$OMP TASK DEFAULT(SHARED) - call select_connected(i, 1.d-6, ci_electronic_energy,zmq_socket_push) - !!$OMP END TASK - enddo - !!$OMP TASKWAIT - print *, "END .... " - if (ithread == 1) then - integer :: rc - rc = f77_zmq_send(zmq_socket_push,0,1,0) - if (rc /= 1) then - stop 'Error sending termination signal' - endif - endif - call end_zmq_push_socket(zmq_socket_push) - - endif - !$OMP END PARALLEL + PROVIDE ci_electronic_energy + PROVIDE nproc + !$OMP PARALLEL PRIVATE(i,ithread,zmq_socket_push) num_threads(nproc+1) + ithread = omp_get_thread_num() + if (ithread == 0) then + call receive_selected_determinants() + else + zmq_socket_push = new_zmq_push_socket() + do i=ithread,N_det_generators,nproc + print *, i , "/", N_det_generators + call select_connected(i, 1.d-7, ci_electronic_energy,zmq_socket_push) + enddo + print *, "END .... " + + if (ithread == 1) then + integer :: rc + rc = f77_zmq_send(zmq_socket_push,0,1,0) + if (rc /= 1) then + stop 'Error sending termination signal' + endif + endif + call end_zmq_push_socket(zmq_socket_push, 0) + endif + !$OMP END PARALLEL + call copy_H_apply_buffer_to_wf() + call diagonalize_CI + call save_wavefunction() +! end do end diff --git a/plugins/Full_CI_ZMQ/selection.irp.f b/plugins/Full_CI_ZMQ/selection.irp.f index efeb4724..5d0310ed 100644 --- a/plugins/Full_CI_ZMQ/selection.irp.f +++ b/plugins/Full_CI_ZMQ/selection.irp.f @@ -17,6 +17,9 @@ subroutine select_connected(i_generator,thr,E0,zmq_socket_push) double precision :: fock_diag_tmp(2,mo_tot_num+1) +! print *, i_generator, "MM" +! return + call build_fock_tmp(fock_diag_tmp,psi_det_generators(1,1,i_generator),N_int) integer :: k,l @@ -49,20 +52,22 @@ subroutine receive_selected_determinants() ! Receive via ZMQ the selected determinants END_DOC integer(ZMQ_PTR) :: zmq_socket_pull - integer(ZMQ_PTR) :: new_zmq_pull_socket + integer(ZMQ_PTR), external :: new_zmq_pull_socket - integer(bit_kind) :: received_det(N_int,2), shtak(N_int, 2, 100000) + integer(bit_kind) :: received_det(N_int,2), shtak(N_int, 2, 100) integer :: msg_size, rc - integer :: acc, tac, j - logical, external :: detEq + integer :: acc, tac, j, robin + logical, external :: detEq, is_in_wavefunction acc = 0 tac = 0 + robin = 0 msg_size = bit_kind*N_int*2 zmq_socket_pull = new_zmq_pull_socket() grab : do while (f77_zmq_recv(zmq_socket_pull, received_det, msg_size, 0) == msg_size) - tac += 1 + tac += 1 + if (is_in_wavefunction(received_det,N_int)) stop "???..." do j=1,acc if(detEq(received_det, shtak(1,1,j), N_int)) then cycle grab @@ -70,12 +75,21 @@ subroutine receive_selected_determinants() end do acc += 1 shtak(:,:,acc) = received_det + print *, acc, size(shtak, 3) + if(acc == size(shtak, 3)) then + print *, robin, nproc + call fill_H_apply_buffer_no_selection(acc,shtak,N_int,robin) + acc = 0 + robin += 1 + if(robin == nproc) robin = 0 + end if + call debug_det(received_det,N_int) print *, "tot ", acc, tac end do grab print *, "tot ", acc, tac + call fill_H_apply_buffer_no_selection(acc,shtak,N_int,robin) call end_zmq_pull_socket(zmq_socket_pull) - end subroutine select_singles(i_generator,thr,hole_mask,particle_mask,fock_diag_tmp,E0,zmq_socket_push) diff --git a/src/Determinants/H_apply.irp.f b/src/Determinants/H_apply.irp.f index 28513597..e5490e69 100644 --- a/src/Determinants/H_apply.irp.f +++ b/src/Determinants/H_apply.irp.f @@ -192,7 +192,7 @@ subroutine copy_H_apply_buffer_to_wf SOFT_TOUCH N_det psi_det psi_coef logical :: found_duplicates - call remove_duplicates_in_psi_det(found_duplicates) + !call remove_duplicates_in_psi_det(found_duplicates) end subroutine remove_duplicates_in_psi_det(found_duplicates) diff --git a/src/ZMQ/utils.irp.f b/src/ZMQ/utils.irp.f index af97161b..7164d9a6 100644 --- a/src/ZMQ/utils.irp.f +++ b/src/ZMQ/utils.irp.f @@ -347,19 +347,19 @@ subroutine end_zmq_pull_socket(zmq_socket_pull) integer :: rc character*(8), external :: zmq_port - rc = f77_zmq_unbind(zmq_socket_pull,zmq_socket_pull_inproc_address) +! rc = f77_zmq_unbind(zmq_socket_pull,zmq_socket_pull_inproc_address) +! if (rc /= 0) then +! print *, rc +! print *, irp_here, 'f77_zmq_unbind(zmq_socket_pull,zmq_socket_pull_inproc_address)' +! stop 'error' +! endif + + ! rc = f77_zmq_unbind(zmq_socket_pull,zmq_socket_pull_tcp_address) ! if (rc /= 0) then ! print *, rc -! print *, irp_here, 'f77_zmq_unbind(zmq_socket_pull,zmq_socket_pull_inproc_address)' +! print *, irp_here, 'f77_zmq_unbind(zmq_socket_pull,zmq_socket_pull_tcp_address)' ! stop 'error' ! endif - - rc = f77_zmq_unbind(zmq_socket_pull,zmq_socket_pull_tcp_address) - if (rc /= 0) then - print *, rc - print *, irp_here, 'f77_zmq_unbind(zmq_socket_pull,zmq_socket_pull_tcp_address)' - stop 'error' - endif call sleep(1) ! see https://github.com/zeromq/libzmq/issues/1922