Deep-Dive Showcase

C++ Systems Engineering

Writing C++ that actually runs on hardware you can hold in your hand. NVIDIA GPU acceleration, concurrent pipelines, and real profiling on constrained embedded systems.

5 to 12 FPS YOLOTensorRT + CUDANVIDIA NSight Profiled
Experience

Dronaid

Software Engineer | Manipal, India

Jul 2022 – Sep 2023

  • Computer Vision on Edge

    Rewrote the perception pipeline from Python to C++. YOLO went from 5 to 12 FPS once I added TensorRT, CUDA acceleration, and async execution. That jump felt really good to see.

  • Real-time Perception

    Built the camera capture, video streaming and sensor processing in C++ using OpenCV, V4L2 and ROS. Used smart pointers and RAII throughout so memory issues didn't creep in during long runs.

  • Embedded Systems

    Got the whole stack running on a Jetson Nano and Raspberry Pi, with camera, LiDAR and GPS feeding into ROS pipelines that ran unattended on Ubuntu. Lots of debugging on actual hardware.

  • Performance Engineering

    Used NSight Systems, the TensorRT profiler and Linux perf to find where time was actually going. Most of the wins came after pinning down specific GPU memory and I/O stalls.

  • C++ Systems Development

    Kept the codebase modular with CMake and separated capture, preprocessing and inference into independent components. OpenMP handled the concurrency so frame rates stayed stable over hours.

NVIDIA Stack

GPU Acceleration on Embedded Hardware

Running inference on a Jetson Nano teaches you to care about every millisecond and every byte of VRAM. Here is what I actually used from the NVIDIA toolchain to get the most out of that little board.

TensorRT Optimization

Converted the YOLO models to TensorRT engines using FP16, with layer fusion and INT8 calibration. Accuracy barely moved but latency dropped a lot, which was the whole point on embedded hardware.

TensorRTFP16INT8Layer Fusion

CUDA Acceleration

Moved image decoding, normalization and NMS into CUDA kernels so the pipeline stayed on the GPU without constantly bouncing data back to the CPU. That alone got rid of a lot of stall time.

CUDA KernelsGPU MemoryZero-copyNMS

NVIDIA NSight Profiling

NSight Systems and the TensorRT profiler showed me the actual kernel timelines, so I could see exactly where DRAM bandwidth was getting hit. Cross-checked everything with Linux perf on the CPU side.

NSightTRT ProfilerLinux perfBottlenecks

Async Pipeline Design

The biggest win was splitting capture, preprocessing and inference into separate concurrent threads connected by producer-consumer queues. That way the GPU is never sitting idle waiting on the camera, and the camera is never blocked waiting on inference. Smart pointers handle the frame buffers and RAII cleans everything up properly, even when things crash mid-run.

V4L2 Capture
Dedicated thread, zero-copy DMA buffers
CUDA Preprocess
GPU decode, normalize, resize on-device
TRT Inference
Async CUDA streams, back-to-back batches
Lab Projects

C++ Parallel Programming

Coursework that covered the full range of parallel computing: shared-memory C++ concurrency, distributed HPC with MPI, and GPU kernel tuning. A lot of what I learned here directly applied to the Dronaid work.

Concurrent C++ Programs

Wrote multi-threaded programs from scratch using mutexes, condition variables and atomics. Spent a lot of time debugging deadlocks before I got the patterns right. Lock-free queues and thread pools were the main focus.

std::threadmutexatomicscondition_variableRAII

OpenMP & MPI

Parallelized shared-memory programs with OpenMP and wrote distributed programs with MPI. Plotting speedup vs. thread count and watching where Amdahl's Law kicks in is genuinely interesting.

OpenMPMPISIMDWork SharingCollectives

CUDA Kernel Optimization

Learned to look at memory coalescing, shared memory tiling, occupancy and warp divergence to understand why a kernel is slow. The same thinking I later used when debugging TensorRT inference at Dronaid.

CUDAShared MemoryOccupancyCoalescingWarp
Smeet posing with VLA poster
VLA Training Screenshot
VLA Training Setup
Robotics Coursework

AI for Robotics & Vision-Language-Action Models

  • State Estimation & Planning

    Completed advanced robotics curriculum under Prof. Dieter Fox, implementing EKF-SLAM, UKF, particle filters and sampling-based planners (RRT, PRM) with RL control policies.

  • Graph & Geometry Algorithms

    Implemented graph-search planning (A*, Dijkstra) and computational-geometry primitives for trajectory optimization, occupancy-grid mapping and road-network topology analysis.

  • Foundation Models

    Benchmarked VLA & robotics foundation models on the LeRobot-So-100 arm, analyzing generalization, task transfer and VLA training for mapping vision + language to action.

Link to VLA whitepaper
Systems Thinking

Low-Level Optimization Across Projects

I find myself doing this kind of work regardless of language. Whether it is C++ on embedded hardware, Python inference on a GPU cluster, or SQL going through a query planner, the approach is pretty much the same: figure out what is actually slow, then fix that.

Sequel2SQL — AST Internals for Query Optimization

Microsoft Sponsored · University Capstone Project

  • AST Transformation Passes: Built parsing and rewrite layers that work directly on the SQL AST at segment level. This let us apply targeted optimizations without blowing up memory on large queries.
  • Optimizer Internals: Dug into how CTEs and window functions actually get planned and executed, then used that to guide the LLM and RAG optimization. Ended up 6% over baseline on BIRD-CRITIC.
AST ParsingQuery PlannerCTEsWindow FunctionsBIRD-CRITIC+6% Benchmark
Sequel2SQL Repository
Sequel2SQL Architecture
GPU Optimization and AI Stack

Intuitive Surgical — GPU Inference Optimization

Software Engineer · Sunnyvale, CA

Got chat latency down from 90 seconds to 20 seconds by tuning the threading and batching configuration for the on-prem GPU setup. Ended up with a 4x throughput increase. Same core workflow as Dronaid: profile it first, then actually fix the real bottleneck.

  • GPU Memory Tuning: Tuned KV cache sizing and continuous batching parameters to keep VRAM utilization high without OOM errors when multiple requests came in at once.
  • Multi-threaded Batching: Batched concurrent requests to the on-prem GPUs to avoid per-token cloud API costs. Fixed-cost local inference scaled a lot better under load.
  • Profiling First: Same approach as NSight and Linux perf at Dronaid: measure what is actually slow before touching anything. Guessing wastes time.
75%Latency Reduction
4xThroughput Gain
On-PremGPU Deployment

The Common Thread

C++ RAII on a Jetson Nano, CUDA kernel coalescing in a lab, digging through a SQL query planner, tuning GPU memory batching for an LLM server. The approach that works in all of these is the same: go one level deeper than the abstraction and look at what is actually happening. That tends to be where the real gains are.