[cig-commits] [commit] master: parallelize data transfer with Openmp for better performance. (f58c3e4)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Sat Apr 5 08:58:19 PDT 2014
Repository : ssh://shell.geodynamics.org/relax
On branch : master
Link : https://github.com/geodynamics/relax/compare/f642e5469b9fd9a355d4162fa424d663d2407f59...f58c3e4a3b537ce548f0dc9b6301d68585ba7587
>---------------------------------------------------------------
commit f58c3e4a3b537ce548f0dc9b6301d68585ba7587
Author: Sylvain Barbot <sbarbot at ntu.edu.sg>
Date: Sat Apr 5 23:58:10 2014 +0800
parallelize data transfer with Openmp for better performance.
>---------------------------------------------------------------
f58c3e4a3b537ce548f0dc9b6301d68585ba7587
src/elastic3d.f90 | 102 +++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 78 insertions(+), 24 deletions(-)
diff --git a/src/elastic3d.f90 b/src/elastic3d.f90
index 8603847..efabc0c 100644
--- a/src/elastic3d.f90
+++ b/src/elastic3d.f90
@@ -3023,17 +3023,35 @@ CONTAINS
REAL*4, INTENT(IN), DIMENSION(sx1,sx2,sx3) :: v
REAL*4, INTENT(IN), OPTIONAL :: c1,c2
+ INTEGER :: i3
+
IF (PRESENT(c1)) THEN
IF (PRESENT(c2)) THEN
- u=c1*u+c2*v
+!$omp parallel do
+ DO i3=1,sx3
+ u(:,:,i3)=c1*u(:,:,i3)+c2*v(:,:,i3)
+ END DO
+!$omp end parallel do
ELSE
- u=c1*u+v
+!$omp parallel do
+ DO i3=1,sx3
+ u(:,:,i3)=c1*u(:,:,i3)+v(:,:,i3)
+ END DO
+!$omp end parallel do
END IF
ELSE
IF (PRESENT(c2)) THEN
- u=u+c2*v
+!$omp parallel do
+ DO i3=1,sx3
+ u(:,:,i3)=u(:,:,i3)+c2*v(:,:,i3)
+ END DO
+!$omp end parallel do
ELSE
- u=u+v
+!$omp parallel do
+ DO i3=1,sx3
+ u(:,:,i3)=u(:,:,i3)+v(:,:,i3)
+ END DO
+!$omp end parallel do
END IF
END IF
@@ -3117,34 +3135,70 @@ CONTAINS
IF (PRESENT(c2)) THEN
IF (0._4 .eq. c1) THEN
IF (0._4 .eq. c2) THEN
- DO 05 i3=1,sx3; DO 05 i2=1,sx2; DO 05 i1=1,sx1
- t1(i1,i2,i3)=TENSOR(0._4,0._4,0._4,0._4,0._4,0._4)
-05 CONTINUE
+!$omp parallel do private(i1,i2)
+ DO i3=1,sx3
+ DO i2=1,sx2
+ DO i1=1,sx1
+ t1(i1,i2,i3)=TENSOR(0._4,0._4,0._4,0._4,0._4,0._4)
+ END DO
+ END DO
+ END DO
+!$omp end parallel do
ELSE
- DO 10 i3=1,sx3; DO 10 i2=1,sx2; DO 10 i1=1,sx1
- t1(i1,i2,i3)=c2 .times. t2(i1,i2,i3)
-10 CONTINUE
- END IF
+!$omp parallel do private(i1,i2)
+ DO i3=1,sx3
+ DO i2=1,sx2
+ DO i1=1,sx1
+ t1(i1,i2,i3)=c2 .times. t2(i1,i2,i3)
+ END DO
+ END DO
+ END DO
+!$omp end parallel do
+ END IF
ELSE
- DO 20 i3=1,sx3; DO 20 i2=1,sx2; DO 20 i1=1,sx1
- t1(i1,i2,i3)=(c1 .times. t1(i1,i2,i3)) .plus. &
- (c2 .times. t2(i1,i2,i3))
-20 CONTINUE
+!$omp parallel do private(i1,i2)
+ DO i3=1,sx3
+ DO i2=1,sx2
+ DO i1=1,sx1
+ t1(i1,i2,i3)=(c1 .times. t1(i1,i2,i3)) .plus. &
+ (c2 .times. t2(i1,i2,i3))
+ END DO
+ END DO
+ END DO
+!$omp end parallel do
END IF
ELSE
- DO 30 i3=1,sx3; DO 30 i2=1,sx2; DO 30 i1=1,sx1
- t1(i1,i2,i3)=(c1 .times. t1(i1,i2,i3)) .plus. t2(i1,i2,i3)
-30 CONTINUE
+!$omp parallel do private(i1,i2)
+ DO i3=1,sx3
+ DO i2=1,sx2
+ DO i1=1,sx1
+ t1(i1,i2,i3)=(c1 .times. t1(i1,i2,i3)) .plus. t2(i1,i2,i3)
+ END DO
+ END DO
+ END DO
+!$omp end parallel do
END IF
ELSE
IF (PRESENT(c2)) THEN
- DO 40 i3=1,sx3; DO 40 i2=1,sx2; DO 40 i1=1,sx1
- t1(i1,i2,i3)=t1(i1,i2,i3) .plus. (c2 .times. t2(i1,i2,i3))
-40 CONTINUE
+!$omp parallel do private(i1,i2)
+ DO i3=1,sx3
+ DO i2=1,sx2
+ DO i1=1,sx1
+ t1(i1,i2,i3)=t1(i1,i2,i3) .plus. (c2 .times. t2(i1,i2,i3))
+ END DO
+ END DO
+ END DO
+!$omp end parallel do
ELSE
- DO 50 i3=1,sx3; DO 50 i2=1,sx2; DO 50 i1=1,sx1
- t1(i1,i2,i3)=t2(i1,i2,i3) .plus. t2(i1,i2,i3)
-50 CONTINUE
+!$omp parallel do private(i1,i2)
+ DO i3=1,sx3
+ DO i2=1,sx2
+ DO i1=1,sx1
+ t1(i1,i2,i3)=t2(i1,i2,i3) .plus. t2(i1,i2,i3)
+ END DO
+ END DO
+ END DO
+!$omp end parallel do
END IF
END IF
More information about the CIG-COMMITS
mailing list