aboutsummaryrefslogtreecommitdiff
path: root/Tools/CodeGen/CodeGen.m
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2011-05-27 15:00:10 +0200
committerIan Hinder <ian.hinder@aei.mpg.de>2011-05-27 16:13:38 +0200
commitf12da408e1ce5c6e29d93ec5512546a21800fd75 (patch)
tree473f5eb438e7ac762050040bf10cd1b36d8fa9b0 /Tools/CodeGen/CodeGen.m
parentb4ac7ab88138ba7346589b737d72e99323dc070a (diff)
Support no-inline functions for derivatives in vectorised code
Create two versions of the derivative operators, once as macro, and once as no-inline function. When a function is used, then the grid spacing 1/dx must be passed in explicitly. This was done differently before and is now slightly faster and shorter. The no-inline function reduces code size, and should probably also be available for the non-vectorised code, but this is not implemented.
Diffstat (limited to 'Tools/CodeGen/CodeGen.m')
-rw-r--r--Tools/CodeGen/CodeGen.m11
1 files changed, 9 insertions, 2 deletions
diff --git a/Tools/CodeGen/CodeGen.m b/Tools/CodeGen/CodeGen.m
index 5188da5..e5712ca 100644
--- a/Tools/CodeGen/CodeGen.m
+++ b/Tools/CodeGen/CodeGen.m
@@ -448,12 +448,19 @@ DeclareFDVariables[] :=
*)
CommentedBlock["Declare finite differencing variables", {}];
-InitialiseFDSpacingVariablesC[] :=
+InitialiseFDSpacingVariablesC[vectorise_:False] :=
{
(* DeclareAssignVariable["ptrdiff_t", "di", "CCTK_GFINDEX3D(cctkGH,1,0,0) - CCTK_GFINDEX3D(cctkGH,0,0,0)"], *)
DeclareAssignVariable["ptrdiff_t", "di", "1"],
DeclareAssignVariable["ptrdiff_t", "dj", "CCTK_GFINDEX3D(cctkGH,0,1,0) - CCTK_GFINDEX3D(cctkGH,0,0,0)"],
DeclareAssignVariable["ptrdiff_t", "dk", "CCTK_GFINDEX3D(cctkGH,0,0,1) - CCTK_GFINDEX3D(cctkGH,0,0,0)"],
+ If[vectorise,
+ {
+ DeclareAssignVariable["ptrdiff_t", "cdi", "sizeof(CCTK_REAL) * di"],
+ DeclareAssignVariable["ptrdiff_t", "cdj", "sizeof(CCTK_REAL) * dj"],
+ DeclareAssignVariable["ptrdiff_t", "cdk", "sizeof(CCTK_REAL) * dk"]
+ },
+ ""],
DeclareAssignVariable[DataType[], "dx", "ToReal(CCTK_DELTA_SPACE(0))"],
DeclareAssignVariable[DataType[], "dy", "ToReal(CCTK_DELTA_SPACE(1))"],
DeclareAssignVariable[DataType[], "dz", "ToReal(CCTK_DELTA_SPACE(2))"]
@@ -471,7 +478,7 @@ InitialiseFDVariables[vectorise_] :=
CommentedBlock["Initialise finite differencing variables",
{ If[SOURCELANGUAGE == "Fortran",
InitialiseFDSpacingVariablesFortran[],
- InitialiseFDSpacingVariablesC[]],
+ InitialiseFDSpacingVariablesC[vectorise]],
DeclareAssignVariable[DataType[], "dxi", "INV(dx)"],
DeclareAssignVariable[DataType[], "dyi", "INV(dy)"],