Concurrent Programming in Java. Second Edition: Design Principles and Patterns
Concurrent Programming in Java. Second Edition: Design Principles and Patterns
Java Concurrency in Practice
Software engineering for multicore systems: an experience report
Proceedings of the 1st international workshop on Multicore software engineering
Patterns for parallel programming
Patterns for parallel programming
The role of MPI in development time: a case study
Proceedings of the 2008 ACM/IEEE conference on Supercomputing
The design of a task parallel library
Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications
An empirical investigation into a large-scale Java open source code repository
Proceedings of the 2010 ACM-IEEE International Symposium on Empirical Software Engineering and Measurement
A Refactoring Approach to Parallelism
IEEE Software
Parallel Programming with Microsoft .NET: Design Patterns for Decomposition and Coordination on Multicore Architectures
How do programs become more concurrent: a story of program transformations
Proceedings of the 4th International Workshop on Multicore Software Engineering
Java generics adoption: how new features are introduced, championed, or ignored
Proceedings of the 8th Working Conference on Mining Software Repositories
A study of language usage evolution in open source software
Proceedings of the 8th Working Conference on Mining Software Repositories
How developers use the dynamic features of programming languages: the case of smalltalk
Proceedings of the 8th Working Conference on Mining Software Repositories
Automated usability evaluation of parallel programming constructs (NIER track)
Proceedings of the 33rd International Conference on Software Engineering
Characterizing multi-threaded applications based on shared-resource contention
ISPASS '11 Proceedings of the IEEE International Symposium on Performance Analysis of Systems and Software
A field study of API learning obstacles
Empirical Software Engineering
Are Java programmers transitioning to multicore?: a large scale study of java FLOSS
Proceedings of the compilation of the co-located workshops on DSM'11, TMC'11, AGERE!'11, AOOPES'11, NEAT'11, & VMIL'11
What should developers be aware of? An empirical study on the directives of API documentation
Empirical Software Engineering
Practical static race detection for Java parallel loops
Proceedings of the 2013 International Symposium on Software Testing and Analysis
LAMBDAFICATOR: from imperative to functional programming through automated refactoring
Proceedings of the 2013 International Conference on Software Engineering
Crossing the gap from imperative to functional programming through refactoring
Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering
Refactoring multicore applications towards energy efficiency
Proceedings of the 2013 companion publication for conference on Systems, programming, & applications: software for humanity
Empirical analysis of programming language adoption
Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
Proceedings of the 12th international conference on Generative programming: concepts & experiences
Why do scala developers mix the actor model with other concurrency models?
ECOOP'13 Proceedings of the 27th European conference on Object-Oriented Programming
Examining the expert gap in parallel programming
Euro-Par'13 Proceedings of the 19th international conference on Parallel Processing
Invited talk on refactoring: from concurrency to mobility
Proceedings of the 2013 ACM workshop on Mobile development lifecycle
Hi-index | 0.00 |
Parallel programming is hard. The industry leaders hope to convert the hard problem of using parallelism into the easier problem of using a parallel library. Yet, we know little about how programmers adopt these libraries in practice. Without such knowledge, other programmers cannot educate themselves about the state of the practice, library designers are unaware of API misusage, researchers make wrong assumptions, and tool vendors do not support common usage of library constructs. We present the first study that analyzes the usage of parallel libraries in a large scale experiment. We analyzed 655 open-source applications that adopted Microsoft's new parallel libraries -- Task Parallel Library (TPL) and Parallel Language Integrated Query (PLINQ) -- comprising 17.6M lines of code written in C#. These applications are developed by 1609 programmers. Using this data, we answer 8 research question and we uncover some interesting facts. For example, (i) for two of the fundamental parallel constructs, in at least 10% of the cases developers misuse them so that the code runs sequentially instead of concurrently, (ii) developers make their parallel code unnecessarily complex, (iii) applications of different size have different adoption trends. The library designers confirmed that our finding are useful and will influence the future development of the libraries.