skip to main content
10.1145/2393596.2393660acmconferencesArticle/Chapter ViewAbstractPublication PagesfseConference Proceedingsconference-collections
research-article

How do developers use parallel libraries?

Published:11 November 2012Publication History

ABSTRACT

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.

References

  1. O. Callaú, R. Robbes, É. Tanter, and D. Röthlisberger. How developers use the dynamic features of programming languages: the case of smalltalk. In MSR '11: Proceedings of the 8th Working Conference on Mining Software Repositories, pages 23--32, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  2. C. Campbell, R. Johnson, A. Miller, and S. Toub. Parallel Programming with Microsoft .NET: Design Patterns for Decomposition and Coordination on Multicore Architectures. Microsoft Press, 2010. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. Collections. Concurrent (CC). July'12, http://msdn.microsoft.com/en-us/library/dd997305.aspx/.Google ScholarGoogle Scholar
  4. CodePlex. July'12, http://codeplex.com.Google ScholarGoogle Scholar
  5. T. Dey, Wei Wang, J. W. Davidson, and M. L. Soffa. Characterizing multi-threaded applications based on shared-resource contention. In Performance Analysis of Systems and Software (ISPASS), 2011 IEEE International Symposium on, pages 76--86, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. D. Dig. A refactoring approach to parallelism. Software, IEEE, 28(1):17--22, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. D. Dig, J. Marrero, and M. D. Ernst. How do programs become more concurrent? a story of program transformations. In IWMSE '11: Proceedings of the 4th International Workshop on Multicore Software Engineering, pages 43--50, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Github. July'12, https://github.com.Google ScholarGoogle Scholar
  9. M. Glad well. The Tipping Point: How Little Things Can Make a Big Difference. Back Bay Books, 2002.Google ScholarGoogle Scholar
  10. B. Goetz, T. Peierls, J. Bloch, J. Bowbeer, D. Holmes, and D. Lea. Java Concurrency in Practice. Addison-Wesley Professional, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. M. Grechanik, C. McMillan, L. DeFerrari, M. Comi, S. Crespi, D. Poshyvanyk, C. Fu, Q. Xie, and C. Ghezzi. An empirical investigation into a large-scale java open source code repository. In ESEM '10: Proceedings of the 2010 A CM-IEEE International Symposium on Empirical Software Engineering and Measurement, pages 1--10, 2010. Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. L. Hochstein, F. Shull, and L. B. Reid. The role of mpi in development time: a case study. In SC Conference, pages 1--10, 2008. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. S. Karus and H. Gall. A study of language usage evolution in open source software. In MSR '11: Proceedings of the 8th Working Conference on Mining Software Repositories, pages 13--22, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. D. Lea. Concurrent Programming in Javat: Design Principles and Pattern. Prentice Hall, 1999. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. D. Leijen, W. Schulte, and S. Burckhardt. The design of a task parallel library. ACM SIGPLAN Not., 44(10):227--242, 2009. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. B. P. Lester. The Art of Parallel Programming. 1st World Publishing, Inc., 2006.Google ScholarGoogle Scholar
  17. T. G. Mattson, B. A. Sanders, and B. L. Massingill. Patterns for Parallel Programming. Addison-Wesley Professional, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. M. Monperrus, M. Eichberg, E. Tekes, and M. Mezini. What should developers be aware of? an empirical study on the directives of api documentation. Empirical Software Engineering, Online Edition, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. Survival of the Forgest. July'12, http://redmonk.com/sogrady/2011/06/02/blackduck-webinar/.Google ScholarGoogle Scholar
  20. V. Pankratius. Automated usability evaluation of parallel programming constructs. In ICSE '11 (NIER track): Proceedings of the 33rd International Conference on Software Engineering, pages 936--939, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. V. Pankratius, C. Schaefer, A. Jannesari, and W. F. Tichy. Software engineering for multicore systems: an experience report. In IWMSE '08: Proceedings of the 1st international workshop on Multicore software engineering, pages 53--60, 2008. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. C. Parnin, C. Bird, and E. Murphy-Hill. Java generics adoption: how new features are introduced, championed, or ignored. In MSR '11: Proceedings of the 8th Working Conference on Mining Software Repositories, pages 3--12, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. Parallel Language Integrated Query (PLINQ). July'12, http://msdn.microsoft.com/en-us/library/dd460688.aspx/.Google ScholarGoogle Scholar
  24. AppVisum Project. July'12, https://github.com/Alxandr/AppVisum.Sys.Google ScholarGoogle Scholar
  25. Backgrounded Project. July'12, http://www.github.com/swedishkid/backgrounded.Google ScholarGoogle Scholar
  26. DotNetWebToolkit Project. July'12 https://github.com/chrisdunelm/DotNetWebToolkit.Google ScholarGoogle Scholar
  27. Gpxviewer Project. July'12, https://github.com/andrewgee/gpxviewer.Google ScholarGoogle Scholar
  28. PasswordGenerator Project. July'12, https://github.com/PanosSakkos/PasswordGenerator.Google ScholarGoogle Scholar
  29. Profit Project. July'12, http://profit.codeplex.com/.Google ScholarGoogle Scholar
  30. Ravendb Project. July'12, https://github.com/ravendb/ravendb.Google ScholarGoogle Scholar
  31. The Roslyn Project. July'12, http://msdn.microsoft.com/en-us/hh500769.Google ScholarGoogle Scholar
  32. Martin P. Robillard and Robert Deline. A field study of api learning obstacles. Empirical Software Engineering, 16(6):703--732, 2011. Google ScholarGoogle ScholarCross RefCross Ref
  33. System.Threading. July'12, http://msdn.microsoft.com/en-us/library/system.threading.Google ScholarGoogle Scholar
  34. Threading Building Block (TBB). July'12, http://threadingbuildingblocks.org/.Google ScholarGoogle Scholar
  35. W. Torres, G. Pinto, B. Fernandes, J. P. Oliveira, F. A. Ximenes, and F. Castor. Are java programmers transitioning to multicore?: a large scale study of java floss. In SPLASH '11 Workshops, pages 123--128, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. Companion TPL usage data. July'12, http://learnparallelism.net.Google ScholarGoogle Scholar
  37. ForkJoinTask Doug Lea's Workstation. July'12, http://gee.cs.oswego.edu/dl/jsr166/dist/jsr166ydocs/jsr166y/ForkJoinTask.html.Google ScholarGoogle Scholar

Index Terms

  1. How do developers use parallel libraries?

        Recommendations

        Comments

        Login options

        Check if you have access through your login credentials or your institution to get full access on this article.

        Sign in
        • Published in

          cover image ACM Conferences
          FSE '12: Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering
          November 2012
          494 pages
          ISBN:9781450316149
          DOI:10.1145/2393596

          Copyright © 2012 ACM

          Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

          Publisher

          Association for Computing Machinery

          New York, NY, United States

          Publication History

          • Published: 11 November 2012

          Permissions

          Request permissions about this article.

          Request Permissions

          Check for updates

          Qualifiers

          • research-article

          Acceptance Rates

          Overall Acceptance Rate17of128submissions,13%

          Upcoming Conference

          FSE '24

        PDF Format

        View or Download as a PDF file.

        PDF

        eReader

        View online with eReader.

        eReader