Why Innocent Shared Updates Stop Scaling: Cache Coherence on a Multi-Socket Server

How a one-line counter update turns into cross-core and cross-socket communication. Microbenchmarks on a dual-socket server separate local atomic cost, ownership handoffs, true sharing, and false sharing, and map each to a fix.

March 3, 2026 · 17 min · Sandeep Kumar

Understanding Linux perf: stat and record

What really happens in the kernel when you run perf stat or perf record.

December 4, 2025 · 8 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

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