diff options
Diffstat (limited to 'Tools/CodeGen')
-rw-r--r-- | Tools/CodeGen/CaKernel.m | 35 | ||||
-rw-r--r-- | Tools/CodeGen/KrancThorn.m | 20 |
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 *) |