Senior embedded software engineer – optimization of computation of audio algorithm on GAP architecture
GreenWaves is a fabless semiconductor company founded in 2014 and based in Grenoble, France. We design and market ultra low power processors for energy constrained products such as hearables, wearables, IoT & medical monitoring products.
GreenWaves’ system-on-chips enable companies to develop and bring to market products with new to world features enabled by state of the art machine learning and digital signal processing techniques. Our leading edge development tools enable audio and machine learning developers to productively harness the power of GAP processors.
GreenWaves GAP9 processor powers features such as neural network based noise removal and adaptive noise cancellation, multi-channel spatial sound and listening enhancement technologies in next generation earbuds and headphones with market leading energy efficiency.
As a growing, talented and highly multicultural team with sharp personalities, we are proud of what we do and how we do it. Our non-hierarchical culture means living our core values: ownership, collaboration, agility, dedication to customers and engagement. We believe that work is more than just a to-do list. You are empowered to build a leading company and to share its success!
We are looking for talented, enthusiastic, and committed people to be a part of our GreenWaves family.
As a member of the Audio team, you will contribute to port and optimize calculations and processing kernels onto the different chips of the GAP family. For this purpose, you will benefit, and possibly improve, a number of tools and software that Greenwaves Technologies has developed: a GCC port for the extended cores embedded in GAP chips (32-bit RISC-V cores with DSP extensions); low-level routines for memory allocation, inter-core synchronizations and data movements across the memory hierarchy; an in-house tool, called Autotiler, which helps to efficiently parallelize and distribute an application graph, based on optimized basic kernels, onto the architecture, managing and optimizing resource allocation; a tool suite called NNtool which helps applications’ programmers tailoring a neural network to optimize its performance on GAP architecture. This set of tools is completed by a simulation platform which accurately simulates software execution on the chips, and equipped with a profiling tool which enables identification of performance bottlenecks in large applications.
Your tasks will include:
- Optimization of computation kernels, based on compromises between execution speed and numerical precision: data encoding (floating point, fixed point, number of bits), analysis of error propagation and impact, use of vector instructions, parallelism, etc.;
- Audio Algorithm adaptation to prepare optimized porting;
- Audio Algorithm parallel implementation, and use of HW accelerator;
- Proposal and implementation of improvements on the different algorithm & programming tools;
- Associated documentation.
- Good knowledge of audio processing and signal processing
- Good knowledge of computer arithmetic: fixed-point, floating, quantization, bounding of errors;
- Familiarity with signal processing (IIR/FIR, polynomial filters, Horner structure, Farrow structure…);
- Graph optimization and mapping techniques, multi-criteria optimization, constrained optimization;
- Code performance analysis and optimization on hardware target;
- Proficient in C/C++ programming;
- Familiarity with versioning/revision control systems.
- Good level of spoken and written English, to be used daily to communicate with colleagues and international partners;
- Organizational skills;
- Strong team spirit and communication abilities;
- Ability to work autonomously and proactively on assigned tasks.
- Knowledge of parallel architectures and DSP processors
- Application parallelization;
- Git proficiency;
- Knowledge of compiler intrinsics (front-end and back-end), especially GCC;
- Knowledge of AI applications and their port on constrained embedded architectures.
- Master Degree or plus in computer science or applied mathematics, with a solid background in computer arithmetics;
- A significant experience in optimizing computation on embedded processors is required, preferably using parallelism, vectorization, fixed point;
- An expertise in compilation is a plus.