mirror of
https://github.com/LCPQ/quantum_package
synced 2024-10-19 06:21:47 +02:00
Parallelization of Davidson
This commit is contained in:
parent
dc5e5f024d
commit
6d3a801d0e
@ -208,13 +208,12 @@ end subroutine
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
subroutine davidson_collector(zmq_to_qp_run_socket, zmq_socket_pull , v0, s0, LDA)
|
subroutine davidson_collector(zmq_to_qp_run_socket, v0, s0, LDA)
|
||||||
use f77_zmq
|
use f77_zmq
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
integer :: LDA
|
integer :: LDA
|
||||||
integer(ZMQ_PTR), intent(in) :: zmq_to_qp_run_socket
|
integer(ZMQ_PTR), intent(in) :: zmq_to_qp_run_socket
|
||||||
integer(ZMQ_PTR), intent(in) :: zmq_socket_pull
|
|
||||||
|
|
||||||
double precision ,intent(inout) :: v0(LDA, N_states_diag)
|
double precision ,intent(inout) :: v0(LDA, N_states_diag)
|
||||||
double precision ,intent(inout) :: s0(LDA, N_states_diag)
|
double precision ,intent(inout) :: s0(LDA, N_states_diag)
|
||||||
@ -223,11 +222,14 @@ subroutine davidson_collector(zmq_to_qp_run_socket, zmq_socket_pull , v0, s0, LD
|
|||||||
|
|
||||||
double precision, allocatable :: v_0(:,:), s_0(:,:)
|
double precision, allocatable :: v_0(:,:), s_0(:,:)
|
||||||
integer :: i,j
|
integer :: i,j
|
||||||
|
integer(ZMQ_PTR), external :: new_zmq_pull_socket
|
||||||
|
integer(ZMQ_PTR) :: zmq_socket_pull
|
||||||
|
|
||||||
allocate(v_0(N_det,N_states_diag), s_0(N_det,N_states_diag))
|
allocate(v_0(N_det,N_states_diag), s_0(N_det,N_states_diag))
|
||||||
v0 = 0.d0
|
v0 = 0.d0
|
||||||
s0 = 0.d0
|
s0 = 0.d0
|
||||||
more = 1
|
more = 1
|
||||||
|
zmq_socket_pull = new_zmq_pull_socket()
|
||||||
do while (more == 1)
|
do while (more == 1)
|
||||||
call davidson_pull_results(zmq_socket_pull, v_0, s_0, task_id)
|
call davidson_pull_results(zmq_socket_pull, v_0, s_0, task_id)
|
||||||
do j=1,N_states_diag
|
do j=1,N_states_diag
|
||||||
@ -239,38 +241,13 @@ subroutine davidson_collector(zmq_to_qp_run_socket, zmq_socket_pull , v0, s0, LD
|
|||||||
call zmq_delete_task(zmq_to_qp_run_socket,zmq_socket_pull,task_id,more)
|
call zmq_delete_task(zmq_to_qp_run_socket,zmq_socket_pull,task_id,more)
|
||||||
end do
|
end do
|
||||||
deallocate(v_0,s_0)
|
deallocate(v_0,s_0)
|
||||||
|
|
||||||
end subroutine
|
|
||||||
|
|
||||||
|
|
||||||
subroutine davidson_run(zmq_to_qp_run_socket , v0, s0, LDA)
|
|
||||||
use f77_zmq
|
|
||||||
implicit none
|
|
||||||
|
|
||||||
integer :: LDA
|
|
||||||
integer(ZMQ_PTR), intent(in) :: zmq_to_qp_run_socket
|
|
||||||
integer(ZMQ_PTR),external :: new_zmq_to_qp_run_socket
|
|
||||||
integer(ZMQ_PTR) :: zmq_collector
|
|
||||||
integer(ZMQ_PTR), external :: new_zmq_pull_socket
|
|
||||||
integer(ZMQ_PTR) :: zmq_socket_pull
|
|
||||||
|
|
||||||
integer :: i
|
|
||||||
integer, external :: omp_get_thread_num
|
|
||||||
|
|
||||||
double precision , intent(inout) :: v0(LDA, N_states_diag)
|
|
||||||
double precision , intent(inout) :: s0(LDA, N_states_diag)
|
|
||||||
|
|
||||||
|
|
||||||
zmq_collector = new_zmq_to_qp_run_socket()
|
|
||||||
zmq_socket_pull = new_zmq_pull_socket()
|
|
||||||
call davidson_collector(zmq_collector, zmq_socket_pull , v0, s0, LDA)
|
|
||||||
call end_zmq_to_qp_run_socket(zmq_collector)
|
|
||||||
call end_zmq_pull_socket(zmq_socket_pull)
|
call end_zmq_pull_socket(zmq_socket_pull)
|
||||||
|
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
subroutine H_S2_u_0_nstates_zmq(v_0,s_0,u_0,N_st,sze_8)
|
subroutine H_S2_u_0_nstates_zmq(v_0,s_0,u_0,N_st,sze_8)
|
||||||
use omp_lib
|
use omp_lib
|
||||||
use bitmasks
|
use bitmasks
|
||||||
@ -361,7 +338,7 @@ subroutine H_S2_u_0_nstates_zmq(v_0,s_0,u_0,N_st,sze_8)
|
|||||||
|
|
||||||
|
|
||||||
integer :: istep, imin, imax, ishift
|
integer :: istep, imin, imax, ishift
|
||||||
istep=1
|
istep=2
|
||||||
do imin=1,N_det, 524288
|
do imin=1,N_det, 524288
|
||||||
do ishift=0,istep-1
|
do ishift=0,istep-1
|
||||||
imax = min(N_det, imin+524288-1)
|
imax = min(N_det, imin+524288-1)
|
||||||
@ -378,7 +355,7 @@ subroutine H_S2_u_0_nstates_zmq(v_0,s_0,u_0,N_st,sze_8)
|
|||||||
ithread = omp_get_thread_num()
|
ithread = omp_get_thread_num()
|
||||||
if (ithread == 0 ) then
|
if (ithread == 0 ) then
|
||||||
call zmq_set_running(zmq_to_qp_run_socket)
|
call zmq_set_running(zmq_to_qp_run_socket)
|
||||||
call davidson_run(zmq_to_qp_run_socket, v_0, s_0, size(v_0,1))
|
call davidson_collector(zmq_to_qp_run_socket, v_0, s_0, size(v_0,1))
|
||||||
else
|
else
|
||||||
call davidson_slave_inproc(1)
|
call davidson_slave_inproc(1)
|
||||||
endif
|
endif
|
||||||
|
@ -157,7 +157,7 @@ subroutine H_S2_u_0_nstates_openmp_work(v_0,s_0,u_t,N_st,sze_8,istart,iend,ishif
|
|||||||
s_t = 0.d0
|
s_t = 0.d0
|
||||||
|
|
||||||
|
|
||||||
!$OMP DO SCHEDULE(static,1)
|
!$OMP DO SCHEDULE(static,1024)
|
||||||
do k_a=istart+ishift,iend,istep
|
do k_a=istart+ishift,iend,istep
|
||||||
|
|
||||||
krow = psi_bilinear_matrix_rows(k_a)
|
krow = psi_bilinear_matrix_rows(k_a)
|
||||||
@ -217,7 +217,7 @@ subroutine H_S2_u_0_nstates_openmp_work(v_0,s_0,u_t,N_st,sze_8,istart,iend,ishif
|
|||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!$OMP DO SCHEDULE(static,1)
|
!$OMP DO SCHEDULE(static,1024)
|
||||||
do k_a=istart+ishift,iend,istep
|
do k_a=istart+ishift,iend,istep
|
||||||
|
|
||||||
|
|
||||||
|
@ -445,6 +445,11 @@ subroutine end_zmq_pull_socket(zmq_socket_pull)
|
|||||||
integer :: rc
|
integer :: rc
|
||||||
character*(8), external :: zmq_port
|
character*(8), external :: zmq_port
|
||||||
|
|
||||||
|
rc = f77_zmq_setsockopt(zmq_socket_pull,ZMQ_LINGER,0,4)
|
||||||
|
if (rc /= 0) then
|
||||||
|
stop 'Unable to set ZMQ_LINGER on pull socket'
|
||||||
|
endif
|
||||||
|
|
||||||
call omp_set_lock(zmq_lock)
|
call omp_set_lock(zmq_lock)
|
||||||
rc = f77_zmq_close(zmq_socket_pull)
|
rc = f77_zmq_close(zmq_socket_pull)
|
||||||
call omp_unset_lock(zmq_lock)
|
call omp_unset_lock(zmq_lock)
|
||||||
|
Loading…
Reference in New Issue
Block a user