diff options
author | Erik Schnetter <schnetter@cct.lsu.edu> | 2011-05-27 15:00:10 +0200 |
---|---|---|
committer | Ian Hinder <ian.hinder@aei.mpg.de> | 2011-05-27 16:13:38 +0200 |
commit | f12da408e1ce5c6e29d93ec5512546a21800fd75 (patch) | |
tree | 473f5eb438e7ac762050040bf10cd1b36d8fa9b0 /Tools/CodeGen/CodeGen.m | |
parent | b4ac7ab88138ba7346589b737d72e99323dc070a (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.m | 11 |
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)"], |