[cig-commits] r15515 - mc/3D/CitcomS/trunk/lib
leif at geodynamics.org
leif at geodynamics.org
Mon Aug 3 18:45:56 PDT 2009
Author: leif
Date: 2009-08-03 18:45:56 -0700 (Mon, 03 Aug 2009)
New Revision: 15515
Modified:
mc/3D/CitcomS/trunk/lib/multigrid_kernel.cu
Log:
The function collect_terms() turns out to be quite expensive (over 70%
according to gprof). Perform it once per level, caching the result.
Modified: mc/3D/CitcomS/trunk/lib/multigrid_kernel.cu
===================================================================
--- mc/3D/CitcomS/trunk/lib/multigrid_kernel.cu 2009-08-03 23:26:59 UTC (rev 15514)
+++ mc/3D/CitcomS/trunk/lib/multigrid_kernel.cu 2009-08-04 01:45:56 UTC (rev 15515)
@@ -653,7 +653,7 @@
assert(E->parallel.nproc == 1);
}
-static void collect_terms(
+static int2 *collect_terms(
struct Some_variables *E
)
{
@@ -662,7 +662,7 @@
const int neq = E->lmesh.NEQ;
const int nno = E->lmesh.NNO;
- E->term = (int2 *)malloc((neq+1) * MAX_EQN * sizeof(int2));
+ int2 *term = (int2 *)malloc((neq+1) * MAX_EQN * sizeof(int2));
for (int e = 0; e <= neq; e++) {
int2 *term = E->term + e*MAX_EQN;
@@ -688,7 +688,7 @@
}
}
- return;
+ return term;
}
@@ -728,7 +728,10 @@
kE.NODE = E->NODE[level][M];
- collect_terms(&kE);
+ static int2 *term[MAX_LEVELS];
+ if (!term[level])
+ term[level] = collect_terms(&kE);
+ kE.term = term[level];
do_gauss_seidel(
&kE,
More information about the CIG-COMMITS
mailing list