aboutsummaryrefslogtreecommitdiff
path: root/Tools/CodeGen/CaKernel.m
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/CodeGen/CaKernel.m')
-rw-r--r--Tools/CodeGen/CaKernel.m35
1 files changed, 34 insertions, 1 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[];