Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 27 additions & 15 deletions data/experience.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,38 @@
## Senior Software Engineer, Graphics Software Infrastructure
### [Qualcomm](https://www.qualcomm.com/snapdragon/overview) - San Diego, CA · (prev: Boulder, CO; Toronto, ON)
#### 2021 - Present

##### Distributed Pre-Silicon GPU Driver Validation Platform
### [Qualcomm](https://www.qualcomm.com/snapdragon/overview) - San Diego, CA

#### 2024 - Present

- `Designed and led` end-to-end `pre-silicon` GPU validation platform from concept to production, catching regressions and protecting pass rates on proprietary GPU driver code across `5 generations` of `Snapdragon 8 Elite Extreme` (mobile) and `X Elite Extreme` (PC) series chipsets.
##### Platform Ownership, Scale-Out & Agentic Tooling

- `Led` validation platform behind `5 generations` of `Snapdragon 8 Elite Extreme` (mobile) and `X Elite Extreme` (PC) chips for `1,000+` developers.
- Scaled validation to `300K+ containers/week` on Windows/Linux across an on-prem `HPC` farm through a fault-tolerant runner harness, covering `Vulkan`/`OpenCL`/`OpenGLES` - `CTS`, `VKPerf`, `GFXReconstruct`, and device-capture replay with `billions of tests` in sandboxed, reproducible runtimes.
- Parallelized `1100+ days` of serial `CPU-based Adreno emulation` into a `24-hour` nightly cycle (`1100x`) with `Docker`/`Singularity` on `IBM Spectrum LSF`.
- Built `FastAPI` observability backend on `RedisJSON`/`RediSearch`, powering custom `web dashboards` with `sub-second` live queries over `2M+` records.
- Architected async `RabbitMQ` pipelines into `Postgres` and a `DuckDB` data lake, offloading raw driver logs to `Artifactory` to keep databases lean.
- Standardized `Pydantic` result schemas across `10+` Khronos suites that the `on-device benchmark` team adopted directly and extended for KPIs.
- Shipped an `MCP server` secured with `OAuth2` over live infra APIs, making operational data queryable by LLMs and coding agents for local triage.
- Drove org-wide adoption of agentic coding with `Cline`/`Codex`/`Claude Code`, delivering talks on `MCP` workflows and writing custom Skills.

##### Automated Regression Triage System

- `Engineered` a cron-scheduled `CI/CD` pipeline that diffs non-passing rows across consecutive nightly logs, builds `Gerrit` commit DAGs, and dispatches multi-stage `Jenkins` bisection workflows, eliminating operational toil from nightly builds with overlapping test failures.
- Implemented stateful `multi-bisection engine` on a crash-recoverable `JSONL` state loop inspired by [`Karpathy's autoresearch`](https://github.com/karpathy/autoresearch), sharing midpoint builds across failing tests and partitioning commit ranges, isolating C culprits in `O(C log N)` runs instead of `O(K log N)`, cutting compute by `80%`.
- `Left-shifted` driver validation by compressing the failure-to-fix loop, from detection and `root-cause commit` identification to author notification, enabling `rapid fix iteration` and a sustained `99%` pass rate `week over week`.
- Engineered a fully automated cron `CI/CD` dispatcher that diffs nightly failures and launches `Jenkins` bisections across `Gerrit` commits.
- Implemented `multi-bisection engine` on Karpathy's [`autoresearch`](https://github.com/karpathy/autoresearch)-style `JSONL` loop, isolating C culprits in `O(C log N)` runs, cutting compute by `80%`.
- `Left-shifted` driver validation, shrinking `root-cause` triage from `3 days` to under `12 hours` and sustaining a `99%` pass rate week over week.

---

##### Agentic Developer Infrastructure
## Software Engineer, Graphics Software Infrastructure

- `Shipped` `MCP` server with `OAuth2` over live infra APIs plus a `LangGraph`/`ChromaDB` RAG over internal docs, making operational data LLM-queryable.
- Drove org-wide adoption of agentic coding with `Cline`, `Codex CLI`, delivering talks on MCP-based developer workflows and writing custom Skills.
### [Qualcomm](https://www.qualcomm.com/snapdragon/overview) - San Diego, CA · (prev: Boulder, CO; Toronto, ON)

#### 2021 - 2024

##### Distributed Pre-Silicon GPU Driver Validation Platform

- `Designed and built` end-to-end `pre-silicon` GPU validation platform from concept to production, catching regressions in proprietary driver code.
- Automated `Jenkins` deploys on upstream driver changes, pinning each build to its SDK and suite versions for repeatable runs.
- Parallelized `1100+ days` of serial `CPU-based Adreno emulation` into a `24-hour` nightly cycle (`1100x`) with `Docker`/`Singularity` on `IBM Spectrum LSF`.
- Built `FastAPI` observability backend on `RedisJSON`/`RediSearch`, powering custom `web dashboards` with `sub-second` live queries over `2M+` records.
- Architected async `RabbitMQ` pipelines into `Postgres` and a `DuckDB` data lake, offloading raw driver logs to `Artifactory` to keep databases lean.

---

Expand All @@ -30,8 +42,8 @@

#### 2020 - 2021

- `Engineered anomaly detection APIs` (`Auto-Thresholds`, `Auto-Device Grouping`) and `ETL pipelines` processing live `IoT` telemetry from `NetFlow`/`Radius` sources to power the `SecurityPro` network diagnostic product.
- `Owned the full ML lifecycle (0-to-1)` from prototyping through deployment; built `PowerBI` dashboards with `3D clustering` visualizations; presented weekly to `C-suite` (`CTO` & `SVPs`), translating ML outcomes into business decisions.
- Engineered `anomaly detection APIs` (Auto-Thresholds, Auto-Device Grouping) and `ETL pipelines` processing live `IoT telemetry` from NetFlow/Radius sources to power the `SecurityPro` network diagnostic product.
- `Owned the full ML lifecycle` from prototype to deployment; built `PowerBI` dashboards with `3D clustering` views and translated ML outcomes into business decisions, presenting weekly to the `C-suite` (`CTO` and `SVPs`).

---

Expand Down
4 changes: 1 addition & 3 deletions data/projects.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
### [Satellite Terrain Classification - Distributed ML on AWS EMR](https://github.com/hellosaumil/deepsat-aws-emr-pyspark)

##### Distributed ML, Image Classification, PCA, Random Forests, PySpark, AWS EMR, S3

- Deployed distributed `PySpark ML` pipeline on `AWS EMR` to classify `405K satellite images` across `6 terrain categories`; achieved `92% accuracy`.
- Architected `S3` + Spark ML pipelines processing `5.6 GB` at `<$0.20/run`, cutting training time `~85%` via PCA dimensionality reduction.
- Architected `S3` + `Spark ML` pipelines processing `5.6 GB` at `<$0.20/run`, cutting training time `~85%` via PCA dimensionality reduction.
4 changes: 2 additions & 2 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
} catch (e) {}
})();
</script>
<link rel="stylesheet" href="styles.css?v=23">
<link rel="stylesheet" href="styles.css?v=24">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link
Expand Down Expand Up @@ -177,7 +177,7 @@ <h2 class="section-title header-2">Publications & Awards</h2>
</div>
</div>

