IMPORTANT: To view this page as Markdown, append `.md` to the URL (e.g. /get-started.md). For the complete documentation index, see llms.txt.
Skip to main content
For the complete documentation index, see llms.txt. Markdown versions of all pages are available by appending .md to any URL (e.g. /get-started.md).

Mojo function

reduce

def reduce[val_type: DType, simd_width: SIMDLength, //, shuffle: def[dtype: DType, simd_width: SIMDLength](val: SIMD[dtype, simd_width], offset: UInt32) thin -> SIMD[dtype, simd_width], func: def[dtype: DType, width: SIMDLength](SIMD[dtype, width], SIMD[dtype, width]) capturing thin -> SIMD[dtype, width]](val: SIMD[val_type, simd_width]) -> SIMD[val_type, simd_width]

Performs a generic warp-wide reduction operation using shuffle operations.

This is a convenience wrapper around lane_group_reduce that operates on the entire warp. It allows customizing both the shuffle operation and reduction function.

Example:

    from max.gpu.primitives.warp import reduce, shuffle_down

    # Compute warp-wide sum using shuffle down
    @__parameter
    def add[dtype: DType, width: SIMDLength](x: SIMD[dtype, width], y: SIMD[dtype, width]) capturing -> SIMD[dtype, width]:
        return x + y

    val = SIMD[.float32, 4](2.0, 4.0, 6.0, 8.0)
    result = reduce[shuffle_down, add](val)

Parameters:

  • val_type (DType): The data type of the SIMD elements (e.g. float32, int32).
  • simd_width (SIMDLength): The number of elements in the SIMD vector.
  • shuffle (def[dtype: DType, simd_width: SIMDLength](val: SIMD[dtype, simd_width], offset: UInt32) thin -> SIMD[dtype, simd_width]): A function that performs the warp shuffle operation. Takes a SIMD value and offset and returns the shuffled result.
  • func (def[dtype: DType, width: SIMDLength](SIMD[dtype, width], SIMD[dtype, width]) capturing thin -> SIMD[dtype, width]): A binary function that combines two SIMD values during reduction. This defines the reduction operation (e.g. add, max, min).

Args:

Returns:

SIMD[val_type, simd_width]: A SIMD value containing the reduction result broadcast to all lanes in the warp.

Was this page helpful?