Reference Guide
2.5.0
|
Public Member Functions | |
def | __str__ (self) |
def | validate (self, node, options=None) |
def | apply (self, loop, options=None) |
Public Member Functions inherited from psyclone.psyir.transformations.loop_trans.LoopTrans | |
def | name (self) |
Additional Inherited Members | |
Static Public Attributes inherited from psyclone.psyir.transformations.loop_trans.LoopTrans | |
tuple | excluded_node_types = () |
This transformation allows the user to modify a loop's bounds so that redundant computation will be performed. Redundant computation can result in halo exchanges being modified, new halo exchanges being added or existing halo exchanges being removed. * This transformation should be performed before any parallelisation transformations (e.g. for OpenMP) to the loop in question and will raise an exception if this is not the case. * This transformation can not be applied to a loop containing a reduction and will again raise an exception if this is the case. * This transformation can only be used to add redundant computation to a loop, not to remove it. * This transformation allows a loop that is already performing redundant computation to be modified, but only if the depth is increased.
Definition at line 1768 of file transformations.py.
def psyclone.transformations.Dynamo0p3RedundantComputationTrans.apply | ( | self, | |
loop, | |||
options = None |
|||
) |
Apply the redundant computation transformation to the loop :py:obj:`loop`. This transformation can be applied to loops iterating over 'cells or 'dofs'. if :py:obj:`depth` is set to a value then the value will be the depth of the field's halo over which redundant computation will be performed. If :py:obj:`depth` is not set to a value then redundant computation will be performed to the full depth of the field's halo. :param loop: the loop that we are transforming. :type loop: :py:class:`psyclone.psyGen.LFRicLoop` :param options: a dictionary with options for transformations. :type options: Optional[Dict[str, Any]] :param int options["depth"]: the depth of the stencil. Defaults \ to None.
Reimplemented from psyclone.psyGen.Transformation.
Definition at line 1951 of file transformations.py.
References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.validate(), psyclone.transformations.MoveTrans.validate(), psyclone.transformations.Dynamo0p3AsyncHaloExchangeTrans.validate(), psyclone.domain.common.transformations.alg_invoke_2_psy_call_trans.AlgInvoke2PSyCallTrans.validate(), psyclone.domain.common.transformations.alg_trans.AlgTrans.validate(), psyclone.domain.common.transformations.kernel_module_inline_trans.KernelModuleInlineTrans.validate(), psyclone.domain.common.transformations.raise_psyir_2_alg_trans.RaisePSyIR2AlgTrans.validate(), psyclone.domain.gocean.transformations.gocean_const_loop_bounds_trans.GOConstLoopBoundsTrans.validate(), psyclone.domain.gocean.transformations.gocean_move_iteration_boundaries_inside_kernel_trans.GOMoveIterationBoundariesInsideKernelTrans.validate(), psyclone.domain.gocean.transformations.gocean_opencl_trans.GOOpenCLTrans.validate(), psyclone.domain.gocean.transformations.raise_psyir_2_gocean_kern_trans.RaisePSyIR2GOceanKernTrans.validate(), psyclone.domain.lfric.transformations.lfric_alg_invoke_2_psy_call_trans.LFRicAlgInvoke2PSyCallTrans.validate(), psyclone.domain.lfric.transformations.raise_psyir_2_lfric_kern_trans.RaisePSyIR2LFRicKernTrans.validate(), psyclone.domain.nemo.transformations.create_nemo_invoke_schedule_trans.CreateNemoInvokeScheduleTrans.validate(), psyclone.domain.nemo.transformations.create_nemo_psy_trans.CreateNemoPSyTrans.validate(), psyclone.domain.nemo.transformations.nemo_allarrayrange2loop_trans.NemoAllArrayRange2LoopTrans.validate(), psyclone.domain.nemo.transformations.nemo_arrayrange2loop_trans.NemoArrayRange2LoopTrans.validate(), psyclone.domain.nemo.transformations.nemo_outerarrayrange2loop_trans.NemoOuterArrayRange2LoopTrans.validate(), psyclone.psyad.transformations.assignment_trans.AssignmentTrans.validate(), psyclone.psyGen.Transformation.validate(), psyclone.psyir.transformations.acc_update_trans.ACCUpdateTrans.validate(), psyclone.psyir.transformations.allarrayaccess2loop_trans.AllArrayAccess2LoopTrans.validate(), psyclone.psyir.transformations.arrayaccess2loop_trans.ArrayAccess2LoopTrans.validate(), psyclone.psyir.transformations.arrayrange2loop_trans.ArrayRange2LoopTrans.validate(), psyclone.psyir.transformations.chunk_loop_trans.ChunkLoopTrans.validate(), psyclone.psyir.transformations.fold_conditional_return_expressions_trans.FoldConditionalReturnExpressionsTrans.validate(), psyclone.psyir.transformations.hoist_local_arrays_trans.HoistLocalArraysTrans.validate(), psyclone.psyir.transformations.hoist_loop_bound_expr_trans.HoistLoopBoundExprTrans.validate(), psyclone.psyir.transformations.hoist_trans.HoistTrans.validate(), psyclone.psyir.transformations.inline_trans.InlineTrans.validate(), psyclone.psyir.transformations.intrinsics.array_reduction_base_trans.ArrayReductionBaseTrans.validate(), psyclone.psyir.transformations.intrinsics.dotproduct2code_trans.DotProduct2CodeTrans.validate(), psyclone.psyir.transformations.intrinsics.intrinsic2code_trans.Intrinsic2CodeTrans.validate(), psyclone.psyir.transformations.intrinsics.matmul2code_trans.Matmul2CodeTrans.validate(), psyclone.psyir.transformations.loop_swap_trans.LoopSwapTrans.validate(), psyclone.psyir.transformations.loop_tiling_2d_trans.LoopTiling2DTrans.validate(), psyclone.psyir.transformations.loop_trans.LoopTrans.validate(), psyclone.psyir.transformations.omp_task_trans.OMPTaskTrans.validate(), psyclone.psyir.transformations.omp_taskwait_trans.OMPTaskwaitTrans.validate(), psyclone.psyir.transformations.parallel_loop_trans.ParallelLoopTrans.validate(), psyclone.psyir.transformations.reference2arrayrange_trans.Reference2ArrayRangeTrans.validate(), psyclone.psyir.transformations.replace_induction_variables_trans.ReplaceInductionVariablesTrans.validate(), psyclone.transformations.OMPDeclareTargetTrans.validate(), psyclone.transformations.DynamoOMPParallelLoopTrans.validate(), psyclone.transformations.Dynamo0p3OMPLoopTrans.validate(), psyclone.transformations.GOceanOMPLoopTrans.validate(), psyclone.transformations.Dynamo0p3RedundantComputationTrans.validate(), psyclone.transformations.Dynamo0p3KernelConstTrans.validate(), psyclone.transformations.ACCRoutineTrans.validate(), psyclone.transformations.KernelImportsToArguments.validate(), psyclone.domain.gocean.transformations.gocean_loop_fuse_trans.GOceanLoopFuseTrans.validate(), psyclone.domain.lfric.transformations.lfric_loop_fuse_trans.LFRicLoopFuseTrans.validate(), psyclone.psyir.transformations.loop_fuse_trans.LoopFuseTrans.validate(), psyclone.domain.gocean.transformations.gocean_extract_trans.GOceanExtractTrans.validate(), psyclone.domain.lfric.transformations.lfric_extract_trans.LFRicExtractTrans.validate(), psyclone.psyir.transformations.extract_trans.ExtractTrans.validate(), psyclone.psyir.transformations.nan_test_trans.NanTestTrans.validate(), psyclone.psyir.transformations.read_only_verify_trans.ReadOnlyVerifyTrans.validate(), psyclone.transformations.ParallelRegionTrans.validate(), psyclone.transformations.OMPParallelTrans.validate(), psyclone.transformations.ACCParallelTrans.validate(), psyclone.transformations.ACCKernelsTrans.validate(), psyclone.transformations.ACCDataTrans.validate(), psyclone.psyir.transformations.psy_data_trans.PSyDataTrans.validate(), psyclone.psyir.transformations.region_trans.RegionTrans.validate(), and psyclone.transformations.ACCEnterDataTrans.validate().
def psyclone.transformations.Dynamo0p3RedundantComputationTrans.validate | ( | self, | |
node, | |||
options = None |
|||
) |
Perform various checks to ensure that it is valid to apply the RedundantComputation transformation to the supplied node :param node: the supplied node on which we are performing\ validity checks :type node: :py:class:`psyclone.psyir.nodes.Node` :param options: a dictionary with options for transformations. :type options: Optional[Dict[str, Any]] :param int options["depth"]: the depth of the stencil if the value \ is provided and None if not. :raises TransformationError: if the parent of the loop is a\ :py:class:`psyclone.psyir.nodes.Directive`. :raises TransformationError: if the parent of the loop is not a\ :py:class:`psyclone.psyir.nodes.Loop` or a\ :py:class:`psyclone.psyGen.LFRicInvokeSchedule`. :raises TransformationError: if the parent of the loop is a\ :py:class:`psyclone.psyir.nodes.Loop` but the original loop does\ not iterate over 'colour'. :raises TransformationError: if the parent of the loop is a\ :py:class:`psyclone.psyir.nodes.Loop` but the parent does not iterate over 'colours'. :raises TransformationError: if the parent of the loop is a\ :py:class:`psyclone.psyir.nodes.Loop` but the parent's parent is\ not a :py:class:`psyclone.psyGen.LFRicInvokeSchedule`. :raises TransformationError: if this transformation is applied\ when distributed memory is not switched on. :raises TransformationError: if the loop does not iterate over\ cells, dofs or colour. :raises TransformationError: if the transformation is setting the\ loop to the maximum halo depth but the loop already computes\ to the maximum halo depth. :raises TransformationError: if the transformation is setting the\ loop to the maximum halo depth but the loop contains a stencil\ access (as this would result in the field being accessed\ beyond the halo depth). :raises TransformationError: if the supplied depth value is not an\ integer. :raises TransformationError: if the supplied depth value is less\ than 1. :raises TransformationError: if the supplied depth value is not\ greater than 1 when a continuous loop is modified as this is\ the minimum valid value. :raises TransformationError: if the supplied depth value is not\ greater than the existing depth value, as we should not need\ to undo existing transformations. :raises TransformationError: if a depth value has been supplied\ but the loop has already been set to the maximum halo depth.
Reimplemented from psyclone.psyir.transformations.loop_trans.LoopTrans.
Definition at line 1792 of file transformations.py.