<script src="script.js?v=23"></script>
<script src="script.js?v=26"></script>
</body>

</html>
34 changes: 33 additions & 1 deletion script.js
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,21 @@ document.addEventListener('DOMContentLoaded', function () {
// Initialize Layout
updateLayoutUI(settings.pagePreview);

// Disable Page Preview during print; restore afterwards if it was on
let previewHiddenForPrint = false;
window.addEventListener('beforeprint', () => {
if (document.body.classList.contains('show-page-preview')) {
previewHiddenForPrint = true;
document.body.classList.remove('show-page-preview');
}
});
window.addEventListener('afterprint', () => {
if (previewHiddenForPrint) {
previewHiddenForPrint = false;
document.body.classList.add('show-page-preview');
}
});

// ========================================
// Theme Toggle (Dark Mode)
// ========================================
Expand Down Expand Up @@ -473,11 +488,28 @@ document.addEventListener('DOMContentLoaded', function () {
});
}

// Sync with device theme changes
// Sync with device theme changes (ignored while printing: print engines can
// flip prefers-color-scheme and would overwrite the user's saved theme)
let printingNow = false;
let themeBeforePrint = null;
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
if (printingNow) return;
updateThemeUI(e.matches);
});

window.addEventListener('beforeprint', () => {
printingNow = true;
themeBeforePrint = document.body.classList.contains('dark-mode');
});
window.addEventListener('afterprint', () => {
// Restore the pre-print theme, then let late media-query events settle
if (themeBeforePrint !== null) {
updateThemeUI(themeBeforePrint);
themeBeforePrint = null;
}
setTimeout(() => { printingNow = false; }, 500);
});

// Initialize Theme
updateThemeUI(settings.darkMode);

Expand Down
44 changes: 41 additions & 3 deletions styles.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* ========================================
Resume Website - A4 PDF Export Ready
Resume Website - US Letter PDF Export Ready
Single Column Layout - Matching Original
======================================== */

Expand Down Expand Up @@ -1160,8 +1160,9 @@ body.dark-mode .attribution code {
Print / PDF Export Styles
======================================== */

/* US Letter to match Page Preview (--page-width/--page-height) and LaTeX export */
@page {
size: A4;
size: letter;
margin: 0;
}

Expand All @@ -1178,9 +1179,41 @@ body.dark-mode .attribution code {
causing light weights (100–300) to appear thinner than on screen.
Use darker ink tokens and stepped-up print weights instead of
-webkit-text-stroke (which emits duplicate PDF text layers). */
:root {
/* Always print with light theme tokens, even when dark mode is active */
:root,
html.dark-mode,
body.dark-mode {
color-scheme: light;
--primary-color: #1a1a1a;
--accent-color: #0066cc;
--text-color: #111111;
--text-light: #2b2b2b;
--border-color: #cccccc;
--white: #ffffff;
}

/* Neutralize Page Preview chrome so print matches preview regardless of toggle */
body,
body.show-page-preview {
padding: 0 !important;
background: #ffffff !important;
min-height: auto !important;
}

.resume-page,
body.show-page-preview .resume-page,
body.dark-mode.show-page-preview .resume-page {
width: 100% !important;
max-width: none !important;
min-height: auto !important;
box-shadow: none !important;
border: none !important;
background: #ffffff !important;
}

.resume-page::after,
body.show-page-preview .resume-page::after {
display: none !important;
}

* {
Expand All @@ -1205,6 +1238,11 @@ body.dark-mode .attribution code {
padding: var(--margin-top) var(--margin-right) var(--margin-bottom) var(--margin-left) !important;
}

/* Page edge acts as bottom margin; trailing padding would spill a blank 2nd page */
.resume-page {
padding-bottom: 0 !important;
}

/* Ensure in-flow painting order for clean ATS stream */
.section-title,
h2.section-title {
Expand Down
Loading