From e2f4857b8383dac2b30433477531d98fc13987e0 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Sun, 29 May 2016 22:38:06 +0200 Subject: [PATCH] Fetch i_generator from ZMQ --- src/Determinants/H_apply.irp.f | 20 ++++++++++++++++---- src/Determinants/H_apply_zmq.template.f | 12 ++++++------ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/Determinants/H_apply.irp.f b/src/Determinants/H_apply.irp.f index e84e133e..abb251db 100644 --- a/src/Determinants/H_apply.irp.f +++ b/src/Determinants/H_apply.irp.f @@ -307,14 +307,14 @@ subroutine fill_H_apply_buffer_no_selection(n_selected,det_buffer,Nint,iproc) end -subroutine push_pt2(zmq_socket_push,pt2,norm_pert,H_pert_diag,N_st,task_id) +subroutine push_pt2(zmq_socket_push,pt2,norm_pert,H_pert_diag,i_generator,N_st,task_id) use f77_zmq implicit none BEGIN_DOC ! Push PT2 calculation to the collector END_DOC integer(ZMQ_PTR), intent(in) :: zmq_socket_push - integer, intent(in) :: N_st + integer, intent(in) :: N_st, i_generator double precision, intent(in) :: pt2(N_st), norm_pert(N_st), H_pert_diag(N_st) integer, intent(in) :: task_id integer :: rc @@ -343,6 +343,12 @@ subroutine push_pt2(zmq_socket_push,pt2,norm_pert,H_pert_diag,N_st,task_id) stop 'error' endif + rc = f77_zmq_send( zmq_socket_push, i_generator, 4, ZMQ_SNDMORE) + if (rc /= 4) then + print *, irp_here, 'f77_zmq_send( zmq_socket_push, i_generator, 4, 0)' + stop 'error' + endif + rc = f77_zmq_send( zmq_socket_push, task_id, 4, 0) if (rc /= 4) then print *, irp_here, 'f77_zmq_send( zmq_socket_push, task_id, 4, 0)' @@ -358,7 +364,7 @@ subroutine push_pt2(zmq_socket_push,pt2,norm_pert,H_pert_diag,N_st,task_id) ! endif end -subroutine pull_pt2(zmq_socket_pull,pt2,norm_pert,H_pert_diag,N_st,n,task_id) +subroutine pull_pt2(zmq_socket_pull,pt2,norm_pert,H_pert_diag,i_generator,N_st,n,task_id) use f77_zmq implicit none BEGIN_DOC @@ -368,7 +374,7 @@ subroutine pull_pt2(zmq_socket_pull,pt2,norm_pert,H_pert_diag,N_st,n,task_id) integer, intent(in) :: N_st double precision, intent(out) :: pt2(N_st), norm_pert(N_st), H_pert_diag(N_st) integer, intent(out) :: task_id - integer, intent(out) :: n + integer, intent(out) :: n, i_generator integer :: rc n=0 @@ -406,6 +412,12 @@ subroutine pull_pt2(zmq_socket_pull,pt2,norm_pert,H_pert_diag,N_st,n,task_id) stop 'error' endif + rc = f77_zmq_recv( zmq_socket_pull, i_generator, 4, 0) + if (rc /= 4) then + print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, i_generator, 4, 0)' + stop 'error' + endif + rc = f77_zmq_recv( zmq_socket_pull, task_id, 4, 0) if (rc /= 4) then print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, task_id, 4, 0)' diff --git a/src/Determinants/H_apply_zmq.template.f b/src/Determinants/H_apply_zmq.template.f index ccb01254..fcf8cbe5 100644 --- a/src/Determinants/H_apply_zmq.template.f +++ b/src/Determinants/H_apply_zmq.template.f @@ -41,13 +41,13 @@ subroutine $subroutine($params_main) PROVIDE nproc N_states !$OMP PARALLEL DEFAULT(NONE) & !$OMP PRIVATE(i) & - !$OMP SHARED(zmq_socket_pair,N_states, pt2, norm_pert, H_pert_diag, n, task_id) & + !$OMP SHARED(zmq_socket_pair,N_states, pt2, norm_pert, H_pert_diag, n, task_id, i_generator) & !$OMP num_threads(nproc+1) i = omp_get_thread_num() if (i == 0) then call $subroutine_collector() integer :: n, task_id - call pull_pt2(zmq_socket_pair, pt2, norm_pert, H_pert_diag, N_states, n, task_id) + call pull_pt2(zmq_socket_pair, pt2, norm_pert, H_pert_diag, i_generator, N_states, n, task_id) else call $subroutine_slave_inproc(i) endif @@ -168,7 +168,7 @@ subroutine $subroutine_slave(thread, iproc) endif call task_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id,1) - call push_pt2(zmq_socket_push,pt2,norm_pert,H_pert_diag,N_st,task_id) + call push_pt2(zmq_socket_push,pt2,norm_pert,H_pert_diag,i_generator,N_st,task_id) enddo @@ -193,7 +193,7 @@ subroutine $subroutine_collector integer(ZMQ_PTR), external :: new_zmq_pull_socket integer(ZMQ_PTR) :: zmq_socket_pull integer*8 :: control, accu - integer :: n, more, task_id + integer :: n, more, task_id, i_generator integer(ZMQ_PTR),external :: new_zmq_to_qp_run_socket integer(ZMQ_PTR) :: zmq_to_qp_run_socket @@ -211,7 +211,7 @@ subroutine $subroutine_collector more = 1 do while (more == 1) - call pull_pt2(zmq_socket_pull, pt2, norm_pert, H_pert_diag, N_states, n, task_id) + call pull_pt2(zmq_socket_pull, pt2, norm_pert, H_pert_diag, i_generator, N_states, n, task_id) if (n > 0) then do k=1,N_states pt2(k,2) = pt2(k,1) + pt2(k,2) @@ -233,7 +233,7 @@ subroutine $subroutine_collector socket_result = new_zmq_pair_socket(.False.) - call push_pt2(socket_result, pt2(1,2), norm_pert(1,2), H_pert_diag(1,2), N_states,0) + call push_pt2(socket_result, pt2(1,2), norm_pert(1,2), H_pert_diag(1,2), i_generator, N_states,0) deallocate ( pt2, norm_pert, H_pert_diag)