LogoCookLLM Docs
LogoCookLLM Docs
HomeCookLLM

Principles

Tokenization
Tokenization BasicsBPE AlgorithmGPT TokenizersBPE Training Engineering
Model Architecture
Transformer LM
From token ids to logitsEmbedding and LM Head
Attention Mechanisms
From Self-Attention to GQAAttention Sink
Position Encoding
Position Encoding BasicsRoPE Math DerivationRoPE ImplementationLength Extrapolation
GPU Programming Basics
GPU Architecture BasicsTensor LayoutTriton Basics: Vector Add
FlashAttention
Flash Attention PrinciplesFrom Naive Implementation to Auto-TuningBlock Pointers and Multi-Dim SupportCausal Masking OptimizationGrouped Query AttentionBackward Pass Implementation
Distributed Training
Data ParallelismZeRO OptimizerFully Sharded Data ParallelTensor ParallelismPipeline ParallelismMulti-Dimensional Hybrid Parallelism

Hands-on Training

Overview
Pretraining
Pretraining DataTokenizer TrainingModel ArchitectureData PipelineTraining LoopMonitoring and Validation
X (Twitter)
SystemsGPU Programming Basics

Triton Basics: Vector Add

Premium

Learn Triton’s programming model through a simple vector add example.

Get code access

Triton is a language for writing GPU kernels in Python syntax. Compared to CUDA, Triton handles many low-level details (shared memory, synchronization), letting you focus on the algorithm.

This chapter uses the simplest example—vector addition—to learn Triton’s core model.

SPMD Programming Model

Before writing code, understand Triton’s core idea: SPMD (Single Program, Multiple Data).

In short: the same kernel code runs in many “programs” in parallel, each handling a different chunk of data.

Suppose we add two vectors of length 256 with BLOCK_SIZE = 64. Triton launches 4 programs:

Input vector (N=256, BLOCK_SIZE=64):

┌────────────┬────────────┬────────────┬────────────┐
│  0 ... 63  │ 64 ... 127 │ 128 .. 191 │ 192 .. 255 │
├────────────┼────────────┼────────────┼────────────┤
│ Program 0  │ Program 1  │ Program 2  │ Program 3  │
└────────────┴────────────┴────────────┴────────────┘

Each program handles its own block. How does a program know which block it owns? Use tl.program_id().

Log in to continue reading

This is premium content. Please log in to access the full article.

Tensor Layout

Understand physical memory layout, strides, view vs reshape, and gradient tracking.

Flash Attention

Deeply understand Flash Attention principles and Triton implementation

Table of Contents

SPMD Programming Model
Build the Kernel Step by Step
Step 1: Identify Yourself
Step 2: Compute Offsets
Step 3: Handle Boundaries
Step 4: Load, Compute, Store
Full Kernel Code
Launching the Kernel
Verify Correctness
Summary