Cross Module Quickening - The Curious Case of C Extensions
Dynamic programming languages such as Python offer expressive power and programmer productivity at the expense of performance. Although the topic of optimizing Python has received considerable attention over the years, a key obstacle remains elusive: C extensions. Time and again, optimized run-time environments, such as JIT compilers and optimizing interpreters, fall short of optimizing across C extensions, as they cannot reason about the native code hiding underneath.
To bridge this gap, we present an analysis of C extensions for Python. The analysis data indicates that C extensions come in different varieties. One such variety is to merely speed up a single thing, such as reading a file and processing it directly in C. Another variety offers broad access through an API, resulting in a domain-specific language realized by function calls.
While the former variety of C extensions offer little optimization potential for optimizing run-times, we find that the latter variety does offer considerable optimization potential. This optimization potential rests on dynamic locality that C extensions cannot readily tap. We introduce a new, interpreter-based optimization leveraging this untapped optimization potential called Cross-Module Quickening. The key idea is that C extensions can use an optimization interface to register highly-optimized operations on C extension-specific datatypes. A quickening interpreter uses these information to continuously specialize programs with C extensions.
To quantify the attainable performance potential of going beyond C extensions, we demonstrate a concrete instantiation of Cross-Module Quickening for the interpreter and the popular C extension. We evaluate our implementation with the benchmark suite and report performance improvements by a factor of up to 2.82.
Mon 16 SepDisplayed time zone: Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna change
10:30 - 12:00 | |||
10:30 15mTalk | Static Basic Block Versioning Technical Papers Manuel Serrano Inria; Université Côte d’Azur, Olivier Melançon DIRO, Université de Montréal, Marc Feeley Université de Montréal | ||
10:45 15mTalk | Cross Module Quickening - The Curious Case of C Extensions Technical Papers Felix Berlakovich μCSRL, CODE Research Institute, University of the Bundeswehr Munich, Stefan Brunthaler μCSRL, CODE Research Institute, University of the Bundeswehr Munich | ||
11:00 15mTalk | Compiling with Arrays Technical Papers David Richter Technical University of Darmstadt, Timon Böhler Technical University of Darmstadt, Pascal Weisenburger University of St. Gallen, Mira Mezini TU Darmstadt; hessian.AI; National Research Center for Applied Cybersecurity ATHENE Pre-print | ||
11:15 15mTalk | The Performance Effects of Virtual-Machine Instruction Pointer Updates Technical Papers | ||
11:30 15mTalk | Taking a Closer Look: An Outlier-Driven Approach to Compilation-Time Optimization Technical Papers Florian Huemer JKU Linz, David Leopoldseder Oracle Labs, Aleksandar Prokopec Oracle Labs, Raphael Mosaner JKU Linz, Hanspeter Mössenböck JKU Linz | ||
11:45 15mTalk | Optimizing Layout of Recursive Datatypes with Marmoset Technical Papers Vidush Singhal Purdue University, Chaitanya S. Koparkar Indiana University, Joseph Zullo Purdue University, Artem Pelenitsyn Purdue University, Michael Vollmer University of Kent, Mike Rainey Carnegie Mellon University, Ryan R. Newton Purdue University, Milind Kulkarni Purdue University DOI Pre-print |