docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
sdfg::data_flow Namespace Reference

Classes

class  AccessNode
 Node representing access to a data container in the dataflow graph. More...
class  ConstantNode
 Node representing a constant literal value in the dataflow graph. More...
class  CodeNode
 Base class for computational nodes with inputs and outputs. More...
class  DataFlowGraph
class  DataFlowNode
 Abstract base class for all dataflow graph nodes. More...
struct  SubgroupAccess
 The operand elements one subgroup touches in a single access: for every lane, the operand coordinates it reads, in register order. More...
class  LibraryNode
 Base class for all library nodes in the dataflow graph. More...
class  AtomicScalarOpImpl
 A concrete lowering ("implementation") of an AtomicScalarOpNode. More...
class  AtomicScalarOpNode
 Wrapper around typical atomic operations (add, sub, min, max, swap) on a single scalar value. More...
class  AtomicScalarOpCPUImpl
 CPU (OpenMP) atomic implementation. More...
class  AtomicScalarOpGPUImpl
 Shared base for the GPU implementations (CUDA and ROCm). More...
class  AtomicScalarOpCudaImpl
 CUDA atomic implementation. More...
class  AtomicScalarOpRocmImpl
 ROCm atomic implementation. More...
class  AtomicScalarOpNodeSerializer
class  AtomicScalarOpNodeDispatcher
class  AtomicScalarOpCPUNodeDispatcher
class  AtomicScalarOpGPUNodeDispatcher
class  BarrierLocalNode
class  BarrierLocalNodeSerializer
class  CallNode
class  CallNodeSerializer
class  CallNodeDispatcher
class  InvokeNode
class  InvokeNodeSerializer
class  InvokeNodeDispatcher
class  ConstSource
class  InMemoryConstSource
 Constant data stored inline in SDFG. More...
class  RawFileConstSource
 Constant data stored in external files, using arg_capture_io code to read (raw data, no meta data inside the files themselves, meta data stored here). More...
class  LoadConstNode
class  LoadConstNodeSerializer
class  LoadConstNodeDispatcher
class  MetadataNode
class  MetadataNodeSerializer
class  MetadataDispatcher
class  Memlet
 Edge in the dataflow graph representing data movement. More...
struct  PtrMetaDeleter
class  MemoryAccessPattern
class  ConvexAccessPattern
class  NoAccessPattern
class  TensorLayoutPattern
 A structured access described by a full affine tensor layout (shape, strides and offset in elements). More...
class  PointerAccessMeta
class  PointerReadOnly
 The pointer is only used for reading. More...
class  PointerFullWriteOnly
 The pointer is used solely to write, no reading and over all of the data. More...
class  PointerGenericAccess
 It is unknown what is done with this pointer or it is a mix of reads and writes. More...
class  PointerInvalidate
 Meaning the underlying memory will be deallocated and use of the pointer after this is no longer valid. More...
class  PointerAccessMetaSerializer
class  Tasklet
 Simple computational operation in the dataflow graph. More...

Typedefs

typedef StringEnum LibraryNodeCode
typedef StringEnum ImplementationType
 Implementation type identifier for library nodes.
typedef symbolic::MultiExpression Subset
 Type alias for a subset specification (array of symbolic expressions).
typedef PtrMetaDeleter< PointerAccessMeta > PtrAccessDeleter
typedef PtrMetaDeleter< MemoryAccessPattern > AccessPatternsDeleter
typedef std::unique_ptr< PointerAccessMeta, PtrAccessDeleter > PointerAccessType
typedef std::unique_ptr< MemoryAccessPattern, AccessPatternsDeleter > MemoryAccessPatternType

Enumerations

enum class  EdgeRemoveOption { NotRemovable , Trivially , RequiresUpdate , RemoveNodeAfter }
enum class  AtomicOpType { Add , Subtract , Min , Max }
enum  MemletType { Computational , Reference , Dereference_Src , Dereference_Dst }
 Type of data movement represented by a memlet. More...
