This project first addresses the implementation of elementary functions such as exponential or trigonometric. Indeed, the standard mathematical library (LibM) offers a small set of such functions in a small set of precisions. Performance of LibM functions is of critical importance, in particular in scientific and financial computing. Therefore, they have always received special attention. For instance, processor manufacturers have teams of engineers who implement an optimized LibM for each new processor, a time-consuming and error-prone task. A first objective of this project is therefore to automate libm development, up to the point where libms autogenerated for a wide range of targets: general-purpose processors, embedded processors, graphical processing units, and even FPGA and digital circuits.

This project is financed by ANR and the consortium is made of INRIA/AriC, UPMC/LIP6, LIRMM and CERN, worldwide leaders in elementary functions, offering a number of expertises covering filters and control, a wide range of technological targets, and scientific and industrial applications.


Ideas for external contributors

Improve CptnHook Web Reports and Hooking Mechanism

Floating point operations represent a considerable fraction of the computing time of scientientific applications. For HEP, percentages between 10% and 20% have been measured for standard CMS data reconstruction. In order to optimise these functions, a first step consists in understanding how these mathematical functions are invoked, therefore their input value and the stacktrace which lead to the call. CptnHook is a profiler to investigate the usage patterns of mathematical functions capturing the input values and the stacktraces which lead to it. The tool is able to produce web reports which illustrate the main features of the usage patterns such as number of calls, minimum and maximum input values, stack frames.

This project is divided into two parts: 1. Improve The web reports Improve the look and feel of the present web reports with existing and widely adopted CSS and javascript packages. Increase the quantity of information displayed, such as means and other momenta of the input values. Produce plots of simple quantities in javascript or as static images. 2. Allow to select at runtime via a plugin mechanism the functions to be profiled.


Required Skills

  • C++
  • Floating point arithmetic
  • Web technologies


A Jupyter Kernel for Sollya

The Jupyter Notebook is a web application that allows you to create and share documents that contain live code, equations, visualizations and explanatory text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling or machine learning. Sollya is both a tool environment and a library for safe floating-point code development. It is particularily targeted to the automatized implementation of mathematical floating-point libraries (libm). Amongst other features, it offers a certified infinity (supremum) norm and a fast Remez algorithm.

This project aims to deliver a "Jupyter Kernel" which would allow to create Sollya Notebooks or to use Sollya via a web service. The Kernel will use the C++ api of Sollya and allow to simplify the creation of mathematical function and their testing, also producing plots via notebook aware libraries such as ROOT or mathplotlib.


Required Skills

  • Python and IPython
  • Expertise with Sollya and floating point computation is considered a plus

Improvement of the VDT Mathematical Library

The VDT mathematical library is a collection of optimised, inline and vectorisable mathematical functions. Its adoption allowed to reduce remarkably the runtime of the data processing workflows of CMS experiment at the LHC.

This project aims to further expand the functionality of the VDT mathematical library. Two main areas can be explored, namely:

1. Integration with OMP4 and support for simd vectors

The VDT functions can be enhanced in order to support the OpenMP4 programming interface relative to vectorisation. In additon, by templating the VDT functions, the explicit vectorisation through the usage of array types such as the gcc and clang built-in types or the Vc array types.

2. Integration of existing limited precision/domain function implementations

Often the usage of a certain mathematical function requires the support of a limited domain or a limited precision. This activity aims to complement the existing VDT functions implementations with others characterized by a reduced precision or input range. An appropriate formulation of the interfaces of these functions has to be adopted, for example adopting generic programming principles through the usage of templates.


Required Skills

  • C++
  • CMake and packaging is a plus

Contact Person


You are here