aboutsummaryrefslogtreecommitdiff
path: root/Tools/CodeGen
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2012-01-23 22:52:28 -0600
committerIan Hinder <ian.hinder@aei.mpg.de>2012-01-23 22:52:28 -0600
commit3ec191542f8c0d94e59058b956e2d68078e877c6 (patch)
tree2b9e94d8ceee02f29aeb72c16ac430a6edce2d0a /Tools/CodeGen
parent787584a293300473701084b219fd79cf0ab9d84a (diff)
Create an outline of a CaKernel code file
Diffstat (limited to 'Tools/CodeGen')
-rw-r--r--Tools/CodeGen/CaKernel.m35
-rw-r--r--Tools/CodeGen/KrancThorn.m20
2 files changed, 48 insertions, 7 deletions
diff --git a/Tools/CodeGen/CaKernel.m b/Tools/CodeGen/CaKernel.m
index 76ebeac..c7ad53a 100644
--- a/Tools/CodeGen/CaKernel.m
+++ b/Tools/CodeGen/CaKernel.m
@@ -18,9 +18,10 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*)
-BeginPackage["CaKernel`", {"Errors`", "Helpers`", "Kranc`", "CodeGenCactus`", "MapLookup`", "Calculation`"}];
+BeginPackage["CaKernel`", {"Errors`", "Helpers`", "Kranc`", "CodeGenCactus`", "MapLookup`", "Calculation`", "CodeGen`"}];
CaKernelCCL;
+CaKernelCode;
Begin["`Private`"];
@@ -61,6 +62,38 @@ DefFn[CaKernelCCL[calcs_List] :=
{},
Map[kernelCCLBlock, calcs]]];
+DefFn[codeBlock[macro_String, contents:CodeGenBlock] :=
+ Module[
+ {},
+ {macro<>"_Begin_s", "\n",
+ IndentBlock[{contents,"\n"}],
+ macro<>"_End_s","\n"}]];
+
+DefFn[CaKernelCode[calc_List] :=
+ Module[
+ {kernel = "CAKERNEL_"<>GetCalculationName[calc]},
+ codeBlock[
+ kernel<>"_Declare",
+
+ {kernel<>"_Declare_Cached_Variables_s"<>"\n",
+ kernel<>"_Declare_Flow_Variables_s"<>"\n",
+
+ codeBlock[
+ kernel<>"_Limit_Threads_To_LSH",
+
+ {kernel<>"_Fetch_Data_To_Cache_s"<>"\n",
+
+ codeBlock[
+ kernel<>"_Computations",
+
+ {kernel<>"_Iterate_Local_Tile_s"<>"\n",
+ kernel<>"_Fetch_Front_Tile_To_Cache_s"<>"\n",
+
+ codeBlock[
+ kernel<>"_Limit_Threads_To_Compute",
+
+ "// Kernel code"]}]}]}]]];
+
End[];
EndPackage[];
diff --git a/Tools/CodeGen/KrancThorn.m b/Tools/CodeGen/KrancThorn.m
index e7f3187..2001eeb 100644
--- a/Tools/CodeGen/KrancThorn.m
+++ b/Tools/CodeGen/KrancThorn.m
@@ -274,15 +274,23 @@ CreateKrancThorn[groupsOrig_, parentDirectory_, thornName_, opts:OptionsPattern[
Map[unqualifiedName, inheritedKeywordParams]];
InfoMessage[Terse, "Creating calculation source files"];
- calcSources = Map[CreateSetterSource[
- {Join[#, {ODEGroups -> Join[odeGroups, rhsODEGroups],
- Parameters -> allParams, PartialDerivatives -> partialDerivs}]},
- False, {}, implementation, opts] &, calcs];
- calcFilenames = Map[lookup[#, Name] <> ext &, calcs];
+
+ calcs = Map[Join[#,
+ {ODEGroups -> Join[odeGroups, rhsODEGroups],
+ Parameters -> allParams,
+ PartialDerivatives -> partialDerivs}] &, calcs];
+
+ If[!OptionValue[UseCaKernel],
+ calcSources = Map[CreateSetterSource[{#}, False, {}, implementation, opts] &, calcs];
+ calcFilenames = Map[lookup[#, Name] <> ext &, calcs],
+ (* else *)
+ calcSources = Map[CaKernelCode, calcs];
+ calcFilenames = Map[lookup[#, Name] <> ".code" &, calcs]];
(* Makefile *)
InfoMessage[Terse, "Creating make file"];
- make = CreateMakefile[Join[{"Startup.cc", "RegisterMoL.cc", "RegisterSymmetries.cc"}, calcFilenames,
+ make = CreateMakefile[Join[{"Startup.cc", "RegisterMoL.cc", "RegisterSymmetries.cc"},
+ If[!OptionValue[UseCaKernel], calcFilenames, {}],
Map[lookup[#, Filename] &, boundarySources]]];
(* Put all the above together and generate the Cactus thorn *)