From 0c88a04ec80d0b966f6ad53e209b082553235c42 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 28 Jan 2019 11:51:38 +0100 Subject: [PATCH] Tuned pt2_F --- ocaml/TaskServer.ml | 2 +- src/cipsi/pt2_stoch_routines.irp.f | 8 ++++++-- src/cipsi/run_pt2_slave.irp.f | 2 +- src/cipsi/selection.irp.f | 2 +- src/cipsi/slave_cipsi.irp.f | 5 +++++ src/determinants/determinants.irp.f | 2 ++ src/determinants/occ_pattern.irp.f | 11 ++++++++--- 7 files changed, 24 insertions(+), 8 deletions(-) diff --git a/ocaml/TaskServer.ml b/ocaml/TaskServer.ml index 4d48a2d0..76349844 100644 --- a/ocaml/TaskServer.ml +++ b/ocaml/TaskServer.ml @@ -50,7 +50,7 @@ let zmq_context = Zmq.Context.create () let () = - Zmq.Context.set_io_threads zmq_context 8 + Zmq.Context.set_io_threads zmq_context 16 let bind_socket ~socket_type ~socket ~port = diff --git a/src/cipsi/pt2_stoch_routines.irp.f b/src/cipsi/pt2_stoch_routines.irp.f index e058f792..a994d331 100644 --- a/src/cipsi/pt2_stoch_routines.irp.f +++ b/src/cipsi/pt2_stoch_routines.irp.f @@ -13,9 +13,9 @@ END_PROVIDER integer :: i integer :: e e = elec_num - n_core_orb * 2 - pt2_n_tasks_max = 1+min((e*(e-1))/2, int(dsqrt(dble(N_det_selectors)))/4) + pt2_n_tasks_max = 1+min((e*(e-1)), int(dsqrt(dble(N_det_selectors)))/10) do i=1,N_det_generators - pt2_F(i) = 1 + int(dble(pt2_n_tasks_max)*dsqrt(dabs(psi_coef_sorted_gen(i,pt2_stoch_istate)))) + pt2_F(i) = 1 + int(dble(pt2_n_tasks_max)*dabs(maxval(psi_coef_sorted_gen(i,:)))**(0.75d0)) enddo END_PROVIDER @@ -120,7 +120,11 @@ subroutine ZMQ_pt2(E, pt2,relative_error, error, variance, norm, N_in) PROVIDE psi_bilinear_matrix_rows psi_det_sorted_order psi_bilinear_matrix_order PROVIDE psi_bilinear_matrix_transp_rows_loc psi_bilinear_matrix_transp_columns PROVIDE psi_bilinear_matrix_transp_order psi_selectors_coef_transp psi_det_sorted + PROVIDE psi_det_hii + if (s2_eig) then + PROVIDE psi_occ_pattern_hii det_to_occ_pattern + endif if (N_det < max(10,N_states)) then pt2=0.d0 diff --git a/src/cipsi/run_pt2_slave.irp.f b/src/cipsi/run_pt2_slave.irp.f index 8063a7fc..04c28e1b 100644 --- a/src/cipsi/run_pt2_slave.irp.f +++ b/src/cipsi/run_pt2_slave.irp.f @@ -93,7 +93,7 @@ subroutine run_pt2_slave(thread,iproc,energy) !print *, i_generator(1), time1-time2, n_tasks, pt2_F(i_generator(1)) enddo call wall_time(time1) -!print *, i_generator(1), time1-time0, n_tasks +!print *, '-->', i_generator(1), time1-time0, n_tasks integer, external :: tasks_done_to_taskserver if (tasks_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id,n_tasks) == -1) then diff --git a/src/cipsi/selection.irp.f b/src/cipsi/selection.irp.f index 6ecb8ea7..86b5536f 100644 --- a/src/cipsi/selection.irp.f +++ b/src/cipsi/selection.irp.f @@ -1266,4 +1266,4 @@ subroutine bitstring_to_list_in_selection( string, list, n_elements, Nint) enddo end - +! diff --git a/src/cipsi/slave_cipsi.irp.f b/src/cipsi/slave_cipsi.irp.f index 59022519..45f6ee09 100644 --- a/src/cipsi/slave_cipsi.irp.f +++ b/src/cipsi/slave_cipsi.irp.f @@ -279,6 +279,11 @@ subroutine run_slave_main print *, 'pt2_stoch_istate', pt2_stoch_istate print *, 'state_average_weight', state_average_weight print *, 'Number of threads', nproc_target + PROVIDE psi_det_hii + + if (s2_eig) then + PROVIDE psi_occ_pattern_hii det_to_occ_pattern + endif endif !$OMP PARALLEL PRIVATE(i) NUM_THREADS(nproc_target+1) diff --git a/src/determinants/determinants.irp.f b/src/determinants/determinants.irp.f index cbb013ec..f29939ad 100644 --- a/src/determinants/determinants.irp.f +++ b/src/determinants/determinants.irp.f @@ -877,9 +877,11 @@ BEGIN_PROVIDER [ double precision, psi_det_Hii, (N_det) ] END_DOC integer :: i,j double precision, external :: diag_H_mat_elem + !$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(i) do i=1,N_det psi_det_Hii(i) = diag_H_mat_elem(psi_det(1,1,i),N_int) enddo + !$OMP END PARALLEL DO END_PROVIDER diff --git a/src/determinants/occ_pattern.irp.f b/src/determinants/occ_pattern.irp.f index f8f50a28..d5f458a0 100644 --- a/src/determinants/occ_pattern.irp.f +++ b/src/determinants/occ_pattern.irp.f @@ -408,11 +408,13 @@ subroutine make_s2_eigenfunction integer :: N_det_new, ithread, omp_get_thread_num integer, parameter :: bufsze = 1000 logical, external :: is_in_wavefunction + logical :: update + update=.False. call write_int(6,N_occ_pattern,'Number of occupation patterns') !$OMP PARALLEL DEFAULT(NONE) & - !$OMP SHARED(N_occ_pattern, psi_occ_pattern, elec_alpha_num,N_int) & + !$OMP SHARED(N_occ_pattern, psi_occ_pattern, elec_alpha_num,N_int,update) & !$OMP PRIVATE(s,ithread, d, det_buffer, smax, N_det_new,i,j,k) N_det_new = 0 call occ_pattern_to_dets_size(psi_occ_pattern(1,1,1),s,elec_alpha_num,N_int) @@ -434,6 +436,7 @@ subroutine make_s2_eigenfunction if ( is_in_wavefunction(d(1,1,j), N_int) ) then cycle endif + update = .true. N_det_new += 1 det_buffer(:,:,N_det_new) = d(:,:,j) if (N_det_new == bufsze) then @@ -451,8 +454,10 @@ subroutine make_s2_eigenfunction deallocate(d,det_buffer) !$OMP END PARALLEL - call copy_H_apply_buffer_to_wf - SOFT_TOUCH N_det psi_coef psi_det psi_occ_pattern N_occ_pattern + if (update) then + call copy_H_apply_buffer_to_wf + TOUCH N_det psi_coef psi_det psi_occ_pattern N_occ_pattern + endif call write_time(6) end