Software Engineer, Parallel Scientific Computing at Vorticity Inc
Berkeley Industrial Engineering & Operations Research · Indiana, United States · 2 days ago
EngineeringFull-time
Responsibilities
- Develop high-level reference implementations of scientific applications (e.g. finite-difference time-domain methods, computational fluid dynamics, electromagnetic wave propagation, etc.) from mathematical and algorithmic descriptions.
- Implement and parallelize scientific applications using our proprietary Software Development Kit (SDK) across SPU simulation, emulation, and real-hardware environments.
- Develop and optimize performance critical kernels for the SPU architecture.
- Own iterative performance optimization loops, benchmark, profile, identify bottlenecks, implement improvements and repeat, until we reach our performance targets.
- Understand applications across abstraction layers, from their mathematical formulation to their mapping onto parallel hardware.
- Identify opportunities to improve our compilation flow, runtime, hardware utilization, and overall system efficiency.
- Collaborate with architecture and performance teams to analyze bottlenecks and co-design innovative software and hardware solutions.
- Independently identify problems and opportunities, propose next steps, and drive work forward without requiring detailed task by task direction.
- Write clear, concise technical documentation for Vorticity’s engineers and customers.
- Stay current with parallel programming models, High Performance Computing (HPC) architectures, numerical methods, and techniques for mapping scientific workloads onto parallel hardware.
Qualifications
- Bachelor's degree in Computer Science, Electrical Engineering, Applied Mathematics, Physics, or related field.
- Master's or PhD in Computer Science, Electrical Engineering, Applied Mathematics, Physics, or related field.
- 5+ years of experience in modern C++ (CUDA C++ experience strongly preferred) for parallel programming and high-performance computing.
- Exceptional candidates with fewer years but strong skills are also welcome.
- Ability to understand numerical algorithms and translate mathematical descriptions into working implementations.
- Ability and willingness to debug across abstraction layers, from an application or numerical algorithm down through software and into the underlying architecture.
- Strong understanding of computer architecture and the interaction between software and hardware.
- Proficiency with C++, Python, and Linux development environments.
- Excellent written and verbal communication skills.
- Strong ability to work independently and in a team, while taking ownership of ambiguous problems, and determining what needs to be done next.
- Willingness to put in the hard work needed to bring our SPU to life.
- Above all: zero ego.