ECOOP 2014 – Object-Oriented Programming

Volume 8586 of the series Lecture Notes in Computer Science pp 515-540

Converting Parallel Code from Low-Level Abstractions to Higher-Level Abstractions

  • Semih OkurAffiliated withUniversity of Illinois at Urbana-Champaign
  • , Cansu ErdoganAffiliated withUniversity of Illinois at Urbana-Champaign
  • , Danny DigAffiliated withOregon State University

* Final gross prices may vary according to local VAT.

Get Access


Parallel libraries continuously evolve from low-level to higher-level abstractions. However, developers are not up-to-date with these higher-level abstractions, thus their parallel code might be hard to read, slow, and unscalable. Using a corpus of 880 open-source C# applications, we found that developers still use the old Thread and ThreadPool abstractions in 62% of the cases when they use parallel abstractions. Converting code to higher-level abstractions is (i) tedious and (ii) error-prone. e.g., it can harm performance and silence the uncaught exceptions.

We present two automated migration tools, Taskifier and Simplifier that work for C# code. The first tool transforms old style Thread and ThreadPool abstractions to Task abstractions. The second tool transforms code with Task abstractions into higher-level design patterns. Using our code corpus, we have applied these tools 3026 and 405 times, respectively. Our empirical evaluation shows that the tools (i) are highly applicable, (ii) reduce the code bloat, (iii) are much safer than manual transformations. We submitted 66 patches generated by our tools, and the open-source developers accepted 53.