Amazon Web Services (AWS) is seeking a Virtual Platform Software Engineer for their Annapurna Labs team, focusing on building virtual platforms for machine learning accelerators. The role involves developing functional models of SoC subsystems and improving the infrastructure to support software development for AWS's custom silicon.
Responsibilities:
- Build and own functional models of SoC subsystems that integrate into our full-system virtual platform, used by firmware, driver, runtime, and application software teams
- Design models for usability and performance — your customers are software engineers who need to run real workloads on your platform efficiently
- Develop and improve the virtual platform infrastructure: QEMU integration, simulation performance, build and release tooling, and customer-facing documentation
- Work with software teams (your primary customers) to understand their workflows, debug issues on the platform, and shape the model to maximize their productivity
- Drive simulation performance improvements so the platform can handle increasingly complex workloads at scale
- Contribute to model architecture decisions — choosing the right level of abstraction and fidelity for each subsystem based on customer needs
Requirements:
- Experience programming languages such as C/C++, Python, Java or Perl
- 2+ years writing functional models, virtual platforms, or system-level simulations for hardware (SoCs, ASICs, GPUs, CPUs)
- Familiarity with SoC, CPU, GPU, and/or ASIC architecture and micro-architecture
- 2+ years of full software development life cycle, including coding standards, code reviews, source control management, build processes, testing, and operations experience
- Experience developing for or integrating with QEMU
- Experience with SystemC, TLM, or transaction-level modeling
- Experience building simulation infrastructure, CI pipelines, or release tooling
- Familiarity with Modern C++ (20 and beyond)
- Experience with PyTest, GoogleTest, or similar test frameworks
- Experience with multi-threaded programming
- Familiarity with firmware, driver, or runtime software development