All projects
2024 · Performance / Systems Engineer
Fluid Solver Optimization (CPU, OpenMP, CUDA)
Reduced runtime () on CPU; best OpenMP at threads; CUDA kernels reached .
Results
- CPU () via loop reordering + cache tiling + compiler/ILP optimizations.
- OpenMPpeak performance around threads (, ); analyzed plateau from contention/sync effects.
- CUDA
lin_solvekernel dominated (); achieved and minimized transfer overhead with persistent device allocations.
Overview
Optimized a 3D Stable Fluids solver: (1) CPU locality + ILP (loop reordering, tiling, division to mult), (2) shared-memory parallelism with OpenMP (collapse, reductions, static scheduling; Red/Black Gauss-Seidel), (3) GPU acceleration with CUDA (persistent device memory, kernelized solver steps, Nsight-guided tuning).
Profiled bottlenecks and scalability with perf/gprof and Nsight.
My work
- Identified hotspots with
gprof/perf(lin_solveas primary target) and set up repeatable benchmarks across grid sizes. - Implemented CPU-side locality/ILP improvements (loop order, tiling, hoisted reciprocals) and validated speedups.
- Parallelized solver loops with OpenMP (
parallel for+collapse; reductions for convergence metrics) and evaluated strong scaling. - Implemented CUDA kernels for solver steps (including Red/Black Gauss-Seidel updates) and tuned block geometry for coalescing (e.g., ).
- Used Nsight Systems/Compute to attribute time, verify memory behavior, and document trade-offs (kernel launch + sync constraints).
Technologies
- C/C++
- OpenMP
- CUDA
- Linux
- perf
- gprof
- Nsight Systems
- Nsight Compute