Compiling Dynamic Data Structures in Python to Enable the Use of Multi-core and Many-core Libraries

Programmer productivity considerations are increasing the popularity of interpreted languages like Python. At the same time, for applications where performance is important, these languages clearly lack even on uniprocessors. In addition, the use of dynamic data structures in a language like Python...

Full description

Saved in:
Bibliographic Details
Published in2011 International Conference on Parallel Architectures and Compilation Techniques pp. 68 - 77
Main Authors Bin Ren, Agrawal, G.
Format Conference Proceeding
LanguageEnglish
Published IEEE 01.10.2011
Subjects
Online AccessGet full text
ISBN1457717948
9781457717949
ISSN1089-795X
DOI10.1109/PACT.2011.13

Cover

More Information
Summary:Programmer productivity considerations are increasing the popularity of interpreted languages like Python. At the same time, for applications where performance is important, these languages clearly lack even on uniprocessors. In addition, the use of dynamic data structures in a language like Python makes it very hard to use emerging libraries for enabling the execution on multi-core and many-core architectures. This paper presents a framework for compiling Python to use multi-core and many-core libraries. The key component of our framework involves a suite of algorithms for replacing dynamic and/or nested data structures by arrays, while minimizing unnecessary data copying costs. This involves a novel use of an existing partial redundancy elimination algorithm, development of a new demand-driven interprocedural partial redundancy algorithm, a data flow formulation for determining that the contents of the data structure are of the same type, and a linearization algorithm. We have evaluated our framework using data mining and two linear algebra applications written in pure Python. The key observations were: 1) the code generated by our framework is only 10\% to 20\% slower compared to the hand-written C code that invokes the same libraries, 2) our optimizations turn out to be significant for improving the performance in most cases, and 3) we outperform interpreted Python and the C++ code generated by an existing tool by one to two orders of magnitude.
ISBN:1457717948
9781457717949
ISSN:1089-795X
DOI:10.1109/PACT.2011.13