mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-11-19 04:22:32 +01:00
Reduced RAM in pt2 slaves
This commit is contained in:
parent
97361aaf17
commit
9b0d38fb7b
@ -248,8 +248,8 @@ subroutine ZMQ_pt2(E, pt2,relative_error, error, variance, norm, N_in)
|
|||||||
+ 64.d0*pt2_n_tasks_max & ! task
|
+ 64.d0*pt2_n_tasks_max & ! task
|
||||||
+ 3.d0*pt2_n_tasks_max*N_states & ! pt2, variance, norm
|
+ 3.d0*pt2_n_tasks_max*N_states & ! pt2, variance, norm
|
||||||
+ 1.d0*pt2_n_tasks_max & ! i_generator, subset
|
+ 1.d0*pt2_n_tasks_max & ! i_generator, subset
|
||||||
+ 2.d0*(N_int*2.d0*N_in + N_in) & ! selection buffers
|
+ 1.d0*(N_int*2.d0*ii+ ii) & ! selection buffer
|
||||||
+ 1.d0*(N_int*2.d0*N_in + N_in) & ! sort/merge selection buffers
|
+ 1.d0*(N_int*2.d0*ii+ ii) & ! sort selection buffer
|
||||||
+ 2.0d0*(ii) & ! preinteresting, interesting,
|
+ 2.0d0*(ii) & ! preinteresting, interesting,
|
||||||
! prefullinteresting, fullinteresting
|
! prefullinteresting, fullinteresting
|
||||||
+ 2.0d0*(N_int*2*ii) & ! minilist, fullminilist
|
+ 2.0d0*(N_int*2*ii) & ! minilist, fullminilist
|
||||||
@ -422,6 +422,7 @@ subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, varianc
|
|||||||
stop_now = .false.
|
stop_now = .false.
|
||||||
do while (n <= N_det_generators)
|
do while (n <= N_det_generators)
|
||||||
if(f(pt2_J(n)) == 0) then
|
if(f(pt2_J(n)) == 0) then
|
||||||
|
!print *, 'f(pt2_J(n)) == 0'
|
||||||
d(pt2_J(n)) = .true.
|
d(pt2_J(n)) = .true.
|
||||||
do while(d(U+1))
|
do while(d(U+1))
|
||||||
U += 1
|
U += 1
|
||||||
@ -447,6 +448,7 @@ subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, varianc
|
|||||||
! Add Stochastic part
|
! Add Stochastic part
|
||||||
c = pt2_R(n)
|
c = pt2_R(n)
|
||||||
if(c > 0) then
|
if(c > 0) then
|
||||||
|
!print *, 'c>0'
|
||||||
x = 0d0
|
x = 0d0
|
||||||
x2 = 0d0
|
x2 = 0d0
|
||||||
x3 = 0d0
|
x3 = 0d0
|
||||||
@ -497,8 +499,10 @@ subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, varianc
|
|||||||
end if
|
end if
|
||||||
n += 1
|
n += 1
|
||||||
else if(more == 0) then
|
else if(more == 0) then
|
||||||
|
!print *, 'more == 0'
|
||||||
exit
|
exit
|
||||||
else
|
else
|
||||||
|
!print *, 'pulling...'
|
||||||
call pull_pt2_results(zmq_socket_pull, index, eI_task, vI_task, nI_task, task_id, n_tasks, b2)
|
call pull_pt2_results(zmq_socket_pull, index, eI_task, vI_task, nI_task, task_id, n_tasks, b2)
|
||||||
if (zmq_delete_tasks(zmq_to_qp_run_socket,zmq_socket_pull,task_id,n_tasks,more) == -1) then
|
if (zmq_delete_tasks(zmq_to_qp_run_socket,zmq_socket_pull,task_id,n_tasks,more) == -1) then
|
||||||
stop 'Unable to delete tasks'
|
stop 'Unable to delete tasks'
|
||||||
@ -513,10 +517,14 @@ subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, varianc
|
|||||||
call add_to_selection_buffer(b, b2%det(1,1,i), b2%val(i))
|
call add_to_selection_buffer(b, b2%det(1,1,i), b2%val(i))
|
||||||
if (b2%val(i) > b%mini) exit
|
if (b2%val(i) > b%mini) exit
|
||||||
end do
|
end do
|
||||||
|
!print *, 'done pulling'
|
||||||
end if
|
end if
|
||||||
end do
|
end do
|
||||||
|
!print *, 'deleting b2'
|
||||||
call delete_selection_buffer(b2)
|
call delete_selection_buffer(b2)
|
||||||
|
!print *, 'sorting b'
|
||||||
call sort_selection_buffer(b)
|
call sort_selection_buffer(b)
|
||||||
|
!print *, 'done'
|
||||||
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
||||||
|
|
||||||
end subroutine
|
end subroutine
|
||||||
|
@ -18,7 +18,8 @@ subroutine run_pt2_slave(thread,iproc,energy)
|
|||||||
integer(ZMQ_PTR), external :: new_zmq_push_socket
|
integer(ZMQ_PTR), external :: new_zmq_push_socket
|
||||||
integer(ZMQ_PTR) :: zmq_socket_push
|
integer(ZMQ_PTR) :: zmq_socket_push
|
||||||
|
|
||||||
type(selection_buffer) :: b, b2
|
type(selection_buffer) :: b
|
||||||
|
! type(selection_buffer) :: b2
|
||||||
logical :: done, buffer_ready
|
logical :: done, buffer_ready
|
||||||
|
|
||||||
double precision,allocatable :: pt2(:,:), variance(:,:), norm(:,:)
|
double precision,allocatable :: pt2(:,:), variance(:,:), norm(:,:)
|
||||||
@ -27,6 +28,8 @@ subroutine run_pt2_slave(thread,iproc,energy)
|
|||||||
|
|
||||||
double precision :: rss
|
double precision :: rss
|
||||||
double precision, external :: memory_of_double, memory_of_int
|
double precision, external :: memory_of_double, memory_of_int
|
||||||
|
integer :: bsize ! Size of selection buffers
|
||||||
|
|
||||||
rss = memory_of_int(pt2_n_tasks_max)*67.d0
|
rss = memory_of_int(pt2_n_tasks_max)*67.d0
|
||||||
rss += memory_of_double(pt2_n_tasks_max)*(N_states*3)
|
rss += memory_of_double(pt2_n_tasks_max)*(N_states*3)
|
||||||
call check_mem(rss,irp_here)
|
call check_mem(rss,irp_here)
|
||||||
@ -72,8 +75,9 @@ subroutine run_pt2_slave(thread,iproc,energy)
|
|||||||
enddo
|
enddo
|
||||||
if (b%N == 0) then
|
if (b%N == 0) then
|
||||||
! Only first time
|
! Only first time
|
||||||
call create_selection_buffer(N, N*2, b)
|
bsize = min(N, (elec_alpha_num * (mo_num-elec_alpha_num))**2)
|
||||||
call create_selection_buffer(N, N*2, b2)
|
call create_selection_buffer(bsize, bsize*2, b)
|
||||||
|
! call create_selection_buffer(N, N*2, b2)
|
||||||
buffer_ready = .True.
|
buffer_ready = .True.
|
||||||
else
|
else
|
||||||
ASSERT (N == b%N)
|
ASSERT (N == b%N)
|
||||||
@ -100,9 +104,9 @@ subroutine run_pt2_slave(thread,iproc,energy)
|
|||||||
done = .true.
|
done = .true.
|
||||||
endif
|
endif
|
||||||
call sort_selection_buffer(b)
|
call sort_selection_buffer(b)
|
||||||
call merge_selection_buffers(b,b2)
|
! call merge_selection_buffers(b,b2)
|
||||||
call push_pt2_results(zmq_socket_push, i_generator, pt2, variance, norm, b, task_id, n_tasks)
|
call push_pt2_results(zmq_socket_push, i_generator, pt2, variance, norm, b, task_id, n_tasks)
|
||||||
b%mini = b2%mini
|
! b%mini = b2%mini
|
||||||
b%cur=0
|
b%cur=0
|
||||||
|
|
||||||
! Try to adjust n_tasks around nproc/8 seconds per job
|
! Try to adjust n_tasks around nproc/8 seconds per job
|
||||||
@ -120,7 +124,7 @@ subroutine run_pt2_slave(thread,iproc,energy)
|
|||||||
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
||||||
if (buffer_ready) then
|
if (buffer_ready) then
|
||||||
call delete_selection_buffer(b)
|
call delete_selection_buffer(b)
|
||||||
call delete_selection_buffer(b2)
|
! call delete_selection_buffer(b2)
|
||||||
endif
|
endif
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
|
@ -55,12 +55,13 @@ subroutine run_selection_slave(thread,iproc,energy)
|
|||||||
if (done) then
|
if (done) then
|
||||||
ctask = ctask - 1
|
ctask = ctask - 1
|
||||||
else
|
else
|
||||||
integer :: i_generator, N, subset
|
integer :: i_generator, N, subset, bsize
|
||||||
read(task,*) subset, i_generator, N
|
read(task,*) subset, i_generator, N
|
||||||
if(buf%N == 0) then
|
if(buf%N == 0) then
|
||||||
! Only first time
|
! Only first time
|
||||||
call create_selection_buffer(N, N*2, buf)
|
bsize = min(N, (elec_alpha_num * (mo_num-elec_alpha_num))**2)
|
||||||
call create_selection_buffer(N, N*2, buf2)
|
call create_selection_buffer(bsize, bsize*2, buf)
|
||||||
|
! call create_selection_buffer(N, N*2, buf2)
|
||||||
buffer_ready = .True.
|
buffer_ready = .True.
|
||||||
else
|
else
|
||||||
ASSERT (N == buf%N)
|
ASSERT (N == buf%N)
|
||||||
@ -83,9 +84,9 @@ subroutine run_selection_slave(thread,iproc,energy)
|
|||||||
end do
|
end do
|
||||||
if(ctask > 0) then
|
if(ctask > 0) then
|
||||||
call sort_selection_buffer(buf)
|
call sort_selection_buffer(buf)
|
||||||
call merge_selection_buffers(buf,buf2)
|
! call merge_selection_buffers(buf,buf2)
|
||||||
call push_selection_results(zmq_socket_push, pt2, variance, norm, buf, task_id(1), ctask)
|
call push_selection_results(zmq_socket_push, pt2, variance, norm, buf, task_id(1), ctask)
|
||||||
buf%mini = buf2%mini
|
! buf%mini = buf2%mini
|
||||||
pt2(:) = 0d0
|
pt2(:) = 0d0
|
||||||
variance(:) = 0d0
|
variance(:) = 0d0
|
||||||
norm(:) = 0d0
|
norm(:) = 0d0
|
||||||
@ -108,7 +109,7 @@ subroutine run_selection_slave(thread,iproc,energy)
|
|||||||
call end_zmq_push_socket(zmq_socket_push,thread)
|
call end_zmq_push_socket(zmq_socket_push,thread)
|
||||||
if (buffer_ready) then
|
if (buffer_ready) then
|
||||||
call delete_selection_buffer(buf)
|
call delete_selection_buffer(buf)
|
||||||
call delete_selection_buffer(buf2)
|
! call delete_selection_buffer(buf2)
|
||||||
endif
|
endif
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
|
@ -153,9 +153,6 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
|
|||||||
logical :: monoAdo, monoBdo
|
logical :: monoAdo, monoBdo
|
||||||
integer :: maskInd
|
integer :: maskInd
|
||||||
|
|
||||||
double precision :: rss
|
|
||||||
double precision, external :: memory_of_double, memory_of_int
|
|
||||||
|
|
||||||
PROVIDE psi_bilinear_matrix_columns_loc psi_det_alpha_unique psi_det_beta_unique
|
PROVIDE psi_bilinear_matrix_columns_loc psi_det_alpha_unique psi_det_beta_unique
|
||||||
PROVIDE psi_bilinear_matrix_rows psi_det_sorted_order psi_bilinear_matrix_order
|
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_rows_loc psi_bilinear_matrix_transp_columns
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
subroutine create_selection_buffer(N, siz_, res)
|
subroutine create_selection_buffer(N, siz_, res)
|
||||||
use selection_types
|
use selection_types
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Allocates the memory for a selection buffer.
|
||||||
|
! The arrays have dimension siz_ and the maximum number of elements is N
|
||||||
|
END_DOC
|
||||||
|
|
||||||
integer, intent(in) :: N, siz_
|
integer, intent(in) :: N, siz_
|
||||||
type(selection_buffer), intent(out) :: res
|
type(selection_buffer), intent(out) :: res
|
||||||
|
@ -251,8 +251,8 @@ subroutine run_slave_main
|
|||||||
+ 64.d0*pt2_n_tasks_max & ! task
|
+ 64.d0*pt2_n_tasks_max & ! task
|
||||||
+ 3.d0*pt2_n_tasks_max*N_states & ! pt2, variance, norm
|
+ 3.d0*pt2_n_tasks_max*N_states & ! pt2, variance, norm
|
||||||
+ 1.d0*pt2_n_tasks_max & ! i_generator, subset
|
+ 1.d0*pt2_n_tasks_max & ! i_generator, subset
|
||||||
+ 2.d0*(N_int*2.d0*N_det+ N_det) & ! selection buffers
|
+ 2.d0*(N_int*2.d0*ii+ ii) & ! selection buffer
|
||||||
+ 1.d0*(N_int*2.d0*N_det+ N_det) & ! sort/merge selection buffers
|
+ 1.d0*(N_int*2.d0*ii+ ii) & ! sort selection buffer
|
||||||
+ 2.0d0*(ii) & ! preinteresting, interesting,
|
+ 2.0d0*(ii) & ! preinteresting, interesting,
|
||||||
! prefullinteresting, fullinteresting
|
! prefullinteresting, fullinteresting
|
||||||
+ 2.0d0*(N_int*2*ii) & ! minilist, fullminilist
|
+ 2.0d0*(N_int*2*ii) & ! minilist, fullminilist
|
||||||
|
Loading…
Reference in New Issue
Block a user