diff options
author | Ian Hinder <ian.hinder@aei.mpg.de> | 2012-04-23 21:49:42 +0200 |
---|---|---|
committer | Ian Hinder <ian.hinder@aei.mpg.de> | 2012-04-23 21:49:42 +0200 |
commit | 86bafb7588ec88ab829c9daf2850fceee138b23c (patch) | |
tree | 91d6f727bdf4912bfe3765779114d4e73978025f /Tools/CodeGen/CaKernel.m | |
parent | 68d93477c5dd0fb61b127e1c758630daf9c5227a (diff) |
CaKernel.m: Wrap host/device routines in a schedule group
Diffstat (limited to 'Tools/CodeGen/CaKernel.m')
-rw-r--r-- | Tools/CodeGen/CaKernel.m | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/Tools/CodeGen/CaKernel.m b/Tools/CodeGen/CaKernel.m index 870989e..ba5bca2 100644 --- a/Tools/CodeGen/CaKernel.m +++ b/Tools/CodeGen/CaKernel.m @@ -202,16 +202,37 @@ DefFn[ If[lookup[calc,ExecuteOn,Automatic] === Host, {calc}, - {mapReplaceAdd[ + + Module[ + {deviceCalc, hostCalc, newCalcs}, + + deviceCalc = + mapReplaceAdd[ + mapReplaceAdd[ + mapReplace[ + calc, + Name,"DEVICE_"<>lookup[calc,Name]], + UseCaKernel, True], + ExecuteOn, Device]; + + hostCalc = mapReplaceAdd[ - AddConditionSuffix[calc, "Accelerator::device_process"], - UseCaKernel, True], - ExecuteOn, Device], - mapReplaceAdd[ - mapReplaceAdd[ - AddConditionSuffix[mapReplace[calc,Name,"HOST__"<>lookup[calc,Name]], "Accelerator::host_process"], - UseCaKernel,False], - ExecuteOn, Host]}]]; + mapReplaceAdd[ + mapReplace[ + calc, + Name,"HOST_"<>lookup[calc,Name]], + UseCaKernel,False], + ExecuteOn, Host]; + + newCalcs = Map[InNewScheduleGroup[lookup[calc,Name],#] &, {hostCalc, deviceCalc}]; + + (* Apply the conditional to the routines, not to the group *) + newCalcs = MapThread[AddConditionSuffix, + {newCalcs, + {"Accelerator::host_process", + "Accelerator::device_process"}}]; + + newCalcs]]]; DefFn[ WithHostCalculations[calcs_List] := |