Skip to content

Commit

Permalink
RI-HFX: reduce memory by compressing tensor data
Browse files Browse the repository at this point in the history
compression algorithm from standard HFX (refactored)
  • Loading branch information
pseewald committed May 22, 2020
1 parent aa8e558 commit 5a5fcdf
Show file tree
Hide file tree
Showing 8 changed files with 447 additions and 287 deletions.
48 changes: 24 additions & 24 deletions src/hfx_derivatives.F
Original file line number Diff line number Diff line change
Expand Up @@ -746,12 +746,12 @@ SUBROUTINE derivatives_four_center(qs_env, rho_ao, rho_ao_resp, hfx_section, par
IF (treat_forces_in_core) THEN
!! IF new md step -> reinitialize containers
IF (actual_x_data%memory_parameter%recalc_forces) THEN
CALL dealloc_containers(actual_x_data, hfx_do_eval_forces)
CALL alloc_containers(actual_x_data, my_bin_size, hfx_do_eval_forces)
CALL dealloc_containers(actual_x_data%store_forces, memory_parameter%actual_memory_usage)
CALL alloc_containers(actual_x_data%store_forces, my_bin_size)

DO bin = 1, my_bin_size
maxval_container => actual_x_data%maxval_container_forces(bin)
integral_containers => actual_x_data%integral_containers_forces(:, bin)
maxval_container => actual_x_data%store_forces%maxval_container(bin)
integral_containers => actual_x_data%store_forces%integral_containers(:, bin)
CALL hfx_init_container(maxval_container, memory_parameter%actual_memory_usage, .FALSE.)
DO i = 1, 64
CALL hfx_init_container(integral_containers(i), memory_parameter%actual_memory_usage, .FALSE.)
Expand All @@ -762,10 +762,10 @@ SUBROUTINE derivatives_four_center(qs_env, rho_ao, rho_ao_resp, hfx_section, par
!! Decompress the first cache for maxvals and integrals
IF (.NOT. actual_x_data%memory_parameter%recalc_forces) THEN
DO bin = 1, my_bin_size
maxval_cache => actual_x_data%maxval_cache_forces(bin)
maxval_container => actual_x_data%maxval_container_forces(bin)
integral_caches => actual_x_data%integral_caches_forces(:, bin)
integral_containers => actual_x_data%integral_containers_forces(:, bin)
maxval_cache => actual_x_data%store_forces%maxval_cache(bin)
maxval_container => actual_x_data%store_forces%maxval_container(bin)
integral_caches => actual_x_data%store_forces%integral_caches(:, bin)
integral_containers => actual_x_data%store_forces%integral_containers(:, bin)
CALL hfx_decompress_first_cache(bits_max_val, maxval_cache, maxval_container, &
memory_parameter%actual_memory_usage, .FALSE.)
DO i = 1, 64
Expand Down Expand Up @@ -847,11 +847,11 @@ SUBROUTINE derivatives_four_center(qs_env, rho_ao, rho_ao_resp, hfx_section, par

IF (treat_forces_in_core) THEN
IF (my_bin_size > 0) THEN
maxval_container => actual_x_data%maxval_container_forces(1)
maxval_cache => actual_x_data%maxval_cache_forces(1)
maxval_container => actual_x_data%store_forces%maxval_container(1)
maxval_cache => actual_x_data%store_forces%maxval_cache(1)

integral_containers => actual_x_data%integral_containers_forces(:, 1)
integral_caches => actual_x_data%integral_caches_forces(:, 1)
integral_containers => actual_x_data%store_forces%integral_containers(:, 1)
integral_caches => actual_x_data%store_forces%integral_caches(:, 1)
END IF
END IF

Expand All @@ -878,10 +878,10 @@ SUBROUTINE derivatives_four_center(qs_env, rho_ao, rho_ao_resp, hfx_section, par
my_thread_id = shm_task_list(shm_task_counter)%thread_id
my_bin_id = shm_task_list(shm_task_counter)%bin_id
IF (treat_forces_in_core) THEN
maxval_cache => qs_env%x_data(irep, my_thread_id)%maxval_cache_forces(my_bin_id)
maxval_container => qs_env%x_data(irep, my_thread_id)%maxval_container_forces(my_bin_id)
integral_caches => qs_env%x_data(irep, my_thread_id)%integral_caches_forces(:, my_bin_id)
integral_containers => qs_env%x_data(irep, my_thread_id)%integral_containers_forces(:, my_bin_id)
maxval_cache => qs_env%x_data(irep, my_thread_id)%store_forces%maxval_cache(my_bin_id)
maxval_container => qs_env%x_data(irep, my_thread_id)%store_forces%maxval_container(my_bin_id)
integral_caches => qs_env%x_data(irep, my_thread_id)%store_forces%integral_caches(:, my_bin_id)
integral_containers => qs_env%x_data(irep, my_thread_id)%store_forces%integral_containers(:, my_bin_id)
END IF
distribution_forces => qs_env%x_data(irep, my_thread_id)%distribution_forces(my_bin_id)
do_it = .TRUE.
Expand Down Expand Up @@ -1634,10 +1634,10 @@ SUBROUTINE derivatives_four_center(qs_env, rho_ao, rho_ao_resp, hfx_section, par
IF (actual_x_data%memory_parameter%recalc_forces) THEN
IF (treat_forces_in_core) THEN
DO bin = 1, my_bin_size
maxval_cache => actual_x_data%maxval_cache_forces(bin)
maxval_container => actual_x_data%maxval_container_forces(bin)
integral_caches => actual_x_data%integral_caches_forces(:, bin)
integral_containers => actual_x_data%integral_containers_forces(:, bin)
maxval_cache => actual_x_data%store_forces%maxval_cache(bin)
maxval_container => actual_x_data%store_forces%maxval_container(bin)
integral_caches => actual_x_data%store_forces%integral_caches(:, bin)
integral_containers => actual_x_data%store_forces%integral_containers(:, bin)
CALL hfx_flush_last_cache(bits_max_val, maxval_cache, maxval_container, memory_parameter%actual_memory_usage, &
.FALSE.)
DO i = 1, 64
Expand All @@ -1650,10 +1650,10 @@ SUBROUTINE derivatives_four_center(qs_env, rho_ao, rho_ao_resp, hfx_section, par
!! reset all caches except we calculate all on the fly
IF (treat_forces_in_core) THEN
DO bin = 1, my_bin_size
maxval_cache => actual_x_data%maxval_cache_forces(bin)
maxval_container => actual_x_data%maxval_container_forces(bin)
integral_caches => actual_x_data%integral_caches_forces(:, bin)
integral_containers => actual_x_data%integral_containers_forces(:, bin)
maxval_cache => actual_x_data%store_forces%maxval_cache(bin)
maxval_container => actual_x_data%store_forces%maxval_container(bin)
integral_caches => actual_x_data%store_forces%integral_caches(:, bin)
integral_containers => actual_x_data%store_forces%integral_containers(:, bin)

CALL hfx_reset_cache_and_container(maxval_cache, maxval_container, memory_parameter%actual_memory_usage, .FALSE.)
DO i = 1, 64
Expand Down
56 changes: 28 additions & 28 deletions src/hfx_energy_potential.F
Original file line number Diff line number Diff line change
Expand Up @@ -663,11 +663,11 @@ SUBROUTINE integrate_four_center(qs_env, x_data, ks_matrix, ehfx, rho_ao, hfx_se
counter = 0_int_8
do_disk_storage = memory_parameter%do_disk_storage
IF (do_disk_storage) THEN
maxval_container_disk => actual_x_data%maxval_container_disk
maxval_cache_disk => actual_x_data%maxval_cache_disk
maxval_container_disk => actual_x_data%store_ints%maxval_container_disk
maxval_cache_disk => actual_x_data%store_ints%maxval_cache_disk
integral_containers_disk => actual_x_data%integral_containers_disk
integral_caches_disk => actual_x_data%integral_caches_disk
integral_containers_disk => actual_x_data%store_ints%integral_containers_disk
integral_caches_disk => actual_x_data%store_ints%integral_caches_disk
END IF
IF (my_geo_change) THEN
Expand Down Expand Up @@ -928,12 +928,12 @@ SUBROUTINE integrate_four_center(qs_env, x_data, ks_matrix, ehfx, rho_ao, hfx_se
IF (.NOT. memory_parameter%do_all_on_the_fly) THEN
!! IF new md step -> reinitialize containers
IF (my_geo_change) THEN
CALL dealloc_containers(actual_x_data, hfx_do_eval_energy)
CALL alloc_containers(actual_x_data, my_bin_size, hfx_do_eval_energy)
CALL dealloc_containers(actual_x_data%store_ints, memory_parameter%actual_memory_usage)
CALL alloc_containers(actual_x_data%store_ints, my_bin_size)
DO bin = 1, my_bin_size
maxval_container => actual_x_data%maxval_container(bin)
integral_containers => actual_x_data%integral_containers(:, bin)
maxval_container => actual_x_data%store_ints%maxval_container(bin)
integral_containers => actual_x_data%store_ints%integral_containers(:, bin)
CALL hfx_init_container(maxval_container, memory_parameter%actual_memory_usage, .FALSE.)
DO i = 1, 64
CALL hfx_init_container(integral_containers(i), memory_parameter%actual_memory_usage, .FALSE.)
Expand All @@ -944,10 +944,10 @@ SUBROUTINE integrate_four_center(qs_env, x_data, ks_matrix, ehfx, rho_ao, hfx_se
!! Decompress the first cache for maxvals and integrals
IF (.NOT. my_geo_change) THEN
DO bin = 1, my_bin_size
maxval_cache => actual_x_data%maxval_cache(bin)
maxval_container => actual_x_data%maxval_container(bin)
integral_caches => actual_x_data%integral_caches(:, bin)
integral_containers => actual_x_data%integral_containers(:, bin)
maxval_cache => actual_x_data%store_ints%maxval_cache(bin)
maxval_container => actual_x_data%store_ints%maxval_container(bin)
integral_caches => actual_x_data%store_ints%integral_caches(:, bin)
integral_containers => actual_x_data%store_ints%integral_containers(:, bin)
CALL hfx_decompress_first_cache(bits_max_val, maxval_cache, maxval_container, &
memory_parameter%actual_memory_usage, .FALSE.)
DO i = 1, 64
Expand Down Expand Up @@ -1026,11 +1026,11 @@ SUBROUTINE integrate_four_center(qs_env, x_data, ks_matrix, ehfx, rho_ao, hfx_se
!$OMP BARRIER
IF (my_bin_size > 0) THEN
maxval_container => actual_x_data%maxval_container(1)
maxval_cache => actual_x_data%maxval_cache(1)
maxval_container => actual_x_data%store_ints%maxval_container(1)
maxval_cache => actual_x_data%store_ints%maxval_cache(1)
integral_containers => actual_x_data%integral_containers(:, 1)
integral_caches => actual_x_data%integral_caches(:, 1)
integral_containers => actual_x_data%store_ints%integral_containers(:, 1)
integral_caches => actual_x_data%store_ints%integral_caches(:, 1)
END IF
!$OMP BARRIER
Expand Down Expand Up @@ -1103,10 +1103,10 @@ SUBROUTINE integrate_four_center(qs_env, x_data, ks_matrix, ehfx, rho_ao, hfx_se
my_thread_id = shm_task_list(shm_task_counter)%thread_id
my_bin_id = shm_task_list(shm_task_counter)%bin_id
IF (.NOT. memory_parameter%do_all_on_the_fly) THEN
maxval_cache => x_data(irep, my_thread_id)%maxval_cache(my_bin_id)
maxval_container => x_data(irep, my_thread_id)%maxval_container(my_bin_id)
integral_caches => x_data(irep, my_thread_id)%integral_caches(:, my_bin_id)
integral_containers => x_data(irep, my_thread_id)%integral_containers(:, my_bin_id)
maxval_cache => x_data(irep, my_thread_id)%store_ints%maxval_cache(my_bin_id)
maxval_container => x_data(irep, my_thread_id)%store_ints%maxval_container(my_bin_id)
integral_caches => x_data(irep, my_thread_id)%store_ints%integral_caches(:, my_bin_id)
integral_containers => x_data(irep, my_thread_id)%store_ints%integral_containers(:, my_bin_id)
ENDIF
distribution_energy => x_data(irep, my_thread_id)%distribution_energy(my_bin_id)
do_it = .TRUE.
Expand Down Expand Up @@ -2074,10 +2074,10 @@ SUBROUTINE integrate_four_center(qs_env, x_data, ks_matrix, ehfx, rho_ao, hfx_se
IF (my_geo_change) THEN
IF (.NOT. memory_parameter%do_all_on_the_fly) THEN
DO bin = 1, my_bin_size
maxval_cache => actual_x_data%maxval_cache(bin)
maxval_container => actual_x_data%maxval_container(bin)
integral_caches => actual_x_data%integral_caches(:, bin)
integral_containers => actual_x_data%integral_containers(:, bin)
maxval_cache => actual_x_data%store_ints%maxval_cache(bin)
maxval_container => actual_x_data%store_ints%maxval_container(bin)
integral_caches => actual_x_data%store_ints%integral_caches(:, bin)
integral_containers => actual_x_data%store_ints%integral_containers(:, bin)
CALL hfx_flush_last_cache(bits_max_val, maxval_cache, maxval_container, memory_parameter%actual_memory_usage, &
.FALSE.)
DO i = 1, 64
Expand All @@ -2090,10 +2090,10 @@ SUBROUTINE integrate_four_center(qs_env, x_data, ks_matrix, ehfx, rho_ao, hfx_se
!! reset all caches except we calculate all on the fly
IF (.NOT. memory_parameter%do_all_on_the_fly) THEN
DO bin = 1, my_bin_size
maxval_cache => actual_x_data%maxval_cache(bin)
maxval_container => actual_x_data%maxval_container(bin)
integral_caches => actual_x_data%integral_caches(:, bin)
integral_containers => actual_x_data%integral_containers(:, bin)
maxval_cache => actual_x_data%store_ints%maxval_cache(bin)
maxval_container => actual_x_data%store_ints%maxval_container(bin)
integral_caches => actual_x_data%store_ints%integral_caches(:, bin)
integral_containers => actual_x_data%store_ints%integral_containers(:, bin)
CALL hfx_reset_cache_and_container(maxval_cache, maxval_container, memory_parameter%actual_memory_usage, .FALSE.)
DO i = 1, 64
Expand Down

0 comments on commit 5a5fcdf

Please sign in to comment.