mirror of
https://github.com/tile-ai/tilelang.git
synced 2026-10-22 06:50:25 +08:00
* [Carver][Bugfix] Correct score function for warp tile selection in tensorcore policy * [Typo] Correct architecture selection for CUDA and CDNA
TVM IR Performance Analyzer
A performance analysis toolkit for TVM IR modules, Provides hardware-aware performance metrics including FLOPs, memory bandwidth utilization, and execution time estimation.
Features
- Operation Analysis: Supports arbitrary operations expressed in TVM IR (including GEMM and convolution)
- Memory Traffic Calculation: Tracks global memory transfers
- Architecture-aware Metrics: Pre-configured with NVIDIA GPU architectures (Ampere, Ada Lovelace)
- Performance Estimation: Predicts execution time using roofline model
- TVM Integration: Works with TVM IRModule and PrimFunc
Quick Start
GEMM Analysis Example
import tilelang.language as T
from tilelang.tools import Analyzer
from tilelang.carver.arch import CUDA
M = N = K = 1024
def kernel(block_M=128, block_N=128, block_K=32, num_stages=3, thread_num=128):
@T.prim_func
def main(A: T.Tensor((M, K), "float16"),
B: T.Tensor((N, K), "float16"),
C: T.Tensor((M, N), "float")):
# ... (kernel definition)
return main
cuda_device = CUDA("cuda")
result = Analyzer.analysis(kernel(), cuda_device)
print(result)
Convolution Analysis Example
import tilelang.language as T
from tilelang.tools import Analyzer
from tilelang.carver.arch import CUDA
def kernel(N=64, C=256, H=512, W=512, F=512, K=3, block_M=64, block_N=128):
@T.prim_func
def main(data: T.Tensor((N, H, W, C), "float16"),
kernel: T.Tensor((K, K, C, F), "float16"),
out: T.Tensor((N, (H-K+1), (W-K+1), F), "float")):
# ... (convolution kernel definition)
return main
cuda_device = CUDA("cuda")
result = Analyzer.analysis(kernel(), cuda_device)
print(result)
API Documentation
AnalysisResult Class
@dataclass(frozen=True)
class AnalysisResult:
total_flops: int # Total floating-point operations
total_global_bytes: int # Global memory traffic in bytes
estimated_time: float # Predicted execution time (seconds)
tflops: float # Achieved TFLOPS
bandwidth_GBps: float # Memory bandwidth utilization
Analyzer Class Methods
analysis(fn, device)
- Parameters:
- fn: TVM IRModule or PrimFunc
- device: Device configuration object
- Returns: AnalysisResult
Supported Architectures
# Extendable to custom hardware via: "compute_capability": (cores_per_SM, clock_GHz, flops_per_cycle, max_SM_count)
ARCH_CONFIGS = {
"80": (128, 1.41, 2, 108), # A100
"86": (128, 1.70, 2, 84), # RTX 3080
"89": (128, 2.52, 2, 128) # RTX 4090
}
Implementation Details
Performance Model
Uses roofline model with two constraints:
- Compute Bound:
Time = Total FLOPs / (SM Count × Cores/SM × Clock × FLOPs/Cycle) - Memory Bound:
Time = Memory Bytes / (Bandwidth × Utilization)
IR Analysis Pass
- Traversal: Walks through TVM IR using
ir_transform - Operation Detection:
- Counts FLOPs for all compute operations
- Calculates memory traffic for all memory operations
- Loop Handling:
- Tracks nested loops for operation scaling
- Accounts for block/grid dimensions
Key Metrics Calculation
| Metric | Formula |
|---|---|
| FLOPs per GEMM | 2 × M × N × K |
| Memory Traffic per Copy | elements × dtype_size × loop_product |
| Achieved TFLOPS | total_flops / estimated_time / 1e12 |
| Memory Bandwidth | total_global_bytes / estimated_time |
Limitations
- Requires memory operations to be properly annotated in the IR
- Assumes perfect memory coalescing and no bank conflicts
Supported Operations
Any operation expressed in TVM IR