[cig-commits] [commit] master: parallelize data transfer with Openmp for better performance. (f58c3e4)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Thu Apr 10 03:02:54 PDT 2014


Repository : ssh://geoshell/relax

On branch  : master
Link       : https://github.com/geodynamics/relax/compare/f58c3e4a3b537ce548f0dc9b6301d68585ba7587...64bc932cf611ccf4683972590830ed18b974c6e9

>---------------------------------------------------------------

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