The successful candidate will join the NumPEx Exa-DI project.

If you're ready to take on the challenge, don't hesitate to apply!

 

 

Context

Launched in 2023 for a duration of six years, the NumPEx PEPR contributes to the design and development of numerical methods and software components that will equip future European exascale and post-exascale machines. NumPEx also aims to support the scientific and industrial community in fully leveraging the capabilities and potential of these new architectures.

The application domains include, among others: meteorology, climatology, aeronautics, automotive, astrophysics, high-energy physics, materials science, energy production and management, biology, and healthcare.

Exa-DI aims to accelerate the development of exascale applications by providing “mini-applications” and “development kits” based on the NumPEx software stack. These kits can be easily deployed and instantiated in various contexts, offering sustainable, high-performance, and portable solutions for the most common algorithmic and communication patterns encountered in exascale applications. These patterns will be addressed iteratively through an agile co-design and co-development process in collaboration with the application community.

Exa-DI is looking for highly motivated software architects with a strong background in both scientific computing and software engineering to strengthen the team !

Mission

As part of an Agile team, you will:

  • contribute, according to your expertise, to the exploration of specific patterns such as partial differential equation discretization, block-structured adaptive mesh refinement, particle methods, and more.
  • collaborate with the application community to identify and specify “mini-applications” that represent the main technical challenges associated with each pattern.
  • design a software architecture that promotes the broadest and most flexible reuse of libraries, frameworks, and tools from other NumPEx teams while ensuring overall consistency and performance.
  • minimize technical debt and anticipate future developments through a proactive refactoring approach.
  • lead the development and integration of mini-apps and provide technical guidance to less experienced engineers.
  • optimize performance and portability by effectively leveraging parallel programming models and abstraction layers.
  • create benchmarks and metrics to evaluate the performance, scalability, and portability of the proposed solutions.
  • ensure knowledge transfer by providing support and training.
  • play an active role in the Agile approach by contributing to process improvements, project planning and tracking, progress reviews and demonstrations, and coordination with other teams.

Required Skills

You hold a master’s degree, an engineering degree, or a PhD in computer science or another field related to scientific computing and have at least five years of experience in software development, with a minimum of three years in a technical lead or software architect role, and you are familiar with standard collaborative development tools: Git, GitHub, CMake, Docker, Spack, GTest, CTest, etc.

You are proficient in multiple programming languages (Python, C/C++, or Fortran), ideally with in-depth knowledge of parallel programming (GPU, multi-threading, etc.).

You are pragmatic and take initiative. Your analytical skills and ability to step back allow you to confidently tackle complex problems with multiple constraints (deadlines, major technical challenges).

You enjoy teamwork and have a strong interest in interdisciplinary collaborations involving multiple stakeholders at the intersection of applied mathematics, computer science, and physics applications. You have excellent written and verbal communication skills, both in French and English.