Responsibilities/Duties:
- Develop and optimize high-performance computing (HPC) software applications tailored for specific scientific or engineering domains.
- Designs new software tools, and refactors existing tools, to take advantage of object-oriented structures and software architecting best practices.
- Develops and implements algorithms which exploit high performance compute clusters.
- Collaborate with domain scientists and researchers to understand their computational needs and translate them into efficient software solutions, ensuring compatibility with existing HPC infrastructure and workflows.
- Works both independently and on small teams; interacts with program office and global customers.
- Participate in code reviews, team meetings, and technical discussions, contributing expertise and insights to enhance the overall quality and effectiveness of HPC software development efforts.
- Contributes to technical reports, user documentation, regular status reports, and other presentations to disseminate findings, guidance, and technical information to as wide an audience as possible.
- Guides and mentors junior engineers, offering technical support and guidance.
- Available to travel according to business needs, including attending conferences, workshops, or visiting client sites to provide technical expertise, support, and training as necessary.
Requirements:
- B.Eng. Degree in Computer Engineering, Computer Science, or Related Discipline.
- 3+ years of experience as a Software Engineer
- High proficiency in C and/or C++ programming language.
- Proficiency in one or more of the popular scripting languages such as Python, Julia, or R.
- Proficiency in one or more of the parallel libraries/languages such as MPI, OpenMP, OneAPI and CUDA.
- Good knowledge of version control.
- Fair knowledge of CI/CD tools.
- Basic knowledge of Containers.
- Knowledge in optimization techniques and frameworks as well as distribution and parallelization.
- Basic knowledge in one or more of the following:
Hardware Architecture
High Performance Computing
- Knowledge in one of the following areas is a plus:
Numerical solvers and/or numerical methods e.g. Finite Difference/Element/Volume Method
Data Science
- Deep understanding of software design, programming techniques, and algorithms.
- Deep understanding of software architecture
- Decent level work experience in developing algorithms.
- Excellent communication skills and experience working in a collaborative environment.
- Excellent Command in English written & verbal.