Overview
As a Software Engineer and technical lead, you will design and implement high-performance computing software for low-latency, high-throughput image processing and deep-learning workloads supporting semiconductor process control equipment. You will work on complex system design, low-level optimization, and maintainable software solutions.
What you'll do
- Design, prototype, develop, debug, and implement software solutions for semiconductor equipment components and devices.
- Design and implement high-performance computing software solutions.
- Work with software engineers, product managers, and business stakeholders to understand requirements and translate them into architectural and software designs.
- Serve 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 software systems are scalable, reliable, and maintainable.
- Develop software documentation and test procedures.
- Troubleshoot software problems and communicate with internal customers to understand project requirements.
- Mentor and coach junior software engineers.
- Implement high-quality features 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, with Linux preferred, networking, and storage systems.
- Experience in performance profiling at application and system level, such as vtune, Oprofiler, perf, or Nividia Nsight.
- Experience in low-level code optimization techniques using vectorization and intrinsics, cache-aware programming, lock-free data structures, and similar techniques.
- 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 related disciplines.
Nice to have
- Experience in GPU programming using CUDA, OpenMP, OpenACC, OpenCL, or similar technologies.
- Good knowledge of workflow orchestration software such as Apache Airflow, Apache Spark, Apache Storm, or Intel TBB flowgraph.
- Experience developing distributed high-performance computing software using parallel programming frameworks such as MPI or UCX.
- Experience in HPC job-scheduling and cluster management software such as SLURM, Torque, or LSF.
- Good knowledge of low-latency and high-throughput data transfer technologies such as RDMA, RoCE, or InfiniBand.
- Familiarity with microservices architecture, containerization technologies such as Docker or Singularity, and low-latency message queues.
- Experience in Java and Python programming.
Details
- Location: Bangalore, India.
- Employment type: Full time.
- Travel: Not specified.
- Relocation eligible: No.
Read the full description and apply on the company’s own careers page.