Overview
Technical lead role designing and implementing high-performance computing software for semiconductor equipment components, with responsibility for system design, low-level optimization and mentoring junior engineers.
What you'll do
- Design and implement high performance computing software solutions for the organization.
- Work closely with cross-functional teams, including software engineers, product managers and business stakeholders, to understand requirements and translate them into architectural and software designs that meet business needs.
- Act as a subject matter expert to unblock software engineers in the HPC domain.
- Profile systems to understand bottlenecks, and optimize workflows, code and processes to improve cost of ownership.
- Identify and mitigate technical risks and issues throughout the software development lifecycle.
- Lead the design and implementation of complex software components and systems.
- Ensure that software systems are scalable, reliable and maintainable.
- Mentor and coach junior software engineers.
- Implement features of high quality with maintainable and extendable code following software development best practices.
What you'll need
- 5 to 10 years of experience in design and coding in C/C++, preferably in a Linux environment.
- Very good knowledge of data structures, algorithms and complexity analysis.
- In-depth experience in multi-threading, thread synchronization, inter-process communication and distributed computing fundamentals.
- Very good knowledge of operating systems internals (Linux preferred), networking and storage systems.
- Experience in performance profiling at application and system level (e.g. VTune, OProfile, perf, NVIDIA Nsight).
- Experience in low-level code optimization techniques using vectorization and intrinsics, cache-aware programming, lock-free data structures, etc.
- Excellent problem-solving and analytical skills.
- Strong communication and collaboration abilities.
- Ability to mentor and coach junior team members.
- Experience in Agile development methodologies.
- Bachelor's degree or higher in computer science or a related discipline.
Nice to have
- Experience in GPU programming using CUDA, OpenMP, OpenACC, OpenCL, etc.
- Good knowledge of workflow orchestration software such as Apache Airflow, Apache Spark, Apache Storm or Intel TBB flowgraph, etc.
- Experience developing distributed high performance computing software using parallel programming frameworks such as MPI and UCX.
- Experience with HPC job-scheduling and cluster management software (SLURM, Torque, LSF, etc.).
- Good knowledge of low-latency and high-throughput data transfer technologies (RDMA, RoCE, InfiniBand).
- Familiarity with microservices architecture, containerization technologies (Docker/Singularity) and low-latency message queues.
- Experience in Java and Python programming.
Details
- Location: Bangalore, India.
- Employment type: Full time, assignee/regular.
- Travel: Yes, about 10% of the time.
- Relocation eligible: Yes.
Read the full description and apply on the company’s own careers page.