Implementation notes Parallel rendering & profiling
Built a Mandelbrot renderer in C++ and CUDA that maps pixels independently across the GPU, enabling smooth real-time zooming and deeper fractal renders without the frame stalls of the original CPU path.
Instrumented the render loop with NVIDIA Nsight Systems
and NVTX markers to trace both CPU and GPU execution.
Profiling exposed a state-management bug where
ComplexPlane::updateRender() kept rerunning
because the app failed to transition from
CALCULATING to DISPLAYING,
causing unnecessary recomputation every frame.
After fixing the render-state transition and validating the CUDA path, full-frame time dropped from about 374 ms on CPU to about 1.0 ms on GPU, with the Mandelbrot kernel taking about 0.87 ms and the remaining ~0.13 ms spent in CPU-side post-processing and vertex/color updates. The project emphasizes parallel work distribution, profiling-led debugging, and measurable throughput gains backed by traces.
- Distributed per-pixel escape-time computation across the GPU for parallel fractal generation
- Used Nsight Systems and NVTX to isolate redundant recomputation in the render loop
- Quantified remaining CPU-side post-processing after the kernel to guide next optimizations