From e493eb28cd7a065e924b3526e61a8b55fc00c868 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 13 Jan 2020 10:54:08 +0100 Subject: [PATCH] Share memory for f12 arrays --- CI/F12CI.ml | 46 ------------------------------------- MOBasis/HF12.ml | 60 ++++++++++++++++++++++++++----------------------- 2 files changed, 32 insertions(+), 74 deletions(-) diff --git a/CI/F12CI.ml b/CI/F12CI.ml index 2b241ca..76c8070 100644 --- a/CI/F12CI.ml +++ b/CI/F12CI.ml @@ -58,52 +58,6 @@ let dressing_vector ~frozen_core hf12_integrals f12_amplitudes ci = let sum l f = List.fold_left (fun accu i -> accu +. f i) 0. l -let array_3_init d1 d2 d3 f = - let result = - Bigarray.(Array3.create Float64 fortran_layout) d1 d2 d3 - in - for k=1 to d3 do - for j=1 to d2 do - for i=1 to d1 do - result.{i,j,k} <- f i j k - done - done - done; - result - -let array_4_init d1 d2 d3 d4 f = - let result = - Bigarray.(Genarray.create Float64 fortran_layout) [| d1;d2;d3;d4 |] - in - for l=1 to d4 do - for k=1 to d3 do - for j=1 to d2 do - for i=1 to d1 do - result.{i,j,k,l} <- f i j k l - done - done - done - done; - result - -let array_5_init d1 d2 d3 d4 d5 f = - let result = - Bigarray.(Genarray.create Float64 fortran_layout) [| d1;d2;d3;d4;d5 |] - in - for m=1 to d5 do - for l=1 to d4 do - for k=1 to d3 do - for j=1 to d2 do - for i=1 to d1 do - result.{i,j,k,l,m} <- f i j k l m - done - done - done - done - done; - result - - let make ~simulation ?(threshold=1.e-12) ~frozen_core ~mo_basis ~aux_basis_filename ?(state=1) () = diff --git a/MOBasis/HF12.ml b/MOBasis/HF12.ml index 2e9a6db..46d0480 100644 --- a/MOBasis/HF12.ml +++ b/MOBasis/HF12.ml @@ -21,47 +21,51 @@ let sum l f = List.fold_left (fun accu i -> accu +. f i) 0. l let array_3_init d1 d2 d3 f = let result = - Bigarray.(Array3.create Float64 fortran_layout) d1 d2 d3 + SharedMemory.create Bigarray.Float64 [| d1 ; d2 ; d3 |] + |> Bigarray.array3_of_genarray in - for k=1 to d3 do - for j=1 to d2 do - for i=1 to d1 do - result.{i,j,k} <- f i j k - done - done - done; + if Parallel.master then + for k=1 to d3 do + for j=1 to d2 do + for i=1 to d1 do + result.{i,j,k} <- f i j k + done + done + done; result let array_4_init d1 d2 d3 d4 f = let result = - Bigarray.(Genarray.create Float64 fortran_layout) [| d1;d2;d3;d4 |] + SharedMemory.create Bigarray.Float64 [| d1;d2;d3;d4 |] in - for l=1 to d4 do - for k=1 to d3 do - for j=1 to d2 do - for i=1 to d1 do - result.{i,j,k,l} <- f i j k l - done - done - done - done; - result - -let array_5_init d1 d2 d3 d4 d5 f = - let result = - Bigarray.(Genarray.create Float64 fortran_layout) [| d1;d2;d3;d4;d5 |] - in - for m=1 to d5 do + if Parallel.master then for l=1 to d4 do for k=1 to d3 do for j=1 to d2 do for i=1 to d1 do - result.{i,j,k,l,m} <- f i j k l m + result.{i,j,k,l} <- f i j k l done done done - done - done; + done; + result + +let array_5_init d1 d2 d3 d4 d5 f = + let result = + SharedMemory.create Bigarray.Float64 [| d1;d2;d3;d4;d5 |] + in + if Parallel.master then + for m=1 to d5 do + for l=1 to d4 do + for k=1 to d3 do + for j=1 to d2 do + for i=1 to d1 do + result.{i,j,k,l,m} <- f i j k l m + done + done + done + done + done; result