Tiling and Collective Operations

The two data-movement primitives behind training performance: tiling inside a device, collectives between devices.

August 12, 2026 · 17 min · Sandeep Kumar

Reading torch.profiler Correctly: Schedules, Labels, and CPU vs GPU Time

torch.profiler integrates PyTorch operator attribution, optional source stacks, and CUDA activity in one trace. Its numbers mean what you think only if you control the capture window, the labels and the host syncs.

October 9, 2026 · 63 min · Sandeep Kumar

GPU Profiling with Nsight Systems

Nsight Systems puts host ranges, CUDA API calls, GPU kernels and memory operations on one timeline. It helps locate gaps in recorded GPU activity and inspect the host-side work around them.

October 9, 2026 · 15 min · Sandeep Kumar

FlashAttention in Practice: Four Schedules and One Branch

How successive FlashAttention implementations respond to the bottleneck exposed by each new GPU generation, and what decoding needs instead.

August 7, 2026 · 10 min · Sandeep Kumar

FlashInfer: A Customizable Attention Engine for LLM Serving

FlashInfer treats LLM attention as a serving systems problem spanning data layout, kernel generation, and runtime scheduling.

August 7, 2026 · 19 min · Sandeep Kumar

Introduction to GPU Profiling

Follow a batch from the CPU to the GPU, distinguish host ranges from device activity, and use an existing trace to choose the next profiling question. A starting point for the PyTorch Profiler tutorial, Nsight Systems tutorial, and their comparison.

February 10, 2026 · 8 min · Sandeep Kumar

PyTorch Profiler vs Nsight Systems

Use existing ResNet-50 traces to learn what torch.profiler and Nsight Systems explain, what NVTX bridges, and why neither a busy timeline nor an operator percentage proves a bottleneck.

October 10, 2026 · 7 min · Sandeep Kumar