Files
project_6_89d52222/enginex/ops/activations.py

40 lines
1.1 KiB
Python
Raw Normal View History

"""
EngineX activation operators.
These map to CCCL's dispatch_transform pattern — element-wise kernels
that fuse activation + multiply in a single pass.
ixformer provides these natively (confirmed working in hardware probe).
PyTorch fallbacks here for completeness.
CCCL tuning: tuning_transform.cuh bytes_in_flight = 64KB on BI-V100
(56 GB/s per-SM × 1100ns latency, 16 SMs)
"""
import torch
import torch.nn.functional as F
def silu_and_mul_pytorch(x: torch.Tensor, out: torch.Tensor) -> None:
"""Fused SiLU(x[..., :d]) * x[..., d:]"""
d = x.shape[-1] // 2
gate = x[..., :d]
up = x[..., d:]
out.copy_(F.silu(gate) * up)
def gelu_and_mul_pytorch(x: torch.Tensor, out: torch.Tensor) -> None:
"""Fused GELU(x[..., :d]) * x[..., d:]"""
d = x.shape[-1] // 2
gate = x[..., :d]
up = x[..., d:]
out.copy_(F.gelu(gate) * up)
def gelu_tanh_and_mul_pytorch(x: torch.Tensor, out: torch.Tensor) -> None:
"""Fused GELU_tanh(x[..., :d]) * x[..., d:]"""
d = x.shape[-1] // 2
gate = x[..., :d]
up = x[..., d:]
out.copy_(F.gelu(gate, approximate='tanh') * up)