enum  TaskletCode {
  assign , fp_neg , fp_add , fp_sub ,
  fp_mul , fp_div , fp_rem , fp_fma ,
  fp_oeq , fp_one , fp_oge , fp_ogt ,
  fp_ole , fp_olt , fp_ord , fp_ueq ,
  fp_une , fp_ugt , fp_uge , fp_ult ,
  fp_ule , fp_uno , int_add , int_sub ,
  int_mul , int_sdiv , int_srem , int_udiv ,
  int_urem , int_and , int_or , int_xor ,
  int_shl , int_ashr , int_lshr , int_smin ,
  int_smax , int_scmp , int_umin , int_umax ,
  int_ucmp , int_eq , int_ne , int_sge ,
  int_sgt , int_sle , int_slt , int_uge ,
  int_ugt , int_ule , int_ult , int_abs
}
 Operation codes for tasklet computations. More...

Functions

constexpr const char * atomic_op_type_to_string (AtomicOpType type)
constexpr AtomicOpType atomic_op_type_from_string (std::string_view str)
LibraryNodeCode LibraryNodeType_Call ("Call")
LibraryNodeCode LibraryNodeType_Invoke ("Invoke")
LibraryNodeCode LibraryNodeType_LoadConst ("LoadConst")
LibraryNodeCode LibraryNodeType_Metadata ("Metadata")
constexpr size_t arity (TaskletCode c)
 Get the number of inputs for a tasklet operation.
constexpr bool is_unsigned (TaskletCode c)
 Check if a tasklet operation is unsigned.
constexpr bool is_integer (TaskletCode c)
 Check if a tasklet operation is an integer operation.
constexpr bool is_floating_point (TaskletCode c)
 Check if a tasklet operation is a floating-point operation.

Variables

ImplementationType ImplementationType_NONE {""}
 Default implementation type indicating no specific implementation.
LibraryNodeCode LibraryNodeType_AtomicScalarOp {"AtomicScalarOp"}
LibraryNodeCode LibraryNodeType_BarrierLocal {"barrier_local"}

Typedef Documentation

◆ AccessPatternsDeleter

◆ ImplementationType

Implementation type identifier for library nodes.

Determines how a library node should be implemented during code generation. Each library node can specify an implementation type that indicates:

  • Whether is only has a single dispatcher or expand the node into primitive operations (NONE)
  • Which library implementation to use (BLAS, CUBLAS, etc.)

◆ LibraryNodeCode

◆ MemoryAccessPatternType

◆ PointerAccessType

◆ PtrAccessDeleter

◆ Subset

Type alias for a subset specification (array of symbolic expressions).

Vector of symbolic expressions describing data access pattern.

A subset specifies which portion of a data container is accessed. Each dimension is represented by a symbolic expression. Examples:

  • Empty vector: Full scalar or container access
  • {i}: Single element at index i
  • {i, j}: 2D array element at [i][j]

Enumeration Type Documentation

◆ AtomicOpType

enum class sdfg::data_flow::AtomicOpType
strong
Enumerator
Add 
Subtract 
Min 
Max 

◆ EdgeRemoveOption

Enumerator
NotRemovable 

You must not remove this edge unless you can guarantee the entire node will be removed.

Trivially 

You may remove the edge without further action.

RequiresUpdate 

It can be removed, but the node requires a call to update itself to match the removed edge.

RemoveNodeAfter 

This is the only relevant edge of this node.

If it will be removed, the entire node must be removed as well, ignoring any potential side-effect flags of the node

◆ MemletType

Type of data movement represented by a memlet.

Enumerator
Computational 

Standard data transfer for computation.

Reference 

Creates a reference/pointer to data.

Dereference_Src 

Dereferences pointer at source.

Dereference_Dst 

Dereferences pointer at destination.

◆ TaskletCode

Operation codes for tasklet computations.

Defines all primitive operations that tasklets can perform, including arithmetic, logical, comparison, and type conversion operations.

Enumerator
assign 

Assignment/copy operation (can be cast if types differ).

fp_neg 

Floating-point negation.

fp_add 

Floating-point addition.

fp_sub 

Floating-point subtraction.

fp_mul 

Floating-point multiplication.

fp_div 

Floating-point division.

fp_rem 

Floating-point remainder (fmod semantics).

fp_fma 

Floating-point fused multiply-add.

fp_oeq 

Floating-point ordered equal.

fp_one 

Floating-point ordered not equal.

fp_oge 

Floating-point ordered greater or equal.

fp_ogt 

Floating-point ordered greater than.

fp_ole 

Floating-point ordered less or equal.

fp_olt 

