Clement Courbet
Clement is a Software Engineer in the Compiler Research team. He's interested in Programming Languages, Optimization and Computer Architecture. He's a regular contributor to the LLVM compiler, and an author of llvm-exegesis.
He holds a Masters in Electrical Engineering and a PhD in Computer Science (Computational Geometry) from Ecole Centrale Paris.
Research Areas
Authored Publications
Sort By
NSan: A Floating-Point Numerical Sanitizer
Proceedings of the 30th ACM SIGPLAN International Conference on Compiler Construction, Association for Computing Machinery (2021), 83–93 (to appear)
Preview abstract
Sanitizers are a relatively recent trend in software engineering. They aim at automatically finding bugs in programs,
and they are now commonly available to programmers as
part of compiler toolchains. For example, the LLVM project
includes out-of-the-box sanitizers to detect thread safety
(tsan), memory (asan,msan,lsan), or undefined behaviour
(ubsan) bugs.
In this article, we present nsan, a new sanitizer for locating
and debugging floating-point numerical issues, implemented
inside the LLVM sanitizer framework. nsan puts emphasis
on practicality. It aims at providing precise, and actionable
feedback, in a timely manner.
nsan uses compile-time instrumentation to augment each
floating-point computation in the program with a higher precision shadow which is checked for consistency during
program execution. This makes nsan between 1 and 4 orders
of magnitude faster than existing approaches, which allows
running it routinely as part of unit tests, or detecting issues
in large production applications.
View details
automemcpy: A framework for automatic generation of fundamental memory operations
Sam Xi
Proceedings of the 2021 ACM SIGPLAN International Symposium on Memory Management (ISMM '21), June 22, 2021, Virtual, Canada (to appear)
Preview abstract
Memory manipulation primitives (memcpy, memset, memcmp) are used by virtually every application, from high performance computing to user interfaces. They often consume a significant portion of CPU cycles. Because they are so ubiquitous and critical, they are provided by language runtimes and in particular by libc, the C standard library. These implementations are heavily optimized, typically written in hand-tuned assembly for each target architecture.
In this article, we propose a principled alternative to hand-tuning these functions: (1) we profile the calls to these functions in their production environment and use this data to drive the important high-level algorithmic decisions, (2) we use a high-level language for the implementation, delegate the job of tuning the generated code to the compiler, and (3) we use constraint programming and automatic benchmarks to select the optimal high-level structure of the functions.
We compile our memfunctions implementations using the same compiler toolchain that we use for application code, which allows leveraging the compiler further by allowing whole-program optimization. We have evaluated our approach by applying it to the fleet of one of the largest computing enterprises in the world. This work increased the performance of the fleet by 1%.
View details