10
0
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-07-11 22:03:55 +02:00

Get total memory

This commit is contained in:
Anthony Scemama 2023-07-07 19:05:46 +02:00
parent 905d88529f
commit 4237fa888f
2 changed files with 46 additions and 5 deletions

View File

@ -141,7 +141,7 @@ BEGIN_PROVIDER [ integer, cholesky_ao_num ]
logical :: memory_ok logical :: memory_ok
memory_ok = .False. memory_ok = .False.
s = 1.d-2 s = 0.1d0
! Inrease s until the arrays fit in memory ! Inrease s until the arrays fit in memory
do do
@ -176,7 +176,7 @@ BEGIN_PROVIDER [ integer, cholesky_ao_num ]
exit exit
endif endif
if (nq == 0) then if ((s > 1.d0).or.(nq == 0)) then
print *, 'Not enough memory. Reduce cholesky threshold' print *, 'Not enough memory. Reduce cholesky threshold'
stop -1 stop -1
endif endif
@ -219,10 +219,15 @@ BEGIN_PROVIDER [ integer, cholesky_ao_num ]
stop -1 stop -1
endif endif
Delta(:,:) = 0.d0
!$OMP PARALLEL DEFAULT(SHARED) PRIVATE(m,k,p,q,j) !$OMP PARALLEL DEFAULT(SHARED) PRIVATE(m,k,p,q,j)
!$OMP DO
do q=1,nq
Delta(:,q) = 0.d0
enddo
!$OMP ENDDO NOWAIT
!$OMP DO !$OMP DO
do k=1,N do k=1,N
do p=1,np do p=1,np
@ -232,7 +237,9 @@ BEGIN_PROVIDER [ integer, cholesky_ao_num ]
Ltmp_q(q,k) = L(Dset(q),k) Ltmp_q(q,k) = L(Dset(q),k)
enddo enddo
enddo enddo
!$OMP END DO !$OMP END DO NOWAIT
!$OMP BARRIER
!$OMP DO SCHEDULE(guided) !$OMP DO SCHEDULE(guided)
do m=1,nq do m=1,nq

View File

@ -4,8 +4,10 @@ BEGIN_PROVIDER [ integer, qp_max_mem ]
! Maximum memory in Gb ! Maximum memory in Gb
END_DOC END_DOC
character*(128) :: env character*(128) :: env
integer, external :: get_total_available_memory
qp_max_mem = 500 qp_max_mem = get_total_available_memory()
call write_int(6,qp_max_mem,'Total available memory (GB)')
call getenv('QP_MAXMEM',env) call getenv('QP_MAXMEM',env)
if (trim(env) /= '') then if (trim(env) /= '') then
call lock_io() call lock_io()
@ -122,3 +124,35 @@ subroutine print_memory_usage()
'.. >>>>> [ RES MEM : ', rss , & '.. >>>>> [ RES MEM : ', rss , &
' GB ] [ VIRT MEM : ', mem, ' GB ] <<<<< ..' ' GB ] [ VIRT MEM : ', mem, ' GB ] <<<<< ..'
end end
integer function get_total_available_memory() result(res)
implicit none
BEGIN_DOC
! Returns the total available memory on the current machine
END_DOC
character(len=128) :: line
integer :: status
integer :: iunit
integer*8, parameter :: KB = 1024
integer*8, parameter :: GiB = 1024**3
integer, external :: getUnitAndOpen
iunit = getUnitAndOpen('/proc/meminfo','r')
res = 512
do
read(iunit, '(A)', END=10) line
if (line(1:10) == "MemTotal: ") then
read(line(11:), *, ERR=20) res
res = int((res*KB) / GiB,4)
exit
20 continue
end if
end do
10 continue
close(iunit)
end function get_total_available_memory