Floating-point ordered less than.

fp_ord 

Floating-point ordered (neither operand is NaN).

fp_ueq 

Floating-point unordered equal.

fp_une 

Floating-point unordered not equal.

fp_ugt 

Floating-point unordered greater than.

fp_uge 

Floating-point unordered greater or equal.

fp_ult 

Floating-point unordered less than.

fp_ule 

Floating-point unordered less or equal.

fp_uno 

Floating-point unordered (at least one operand is NaN).

int_add 

Integer addition.

int_sub 

Integer subtraction.

int_mul 

Integer multiplication.

int_sdiv 

Signed integer division.

int_srem 

Signed integer remainder.

int_udiv 

Unsigned integer division.

int_urem 

Unsigned integer remainder.

int_and 

Bitwise AND.

int_or 

Bitwise OR.

int_xor 

Bitwise XOR.

int_shl 

Shift left.

int_ashr 

Arithmetic shift right (sign-extend).

int_lshr 

Logical shift right (zero-extend).

int_smin 

Signed minimum.

int_smax 

Signed maximum.

int_scmp 

Signed comparison (-1, 0, 1).

int_umin 

Unsigned minimum.

int_umax 

Unsigned maximum.

int_ucmp 

Unsigned comparison (-1, 0, 1).

int_eq 

Integer equal.

int_ne 

Integer not equal.

int_sge 

Signed greater or equal.

int_sgt 

Signed greater than.

int_sle 

Signed less or equal.

int_slt 

Signed less than.

int_uge 

Unsigned greater or equal.

int_ugt 

Unsigned greater than.

int_ule 

Unsigned less or equal.

int_ult 

Unsigned less than.

int_abs 

Integer absolute value.

Function Documentation

◆ arity()

size_t sdfg::data_flow::arity ( TaskletCode c)
constexpr

Get the number of inputs for a tasklet operation.

Parameters
cTaskletCode operation
Returns
Number of inputs required (arity)
Exceptions
InvalidSDFGExceptionif code is invalid

◆ atomic_op_type_from_string()

AtomicOpType sdfg::data_flow::atomic_op_type_from_string ( std::string_view str)
constexpr

◆ atomic_op_type_to_string()

const char * sdfg::data_flow::atomic_op_type_to_string ( AtomicOpType type)
constexpr

◆ is_floating_point()

bool sdfg::data_flow::is_floating_point ( TaskletCode c)
constexpr

Check if a tasklet operation is a floating-point operation.

Parameters
cTaskletCode operation
Returns
True if the operation works on floating-point types

◆ is_integer()

bool sdfg::data_flow::is_integer ( TaskletCode c)
constexpr

Check if a tasklet operation is an integer operation.

Parameters
cTaskletCode operation
Returns
True if the operation works on integer types

◆ is_unsigned()

bool sdfg::data_flow::is_unsigned ( TaskletCode c)
constexpr

Check if a tasklet operation is unsigned.

Parameters
cTaskletCode operation
Returns
True if the operation treats operands as unsigned

◆ LibraryNodeType_Call()

LibraryNodeCode sdfg::data_flow::LibraryNodeType_Call ( "Call" )
inline

◆ LibraryNodeType_Invoke()

LibraryNodeCode sdfg::data_flow::LibraryNodeType_Invoke ( "Invoke" )
inline

◆ LibraryNodeType_LoadConst()

LibraryNodeCode sdfg::data_flow::LibraryNodeType_LoadConst ( "LoadConst" )
inline

◆ LibraryNodeType_Metadata()

LibraryNodeCode sdfg::data_flow::LibraryNodeType_Metadata ( "Metadata" )
inline

Variable Documentation

◆ ImplementationType_NONE

ImplementationType sdfg::data_flow::ImplementationType_NONE {""}
inline

Default implementation type indicating no specific implementation.

When a library node has ImplementationType_NONE, it may be code-generated using a single dispatcher or is expanded into more primitive operations during the expansion pass.

◆ LibraryNodeType_AtomicScalarOp

LibraryNodeCode sdfg::data_flow::LibraryNodeType_AtomicScalarOp {"AtomicScalarOp"}
inline

◆ LibraryNodeType_BarrierLocal

LibraryNodeCode sdfg::data_flow::LibraryNodeType_BarrierLocal {"barrier_local"}
inline