From b58a109b87d1133c85d3bd097cd08bcf082c7140 Mon Sep 17 00:00:00 2001 From: knarf Date: Tue, 20 Oct 2009 18:47:35 +0000 Subject: partial openMP support, one loop remains serialized, because it would have to be rewritten to make use of openMP git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinInitialData/TwoPunctures/trunk@97 b2a53a04-0f4f-0410-87ed-f9f25ced00cf --- src/FuncAndJacobian.c | 16 ++++++++-------- src/Newton.c | 8 ++++++++ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/FuncAndJacobian.c b/src/FuncAndJacobian.c index 3dd4a87..004e784 100644 --- a/src/FuncAndJacobian.c +++ b/src/FuncAndJacobian.c @@ -378,15 +378,14 @@ J_times_dv (int nvar, int n1, int n2, int n3, derivs dv, CCTK_REAL al, be, A, B, X, R, x, r, phi, y, z, Am1, *values; derivs dU, U; - - values = dvector (0, nvar - 1); - allocate_derivs (&dU, nvar); - allocate_derivs (&U, nvar); - Derivatives_AB3 (nvar, n1, n2, n3, dv); +#pragma omp parallel for private (values,dU,U,j,k,al,A,be,B,phi,X,R,x,r,y,z,Am1,ivar,indx) schedule(dynamic) for (i = 0; i < n1; i++) { + values = dvector (0, nvar - 1); + allocate_derivs (&dU, nvar); + allocate_derivs (&U, nvar); for (j = 0; j < n2; j++) { for (k = 0; k < n3; k++) @@ -440,10 +439,10 @@ J_times_dv (int nvar, int n1, int n2, int n3, derivs dv, } } } + free_dvector (values, 0, nvar - 1); + free_derivs (&dU, nvar); + free_derivs (&U, nvar); } - free_dvector (values, 0, nvar - 1); - free_derivs (&dU, nvar); - free_derivs (&U, nvar); } /* --------------------------------------------------------------------------*/ @@ -607,6 +606,7 @@ SetMatrix_JFD (int nvar, int n1, int n2, int n3, derivs u, N2 = n2 - 1; N3 = n3 - 1; +#pragma omp parallel for private (j,k,ivar,row) schedule(dynamic) for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) diff --git a/src/Newton.c b/src/Newton.c index 77be43f..9140c08 100644 --- a/src/Newton.c +++ b/src/Newton.c @@ -221,12 +221,16 @@ relax (CCTK_REAL * restrict const dv, { for (n = 0; n < N_PlaneRelax; n++) { +#pragma omp parallel for schedule(dynamic) for (i = 2; i < n1; i = i + 2) LineRelax_be (dv, i, k, nvar, n1, n2, n3, rhs, ncols, cols, JFD); +#pragma omp parallel for schedule(dynamic) for (i = 1; i < n1; i = i + 2) LineRelax_be (dv, i, k, nvar, n1, n2, n3, rhs, ncols, cols, JFD); +#pragma omp parallel for schedule(dynamic) for (j = 1; j < n2; j = j + 2) LineRelax_al (dv, j, k, nvar, n1, n2, n3, rhs, ncols, cols, JFD); +#pragma omp parallel for schedule(dynamic) for (j = 0; j < n2; j = j + 2) LineRelax_al (dv, j, k, nvar, n1, n2, n3, rhs, ncols, cols, JFD); } @@ -235,12 +239,16 @@ relax (CCTK_REAL * restrict const dv, { for (n = 0; n < N_PlaneRelax; n++) { +#pragma omp parallel for schedule(dynamic) for (i = 0; i < n1; i = i + 2) LineRelax_be (dv, i, k, nvar, n1, n2, n3, rhs, ncols, cols, JFD); +#pragma omp parallel for schedule(dynamic) for (i = 1; i < n1; i = i + 2) LineRelax_be (dv, i, k, nvar, n1, n2, n3, rhs, ncols, cols, JFD); +#pragma omp parallel for schedule(dynamic) for (j = 1; j < n2; j = j + 2) LineRelax_al (dv, j, k, nvar, n1, n2, n3, rhs, ncols, cols, JFD); +#pragma omp parallel for schedule(dynamic) for (j = 0; j < n2; j = j + 2) LineRelax_al (dv, j, k, nvar, n1, n2, n3, rhs, ncols, cols, JFD); } -- cgit v1.2.3