Erlang is a functional language that allows programmers to employ shared nothing processes and asynchronous message passing for parts of applications which can naturally execute concurrently. This paper reports on a non-trivial effort to use these concurrency features to parallelize a widely used application written in Erlang. More specifically, we present how Dialyzer, consisting of about 30,000 lines of quite complex and sequential Erlang code, has been parallelized using the language primitives and report on the challenges that were involved and lessons learned from engaging in this feat. In addition, we evaluate the performance improvements that were achieved on a variety of modern hardware. On a 32-core AMD "Bulldozer" machine, the parallel version of Dialyzer can now complete the analysis of Erlang/OTP's code base, consisting of about two million lines of Erlang code, in about six minutes compared to more than one hour twenty minutes that the sequential version still requires.
[1]
Claes Wikström,et al.
Concurrent programming in ERLANG (2nd ed.)
,
1996
.
[2]
Konstantinos Sagonas.
Experience from Developing the Dialyzer: A Static Analysis Tool Detecting Defects in Erlang Applications
,
2005
.
[3]
Mikael Pettersson,et al.
The HiPE/x86 Erlang Compiler: System Description and Performance Evaluation
,
2002,
FLOPS.
[4]
Konstantinos Sagonas,et al.
Practical type inference based on success typings
,
2006,
PPDP '06.
[5]
Υπατία Τσαβλίρη.
Parallelizing Dialyzer: A Static Analyzer That Detects Bugs In Erlang Programs
,
2010
.
[6]
Tom Schrijvers,et al.
Functional and Logic Programming
,
2012,
Lecture Notes in Computer Science.