From 4aa4c6c96ef174293d14fdd4c4c704e06bb35994 Mon Sep 17 00:00:00 2001 From: Yann Garniron Date: Fri, 30 Mar 2018 18:16:00 +0200 Subject: [PATCH] custom buffers in dress_zmq --- plugins/dress_zmq/dress_stoch_routines.irp.f | 12 +++- plugins/dress_zmq/run_dress_slave.irp.f | 74 +++++++++++++++++++- plugins/shiftedbk/shifted_bk_routines.irp.f | 29 ++++++++ 3 files changed, 109 insertions(+), 6 deletions(-) diff --git a/plugins/dress_zmq/dress_stoch_routines.irp.f b/plugins/dress_zmq/dress_stoch_routines.irp.f index 4941b6fa..6262920a 100644 --- a/plugins/dress_zmq/dress_stoch_routines.irp.f +++ b/plugins/dress_zmq/dress_stoch_routines.irp.f @@ -163,10 +163,14 @@ subroutine dress_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, integer, allocatable :: parts_to_get(:) logical, allocatable :: actually_computed(:) integer :: total_computed - integer :: delta_loc_cur, is + integer :: delta_loc_cur, is, N_buf(3) double precision :: fac(delta_loc_N) , wei(delta_loc_N) logical :: ok + integer, allocatable :: int_buf(:) + double precision, allocatable :: double_buf(:) + integer(bit_kind), allocatable :: det_buf(:,:,:) + allocate(int_buf(N_dress_int_buffer), double_buf(N_dress_double_buffer),det_buf(N_int,2,N_dress_det_buffer)) delta_loc_cur = 1 delta = 0d0 @@ -206,7 +210,8 @@ subroutine dress_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, loop = .true. felem = N_det+1 pullLoop : do while (loop) - call pull_dress_results(zmq_socket_pull, ind, delta_loc(1,1,1,delta_loc_cur), task_id, felem_loc) + call pull_dress_results(zmq_socket_pull, ind, delta_loc(1,1,1,delta_loc_cur), int_buf, double_buf, det_buf, N_buf, task_id, felem_loc) + call dress_pulled(int_buf, double_buf, det_buf, N_buf) felem = min(felem_loc, felem) dress_mwen(:) = 0d0 @@ -449,7 +454,8 @@ END_PROVIDER done_cp_at = 0 comp_filler = .false. computed = .false. - + cps_N = 1d0 + N_dress_jobs = first_det_of_comb - 1 do i=1, N_dress_jobs dress_jobs(i) = i diff --git a/plugins/dress_zmq/run_dress_slave.irp.f b/plugins/dress_zmq/run_dress_slave.irp.f index add0091e..375829df 100644 --- a/plugins/dress_zmq/run_dress_slave.irp.f +++ b/plugins/dress_zmq/run_dress_slave.irp.f @@ -1,3 +1,5 @@ +use bitmasks + BEGIN_PROVIDER [ integer, fragment_count ] implicit none BEGIN_DOC @@ -54,7 +56,7 @@ subroutine run_dress_slave(thread,iproc,energy) read (task,*) subset, i_generator delta_ij_loc = 0d0 call alpha_callback(delta_ij_loc, i_generator, subset, iproc) - + call generator_done(i_generator) call task_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id) call push_dress_results(zmq_socket_push, i_generator, delta_ij_loc, task_id) else @@ -67,6 +69,17 @@ subroutine run_dress_slave(thread,iproc,energy) end subroutine + BEGIN_PROVIDER [ integer, dress_int_buffer, (N_dress_int_buffer) ] +&BEGIN_PROVIDER [ double precision, dress_double_buffer, (N_dress_double_buffer) ] +&BEGIN_PROVIDER [ integer(bit_kind), dress_det_buffer, (N_int, 2, N_dress_det_buffer) ] + implicit none + + dress_int_buffer = 0 + dress_double_buffer = 0d0 + dress_det_buffer = 0_bit_kind +END_PROVIDER + + subroutine push_dress_results(zmq_socket_push, ind, delta_loc, task_id) use f77_zmq implicit none @@ -89,7 +102,7 @@ subroutine push_dress_results(zmq_socket_push, ind, delta_loc, task_id) rc = f77_zmq_send( zmq_socket_push, ind, 4, ZMQ_SNDMORE) if(rc /= 4) stop "push" - + rc = f77_zmq_send( zmq_socket_push, felem, 4, ZMQ_SNDMORE) if(rc /= 4) stop "push" @@ -99,6 +112,29 @@ subroutine push_dress_results(zmq_socket_push, ind, delta_loc, task_id) rc = f77_zmq_send( zmq_socket_push, delta_loc(1,felem,2), 8*N_states*(N_det-felem+1), ZMQ_SNDMORE) if(rc /= 8*N_states*(N_det+1-felem)) stop "push" + + + + rc = f77_zmq_send( zmq_socket_push, N_dress_int_buffer, 4, ZMQ_SNDMORE) + if(rc /= 4) stop "push" + + rc = f77_zmq_send( zmq_socket_push, dress_int_buffer, 4*N_dress_int_buffer, ZMQ_SNDMORE) + if(rc /= 4*N_dress_int_buffer) stop "push" + + rc = f77_zmq_send( zmq_socket_push, N_dress_double_buffer, 4, ZMQ_SNDMORE) + if(rc /= 4) stop "push" + + rc = f77_zmq_send( zmq_socket_push, dress_double_buffer, 8*N_dress_double_buffer, ZMQ_SNDMORE) + if(rc /= 8*N_dress_double_buffer) stop "push" + + + rc = f77_zmq_send( zmq_socket_push, N_dress_det_buffer, 4, ZMQ_SNDMORE) + if(rc /= 4) stop "push" + + rc = f77_zmq_send( zmq_socket_push, dress_det_buffer, 2*N_int*bit_kind*N_dress_det_buffer, ZMQ_SNDMORE) + if(rc /= 2*N_int*bit_kind*N_dress_det_buffer) stop "push" + + rc = f77_zmq_send( zmq_socket_push, task_id, 4, 0) if(rc /= 4) stop "push" @@ -112,15 +148,19 @@ IRP_ENDIF end subroutine -subroutine pull_dress_results(zmq_socket_pull, ind, delta_loc, task_id, felem) +subroutine pull_dress_results(zmq_socket_pull, ind, delta_loc, int_buf, double_buf, det_buf, N_buf, task_id, felem) use f77_zmq implicit none integer(ZMQ_PTR), intent(in) :: zmq_socket_pull double precision, intent(inout) :: delta_loc(N_states, N_det, 2) + double precision, intent(out) :: double_buf(*) + integer, intent(out) :: int_buf(*) + integer(bit_kind), intent(out) :: det_buf(N_int, 2, *) integer, intent(out) :: felem integer, intent(out) :: ind integer, intent(out) :: task_id integer :: rc, i + integer, intent(out) :: N_buf(3) rc = f77_zmq_recv( zmq_socket_pull, ind, 4, 0) @@ -137,6 +177,34 @@ subroutine pull_dress_results(zmq_socket_pull, ind, delta_loc, task_id, felem) rc = f77_zmq_recv( zmq_socket_pull, delta_loc(1,felem,2), N_states*8*(N_det+1-felem), 0) if(rc /= 8*N_states*(N_det+1-felem)) stop "pull" + + rc = f77_zmq_recv( zmq_socket_pull, N_buf(1), 4, 0) + if(rc /= 4) stop "pull" + if(N_buf(1) > N_dress_int_buffer) stop "run_dress_slave N_buf bad size?" + + + rc = f77_zmq_recv( zmq_socket_pull, int_buf, 4*N_buf(1), 0) + if(rc /= 4*N_buf(1)) stop "pull1" + + + rc = f77_zmq_recv( zmq_socket_pull, N_buf(2), 4, 0) + if(rc /= 4) stop "pull" + if(N_buf(2) > N_dress_double_buffer) stop "run_dress_slave N_buf bad size?" + + rc = f77_zmq_recv( zmq_socket_pull, double_buf, 8*N_buf(2), 0) + if(rc /= 8*N_buf(2)) stop "pull2" + + + + + rc = f77_zmq_recv( zmq_socket_pull, N_buf(3), 4, 0) + if(rc /= 4) stop "pull" + if(N_buf(3) > N_dress_det_buffer) stop "run_dress_slave N_buf bad size?" + + rc = f77_zmq_recv( zmq_socket_pull, det_buf, 2*N_int*bit_kind*N_buf(3), 0) + if(rc /= 2*N_int*bit_kind*N_buf(3)) stop "pull3" + + rc = f77_zmq_recv( zmq_socket_pull, task_id, 4, 0) if(rc /= 4) stop "pull" diff --git a/plugins/shiftedbk/shifted_bk_routines.irp.f b/plugins/shiftedbk/shifted_bk_routines.irp.f index 2aeff1e0..9574584b 100644 --- a/plugins/shiftedbk/shifted_bk_routines.irp.f +++ b/plugins/shiftedbk/shifted_bk_routines.irp.f @@ -1,5 +1,16 @@ use selection_types + + BEGIN_PROVIDER [ integer, N_dress_int_buffer ] +&BEGIN_PROVIDER [ integer, N_dress_double_buffer ] +&BEGIN_PROVIDER [ integer, N_dress_det_buffer ] + implicit none + N_dress_int_buffer = 1 + N_dress_double_buffer = 1 + N_dress_det_buffer = 1 +END_PROVIDER + + BEGIN_PROVIDER [ double precision, fock_diag_tmp_, (2,mo_tot_num+1,Nproc) ] &BEGIN_PROVIDER [ integer, current_generator_, (Nproc) ] &BEGIN_PROVIDER [ double precision, a_h_i, (N_det, Nproc) ] @@ -21,6 +32,24 @@ use selection_types a_s2_i = 0d0 END_PROVIDER +subroutine generator_done(i_gen) + implicit none + integer, intent(in) :: i_gen + + !dress_int_buffer = ... +end subroutine + + +subroutine dress_pulled(int_buf, double_buf, det_buf, N_buf) + use bitmasks + implicit none + + integer, intent(in) :: N_buf(3) + integer, intent(in) :: int_buf(*) + double precision, intent(in) :: double_buf(*) + integer(bit_kind), intent(in) :: det_buf(N_int,2,*) + +end subroutine subroutine delta_ij_done()