Staff Embedded Software Engineer
Listed on 2026-08-03
-
Software Development
Software Engineer, Software Architect, DevOps, Unix/Linux
Primary Function of Position
We are looking for an experienced embedded software engineer with strong system architecture design and GPU systems engineering expertise to design, build, and optimize reusable software frameworks and infrastructure for compute-intensive applications on the dV5 system and future platforms. This role will help establish shared software foundations that can be leveraged across multiple platforms to deliver consistent capabilities with reduced engineering overhead.
The primary focus of this position is edge compute architecture, including distributed compute frameworks, data transfer mechanisms, graph-based execution pipelines, GPU/CPU workload optimization, system observability, and performance engineering for production embedded systems.
With a passion for transforming hardware capabilities into reliable, scalable, and high-performance software platforms, you will work across the software stack — from embedded Linux, OS/kernel interfaces, device drivers, CUDA kernels, inference engines, middleware, and application frameworks — to make data-driven architectural and implementation decisions that improve system performance, robustness, maintainability, and developer productivity. Our team empowers application and algorithm developers by providing easy-to-use frameworks, tooling, and reliable run-time software ecosystems.
This is an opportunity to work on complex and rewarding problems at the intersection of embedded Linux software development, hardware/software integration, edge compute architecture, performance optimization, UI and interaction software infrastructure, hybrid compute design, and ML/AI application enablement within the da Vinci production ecosystem.
The successful candidate is a self-directed, hands-on developer who can operate effectively in a high-energy, focused, and cross-functional environment. The candidate is expected to demonstrate end-to-end ownership, strong systems thinking, and a shared responsibility for delivering high-quality frameworks and production-ready software solutions.
Roles and Responsibilities
- Design and develop robust, multi-threaded C++ embedded Linux software infrastructure, libraries, and tool suites that enable modular, configurable, and reusable edge compute architectures across heterogeneous hardware environments.
- Design and evolve distributed compute frameworks, data transfer mechanisms, and graph-based execution pipelines for compute-intensive applications, including ML inference, perception algorithms, and other high-performance workloads.
- Define, profile, and optimize end-to-end compute performance across CPU/GPU pipelines and multi-node systems, including latency, throughput, jitter, memory bandwidth, power, thermal behavior, resource utilization, and determinism.
- Develop automated performance tests, reproducible benchmarking workflows, and CI integrations to maintain performance baselines, prevent regressions, and provide empirical evidence for architecture and product design decisions.
- Partner with hardware, platform software, application software, algorithms, and systems engineering teams to define architecture requirements, performance targets, integration strategies, and reusable framework capabilities.
- Improve software modularity, portability, instrumentation, observability, and field diagnosability through shared mechanisms such as metrics, structured logs, health monitoring, performance monitoring, and analysis tooling.
- Create high-quality technical documentation capturing architecture decisions, design concepts, trade-offs, and implementation principles.
Required Skills and Experience
- Strong experience with designing and developing embedded software infrastructure for heterogeneous edge compute systems, distributed compute frameworks, middleware, libraries, or platform-level services.
- Extensive hands-on experience with modern C++, advanced Linux system software development, and Linux internals including scheduling, memory management, concurrency, IPC, networking, logging, and storage.
- Strong understanding of distributed system design concepts, including data flow, scheduling, synchronization, resource management,…
(If this job is in fact in your jurisdiction, then you may be using a Proxy or VPN to access this site, and to progress further, you should change your connectivity to another mobile device or PC).