loki.transformations.single_column.devector

Classes

RemoveLoopTransformer(dimension, *args, **kwargs)

A Transformer that removes all loops over the specified dimension.

SCCDevectorTransformation(horizontal[, ...])

A set of utilities that can be used to strip vector loops from a Subroutine and determine the regions of the IR to be placed within thread-parallel loop directives.

class RemoveLoopTransformer(dimension, *args, **kwargs)

Bases: Transformer

A Transformer that removes all loops over the specified dimension.

Parameters:

horizontal (Dimension) – The dimension specifying the horizontal vector dimension

visit_Loop(loop, **kwargs)
class SCCDevectorTransformation(horizontal, trim_vector_sections=False)

Bases: Transformation

A set of utilities that can be used to strip vector loops from a Subroutine and determine the regions of the IR to be placed within thread-parallel loop directives.

Parameters:
  • horizontal (Dimension) – Dimension object describing the variable conventions used in code to define the horizontal data dimension and iteration space.

  • trim_vector_sections (bool) – Flag to trigger trimming of extracted vector sections to remove nodes that are not assignments involving vector parallel arrays.

classmethod extract_vector_sections(section, horizontal)

Extract a contiguous sections of nodes that contains vector-level computations and are not interrupted by recursive subroutine calls or nested control-flow structures.

Parameters:
  • section (tuple of Node) – A section of nodes from which to extract vector-level sub-sections

  • horizontal (Dimension) – The dimension specifying the horizontal vector dimension

classmethod get_trimmed_sections(routine, horizontal, sections)

Trim extracted vector sections to remove nodes that are not assignments involving vector parallel arrays.

transform_subroutine(routine, **kwargs)

Apply SCCDevector utilities to a Subroutine.

Parameters:
  • routine (Subroutine) – Subroutine to apply this transformation to.

  • role (string) – Role of the subroutine in the call tree; should be "kernel"

process_kernel(routine)

Applies the SCCDevector utilities to a “kernel”. This consists simply of stripping vector loops and determing which sections of the IR can be placed within thread-parallel loops.

Parameters:

routine (Subroutine) – Subroutine to apply this transformation to.

process_driver(routine, targets=())

Applies the SCCDevector utilities to a “driver”. This consists simply of stripping vector loops and determining which sections of the IR can be placed within thread-parallel loops.

Parameters:
  • routine (Subroutine) – Subroutine to apply this transformation to.

  • targets (list or string) – List of subroutines that are to be considered as part of the transformation call tree.