From 7fb75bf8796a270b99796ed311c34482833d9242 Mon Sep 17 00:00:00 2001 From: "Igor S. Gerasimov" Date: Tue, 11 Feb 2025 14:55:38 +0100 Subject: [PATCH 01/12] Remove OpenMP parallelization in WSC to avoid data-races Signed-off-by: Igor S. Gerasimov --- src/generate_wsc.f90 | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/generate_wsc.f90 b/src/generate_wsc.f90 index 84290866e..7081f22d8 100644 --- a/src/generate_wsc.f90 +++ b/src/generate_wsc.f90 @@ -64,11 +64,6 @@ subroutine generate_wsc(mol,wsc) ! ------------------------------------------------------------------------ wsc%at = 0 wsc%itbl= 0 -!$omp parallel default(none) & -!$omp private(ii,jj,wc,c,dist,trans,t,lattr,rw) & -!$omp shared(mol,wsc,rep) & -!$omp shared(mindist,minpos,nmindist,nminpos) -!$omp do schedule(dynamic) ! Each WSC of one atom consists of n atoms do ii=1,mol%n do jj=1,mol%n @@ -123,7 +118,5 @@ subroutine generate_wsc(mol,wsc) endif end do end do -!$omp enddo -!$omp endparallel end subroutine generate_wsc From 5e78524dd0eddfd6f69042073e181c5c6f818397 Mon Sep 17 00:00:00 2001 From: "Igor S. Gerasimov" Date: Tue, 11 Feb 2025 15:25:18 +0100 Subject: [PATCH 02/12] Revert "Remove OpenMP parallelization in WSC to avoid data-races" This reverts commit 85e659bebc463435ac71cffe863bb4d203566ef6. Signed-off-by: Igor S. Gerasimov --- src/generate_wsc.f90 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/generate_wsc.f90 b/src/generate_wsc.f90 index 7081f22d8..84290866e 100644 --- a/src/generate_wsc.f90 +++ b/src/generate_wsc.f90 @@ -64,6 +64,11 @@ subroutine generate_wsc(mol,wsc) ! ------------------------------------------------------------------------ wsc%at = 0 wsc%itbl= 0 +!$omp parallel default(none) & +!$omp private(ii,jj,wc,c,dist,trans,t,lattr,rw) & +!$omp shared(mol,wsc,rep) & +!$omp shared(mindist,minpos,nmindist,nminpos) +!$omp do schedule(dynamic) ! Each WSC of one atom consists of n atoms do ii=1,mol%n do jj=1,mol%n @@ -118,5 +123,7 @@ subroutine generate_wsc(mol,wsc) endif end do end do +!$omp enddo +!$omp endparallel end subroutine generate_wsc From baf5f7624cb5c31b647c6c8566f7f535c342262b Mon Sep 17 00:00:00 2001 From: "Igor S. Gerasimov" Date: Tue, 11 Feb 2025 15:26:56 +0100 Subject: [PATCH 03/12] mindist,minpos,nmindist,nminpos must be private Signed-off-by: Igor S. Gerasimov --- src/generate_wsc.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generate_wsc.f90 b/src/generate_wsc.f90 index 84290866e..02f5085c9 100644 --- a/src/generate_wsc.f90 +++ b/src/generate_wsc.f90 @@ -67,7 +67,7 @@ subroutine generate_wsc(mol,wsc) !$omp parallel default(none) & !$omp private(ii,jj,wc,c,dist,trans,t,lattr,rw) & !$omp shared(mol,wsc,rep) & -!$omp shared(mindist,minpos,nmindist,nminpos) +!$omp private(mindist,minpos,nmindist,nminpos) !$omp do schedule(dynamic) ! Each WSC of one atom consists of n atoms do ii=1,mol%n From 2800fed153e0d580caf83387063b57bce446eaf1 Mon Sep 17 00:00:00 2001 From: "Igor S. Gerasimov" Date: Tue, 11 Feb 2025 15:27:30 +0100 Subject: [PATCH 04/12] Use collapse(2) Signed-off-by: Igor S. Gerasimov --- src/generate_wsc.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/generate_wsc.f90 b/src/generate_wsc.f90 index 02f5085c9..c23411de9 100644 --- a/src/generate_wsc.f90 +++ b/src/generate_wsc.f90 @@ -64,11 +64,11 @@ subroutine generate_wsc(mol,wsc) ! ------------------------------------------------------------------------ wsc%at = 0 wsc%itbl= 0 -!$omp parallel default(none) & +!$omp parallel do default(none) & !$omp private(ii,jj,wc,c,dist,trans,t,lattr,rw) & !$omp shared(mol,wsc,rep) & !$omp private(mindist,minpos,nmindist,nminpos) -!$omp do schedule(dynamic) +!$omp collapse(2) schedule(dynamic,32) ! Each WSC of one atom consists of n atoms do ii=1,mol%n do jj=1,mol%n From 37782e524782106167aa92ddfcb3316d2a34eae9 Mon Sep 17 00:00:00 2001 From: "Igor S. Gerasimov" Date: Tue, 11 Feb 2025 15:30:06 +0100 Subject: [PATCH 05/12] Update OpenMP statement Signed-off-by: Igor S. Gerasimov --- src/generate_wsc.f90 | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/generate_wsc.f90 b/src/generate_wsc.f90 index c23411de9..bea5e158b 100644 --- a/src/generate_wsc.f90 +++ b/src/generate_wsc.f90 @@ -64,12 +64,12 @@ subroutine generate_wsc(mol,wsc) ! ------------------------------------------------------------------------ wsc%at = 0 wsc%itbl= 0 + ! Each WSC of one atom consists of n atoms !$omp parallel do default(none) & !$omp private(ii,jj,wc,c,dist,trans,t,lattr,rw) & !$omp shared(mol,wsc,rep) & -!$omp private(mindist,minpos,nmindist,nminpos) +!$omp private(mindist,minpos,nmindist,nminpos) & !$omp collapse(2) schedule(dynamic,32) - ! Each WSC of one atom consists of n atoms do ii=1,mol%n do jj=1,mol%n !if (ii.eq.jj) cycle @@ -123,7 +123,5 @@ subroutine generate_wsc(mol,wsc) endif end do end do -!$omp enddo -!$omp endparallel end subroutine generate_wsc From afe798e0bf3e0c40410f3f9fb1ae75ff4a2e4e75 Mon Sep 17 00:00:00 2001 From: "Igor S. Gerasimov" Date: Wed, 12 Feb 2025 09:58:38 +0100 Subject: [PATCH 06/12] Split parallel and do statements Signed-off-by: Igor S. Gerasimov --- src/generate_wsc.f90 | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/generate_wsc.f90 b/src/generate_wsc.f90 index bea5e158b..2294c852a 100644 --- a/src/generate_wsc.f90 +++ b/src/generate_wsc.f90 @@ -64,12 +64,14 @@ subroutine generate_wsc(mol,wsc) ! ------------------------------------------------------------------------ wsc%at = 0 wsc%itbl= 0 + + !$omp parallel default(none) & + !$omp private(ii,jj,wc,c,dist,trans,t,lattr,rw) & + !$omp shared(mol,wsc,rep) & + !$omp private(mindist,minpos,nmindist,nminpos) + ! Each WSC of one atom consists of n atoms -!$omp parallel do default(none) & -!$omp private(ii,jj,wc,c,dist,trans,t,lattr,rw) & -!$omp shared(mol,wsc,rep) & -!$omp private(mindist,minpos,nmindist,nminpos) & -!$omp collapse(2) schedule(dynamic,32) + !$omp do collapse(2) schedule(dynamic,32) do ii=1,mol%n do jj=1,mol%n !if (ii.eq.jj) cycle @@ -123,5 +125,7 @@ subroutine generate_wsc(mol,wsc) endif end do end do + !$omp end do + !$omp end parallel end subroutine generate_wsc From 390a3665506f3811cbe347ded0a1c73bf130d66d Mon Sep 17 00:00:00 2001 From: "Igor S. Gerasimov" Date: Wed, 12 Feb 2025 09:59:32 +0100 Subject: [PATCH 07/12] Set values to default at each iteration Signed-off-by: Igor S. Gerasimov --- src/generate_wsc.f90 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/generate_wsc.f90 b/src/generate_wsc.f90 index 2294c852a..6868885d7 100644 --- a/src/generate_wsc.f90 +++ b/src/generate_wsc.f90 @@ -74,6 +74,9 @@ subroutine generate_wsc(mol,wsc) !$omp do collapse(2) schedule(dynamic,32) do ii=1,mol%n do jj=1,mol%n + lattr = 0 + dist = 0.0_wp + trans = .true. !if (ii.eq.jj) cycle ! find according neighbours c=0 From eb0537f893c1c7a7d0ea859d4672976b267cc076 Mon Sep 17 00:00:00 2001 From: "Igor S. Gerasimov" Date: Wed, 12 Feb 2025 10:00:56 +0100 Subject: [PATCH 08/12] Do allocation in parallel region Signed-off-by: Igor S. Gerasimov --- src/generate_wsc.f90 | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/generate_wsc.f90 b/src/generate_wsc.f90 index 6868885d7..5e7e5e095 100644 --- a/src/generate_wsc.f90 +++ b/src/generate_wsc.f90 @@ -54,12 +54,6 @@ subroutine generate_wsc(mol,wsc) call wsc%allocate(mol%n,rep) ! ------------------------------------------------------------------------ -! initialize -! ------------------------------------------------------------------------ - allocate( lattr(3,wsc%cells), source = 0 ) - allocate( dist(wsc%cells), source = 0.0_wp ) - allocate( trans(wsc%cells), source = .true. ) -! ------------------------------------------------------------------------ ! Create the Wigner-Seitz Cell (WSC) ! ------------------------------------------------------------------------ wsc%at = 0 @@ -70,6 +64,10 @@ subroutine generate_wsc(mol,wsc) !$omp shared(mol,wsc,rep) & !$omp private(mindist,minpos,nmindist,nminpos) + allocate( lattr(3,wsc%cells), source = 0 ) + allocate( dist(wsc%cells), source = 0.0_wp ) + allocate( trans(wsc%cells), source = .true. ) + ! Each WSC of one atom consists of n atoms !$omp do collapse(2) schedule(dynamic,32) do ii=1,mol%n From c597603c28e82d0dd4612a5c396c703af2c79986 Mon Sep 17 00:00:00 2001 From: "Igor S. Gerasimov" Date: Thu, 13 Feb 2025 09:13:26 +0100 Subject: [PATCH 09/12] Private aa,bb,cc Signed-off-by: Igor S. Gerasimov --- src/generate_wsc.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generate_wsc.f90 b/src/generate_wsc.f90 index 5e7e5e095..527409e13 100644 --- a/src/generate_wsc.f90 +++ b/src/generate_wsc.f90 @@ -60,7 +60,7 @@ subroutine generate_wsc(mol,wsc) wsc%itbl= 0 !$omp parallel default(none) & - !$omp private(ii,jj,wc,c,dist,trans,t,lattr,rw) & + !$omp private(ii,jj,aa,bb,cc,wc,c,dist,trans,t,lattr,rw) & !$omp shared(mol,wsc,rep) & !$omp private(mindist,minpos,nmindist,nminpos) From aff1908a511428a5727213baf4002ae5f485232d Mon Sep 17 00:00:00 2001 From: "Igor S. Gerasimov" Date: Thu, 13 Feb 2025 09:15:34 +0100 Subject: [PATCH 10/12] Explicitly deallocate temp arrays at the end of OMP scope Signed-off-by: Igor S. Gerasimov --- src/generate_wsc.f90 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/generate_wsc.f90 b/src/generate_wsc.f90 index 527409e13..6e22cc164 100644 --- a/src/generate_wsc.f90 +++ b/src/generate_wsc.f90 @@ -127,6 +127,7 @@ subroutine generate_wsc(mol,wsc) end do end do !$omp end do + deallocate(lattr, dist, trans) !$omp end parallel end subroutine generate_wsc From 5145905861c80d688f23d27ebd9112891b13c033 Mon Sep 17 00:00:00 2001 From: "Igor S. Gerasimov" Date: Thu, 13 Feb 2025 09:16:44 +0100 Subject: [PATCH 11/12] No need for extra update of values Signed-off-by: Igor S. Gerasimov --- src/generate_wsc.f90 | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/generate_wsc.f90 b/src/generate_wsc.f90 index 6e22cc164..87b10cafa 100644 --- a/src/generate_wsc.f90 +++ b/src/generate_wsc.f90 @@ -72,9 +72,6 @@ subroutine generate_wsc(mol,wsc) !$omp do collapse(2) schedule(dynamic,32) do ii=1,mol%n do jj=1,mol%n - lattr = 0 - dist = 0.0_wp - trans = .true. !if (ii.eq.jj) cycle ! find according neighbours c=0 From 388686801931e51c809003048b671e7ade170e9a Mon Sep 17 00:00:00 2001 From: "Igor S. Gerasimov" Date: Thu, 13 Feb 2025 09:23:14 +0100 Subject: [PATCH 12/12] Remove ich Signed-off-by: Igor S. Gerasimov --- src/generate_wsc.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generate_wsc.f90 b/src/generate_wsc.f90 index 87b10cafa..df0a44891 100644 --- a/src/generate_wsc.f90 +++ b/src/generate_wsc.f90 @@ -29,7 +29,7 @@ subroutine generate_wsc(mol,wsc) ! Variables ! ------------------------------------------------------------------------ integer :: rep(3) - integer :: ii,jj,ich + integer :: ii,jj integer :: aa,bb,cc integer :: c,wc integer :: minpos