helion.language.static_range
- helion.language.static_range(begin_or_end, end_or_none=None, /, step=1)[source]
Create a range that gets unrolled at compile time by iterating over constant integer values.
This function is similar to Python’s built-in range(), but it generates a sequence of integer constants that triggers loop unrolling behavior in Helion kernels. The loop is completely unrolled at compile time, with each iteration becoming separate instructions in the generated code.
- Parameters:
- Returns:
Iterator over constant integer values
- Return type:
Iterator[int]
Examples
Simple unrolled loop:
@helion.kernel def unrolled_example(x: torch.Tensor) -> torch.Tensor: result = torch.zeros_like(x) for tile in hl.tile(x.size(0)): acc = torch.zeros([tile], dtype=x.dtype, device=x.device) # This loop gets completely unrolled for i in hl.static_range(3): acc += x[tile] * i result[tile] = acc return result
Range with start and step:
@helion.kernel def kernel_stepped_unroll(x: torch.Tensor) -> torch.Tensor: result = torch.zeros_like(x) for tile in hl.tile(x.size(0)): acc = torch.zeros([tile], dtype=x.dtype, device=x.device) # Unroll loop from 2 to 8 with step 2: [2, 4, 6] for i in hl.static_range(2, 8, 2): acc += x[tile] * i result[tile] = acc return result
Note
Only constant integer values are supported
The range must be small enough to avoid compilation timeouts
Each iteration becomes separate instructions in the generated Triton code
Use for small, fixed iteration counts where unrolling is beneficial