Table of Contents

Class AttentionOp

Namespace
AiDotNet.JitCompiler.IR.Operations
Assembly
AiDotNet.dll

Represents a simplified attention operation for GPU code generation.

public class AttentionOp : IROp
Inheritance
AttentionOp
Inherited Members

Remarks

This is a simplified version of attention used for GPU kernel generation. Computes Attention(Q, K, V) = softmax(QK^T * scale) * V

Properties

HeadDim

Head dimension (d_k).

public int HeadDim { get; set; }

Property Value

int

IsCausal

Whether to apply causal (autoregressive) masking.

public bool IsCausal { get; set; }

Property Value

bool

NumHeads

Number of attention heads.

public int NumHeads { get; set; }

Property Value

int

Scale

Scaling factor for the attention scores. Typically 1/sqrt(head_dim).

public double Scale { get; set; }

Property Value

double

SeqLength

Sequence length.

public int SeqLength { get; set; }

Property Value

int

Methods

ToString()

Gets a string representation of this operation for debugging.

public override string ToString()

Returns

string

A string describing this operation.

Remarks

The string format is: "tOutput = OpType(tInput1, tInput2, ...) : Type [Shape]"

For Beginners: This creates a readable description of the operation.

Example outputs:

  • "t2 = Add(t0, t1) : Float32 [3, 4]"
  • "t5 = MatMul(t3, t4) : Float32 [128, 256]"
  • "t8 = ReLU(t7) : Float32 [32, 128]"

This is super helpful for debugging - you can see exactly what each operation does and what shape tensors flow through the graph.

Validate()

Validates that this operation is correctly formed.

public override bool Validate()

Returns

bool

True if valid, false otherwise.

Remarks

Basic validation checks that the operation has required information. Derived classes can override to add operation-specific validation.

For Beginners: This checks that the operation makes sense.

Basic checks:

  • Output ID is valid (non-negative)
  • Has the right number of inputs
  • Shapes are compatible

Specific operations add their own checks:

  • MatMul: inner dimensions must match
  • Conv2D: kernel size must be valid
  • Reshape: total elements must be preserved

If validation fails, the operation can't be compiled.