Systems Software Engineer
About the role
Quadric is redefining edge AI with the industry's first General Purpose Neural Processing Unit (GPNPU), enabling developers to run both neural network inference and conventional C++ code on a single programmable architecture. Our technology powers intelligent edge devices across automotive, industrial, robotics, and embedded systems. Founded in 2016 and based in downtown Burlingame, California, Quadric is building the world's first supercomputer designed for the real-time needs of edge devices. Quadric aims to empower developers in every industry with superpowers to create tomorrow's technology, today. The company was co-founded by technologists from MIT and Carnegie Mellon, who were previously the technical co-founders of the Bitcoin computing company 21.
Responsibilities
- Maintain and optimize the Instruction Set Simulator used for architecture validation and software development.
- Drive the design of the low-level toolchain (Loader & Assembler) ensuring efficient translation, binary execution (e.g., ELF formats), and loading of code.
- Develop, enhance, and refine debugging tools and backends (Remote Debugger) providing deep, low-level visibility into core GPNPU execution.
- Design, maintain, and document clean, well-defined abstraction layers and public C++ APIs (C++ Host & Core Device APIs) that allow users and SDKs to interact with hardware with minimal friction.
- Independently own and expand one or more key components of the systems stack (Simulator, Loader/Assembler, Debugger, or C++ Host APIs) within the first 6–12 months.
- Influence next‑generation GPNPU hardware and software specifications by identifying execution trade‑offs within the Instruction Set Simulator.
- Deliver production‑ready, low‑latency API abstractions and debugging utilities trusted by internal SDK developers and external customers.
Requirements
- 5+ years experience building systems software: simulators, toolchains, debuggers, drivers, or performance‑critical C++ libraries.
- Deep comfort with modern C++ (C++17/20) and systems‑level programming paradigms.
- Advanced understanding of RAII, manual memory management, object lifetimes, ownership models, and memory access optimization.
- Ability to identify, design, and maintain clean abstraction layers that result in readable, maintainable, and scalable code.
- Proactive, adaptable attitude toward tackling the unique challenges of a brand‑new processor architecture.
- Boundary experience: demonstrated track record tackling complexity at the hardware‑software boundary in one or more of:
- Architectural Simulation: building/extending cycle‑accurate or functional simulators (e.g., Gem5, QEMU, or proprietary tools).
- Debugger Backends: working on the “guts” of debuggers (breakpoints, memory inspection, GDB stubs/remote protocols).
- Developer APIs: shipping C++ SDKs/libraries that balance “zero‑cost” abstractions with intuitive UIs.
- Low‑Level Toolchains: writing or maintaining assemblers, linkers, or loaders with deep knowledge of binary formats (ELF) and memory layouts.
- Bare‑Metal Constraints: writing performance‑critical code where every byte and cycle counts (drivers, embedded firmware).
Skills (Preferred)
- Understanding of CPU/NPU pipelines, registers, caches, and silicon‑level constraints.
- Experience with GPU & acceleration programming (CUDA, OpenCL, or Vulkan), alongside SIMD/SIMT architectures and host‑to‑device memory transfers.
- Experience with Linux driver development and CMake project configuration best practices.
- Familiarity with Rust in systems safety, as well as reasoning through multi‑threaded logic and complex synchronization issues.
- Knowledge of integrating functional programming concepts effectively in non‑garbage‑