Building scalable software systems in the multicore era

Software systems must face two challenges today: growing complexity and increasing parallelism in the underlying computational models. The problem of increased complexity is often solved by dividing systems into modules in a way that permits analysis of these modules in isolation. The problem of lack of concurrency is often tackled by dividing system execution into tasks that permits execution of these tasks in isolation. The key challenge in software design is to manage the explicit and implicit dependence between modules that decreases modularity. The key challenge for concurrency is to manage the explicit and implicit dependence between tasks that decreases parallelism. Even though these challenges appear to be strikingly similar, current software design practices and languages do not take advantage of this similarity. The net effect is that the modularity and concurrency goals are often tackled mutually exclusively. Making progress towards one goal does not naturally contribute towards the other. My position is that for programmers that are not formally and rigorously trained in the concurrency discipline the safest and most productive way to get scalability in their software is by improving modularity of their software using programming language features and design practices that reconcile modularity and concurrency goals. I briefly discuss preliminary efforts of my group, but we have only touched the tip of the iceberg.

[1]  Joe Armstrong,et al.  Concurrent programming in ERLANG , 1993 .

[2]  Bradley C. Kuszmaul,et al.  Cilk: an efficient multithreaded runtime system , 1995, PPOPP '95.

[3]  Polyvios Pratikakis,et al.  Transparent proxies for java futures , 2004, OOPSLA.

[4]  Doug Lea,et al.  Concurrent Programming In Java , 1996 .

[5]  Hridesh Rajan,et al.  Phase-guided thread-to-core assignment for improved utilization of performance-asymmetric multi-core processors , 2009, 2009 ICSE Workshop on Multicore Software Engineering.

[6]  Hridesh Rajan,et al.  Implicit invocation meets safe, implicit concurrency , 2010, GPCE '10.

[7]  Doug Lea,et al.  A Java fork/join framework , 2000, JAVA '00.

[8]  Matteo Frigo,et al.  The implementation of the Cilk-5 multithreaded language , 1998, PLDI.

[9]  David Geer For Programmers, Multicore Chips Mean Multiple Challenges , 2007, Computer.

[10]  Rupak Majumdar,et al.  Tasks: language support for event-driven programming , 2007, PEPM '07.

[11]  John K. Ousterhout,et al.  Why Threads Are A Bad Idea (for most purposes) , 2003 .

[12]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[13]  Monica S. Lam,et al.  The design, implementation, and evaluation of Jade , 1998, TOPL.

[14]  Hridesh Rajan,et al.  Need for Instance Level Aspect Language with Rich Pointcut Language , 2003 .

[15]  Gary T. Leavens,et al.  Quantified, Typed Events for Improved Separation of Concerns , 2008 .

[16]  Doug Lea Concurrent Programming in Java. Second Edition: Design Principles and Patterns , 1999 .

[17]  David Notkin,et al.  Reconciling environment integration and software evolution , 1992, TSEM.

[18]  David Garlan,et al.  Formalizing Design Spaces: Implicit Invocation Mechanisms , 1991, VDM Europe.

[19]  Stephen N. Freund,et al.  FastTrack: efficient and precise dynamic race detection , 2009, PLDI '09.

[20]  Keshav Pingali,et al.  Optimistic parallelism requires abstractions , 2009, CACM.

[21]  Hridesh Rajan,et al.  Concurrency by modularity: design patterns, a case in point , 2010, OOPSLA.

[22]  Hridesh Rajan Design Patterns in Eos , 2007 .

[23]  Eddie Kohler,et al.  Events Can Make Sense , 2007, USENIX Annual Technical Conference.

[24]  Luca Cardelli,et al.  Modern concurrency abstractions for C# , 2002, TOPL.

[25]  Timothy G. Mattson,et al.  Patterns for parallel programming , 2004 .

[26]  Suresh Jagannathan,et al.  Safe futures for Java , 2005, OOPSLA '05.

[27]  Sebastian Burckhardt,et al.  The design of a task parallel library , 2009, OOPSLA.

[28]  Hridesh Rajan,et al.  Predictive thread-to-core assignment on a heterogeneous multi-core processor , 2007, PLOS '07.

[29]  Timothy G. Mattson,et al.  Parallel programming with a pattern language * , 2001, International Journal on Software Tools for Technology Transfer.

[30]  H. Rajan,et al.  Classpects: unifying aspect- and object-oriented language design , 2005, Proceedings. 27th International Conference on Software Engineering, 2005. ICSE 2005..

[31]  Timothy G. Mattson,et al.  A Pat-tern Language for Parallel Programming , 2004 .

[32]  Hridesh Rajan,et al.  Eos: instance-level aspects for integrated system design , 2003, ESEC/FSE-11.

[33]  Hridesh Rajan,et al.  Unifying aspect- and object-oriented design , 2009, TSEM.

[34]  Leslie Lamport,et al.  Time, clocks, and the ordering of events in a distributed system , 1978, CACM.

[35]  Hridesh Rajan A case for explicit join point models for aspect-oriented intermediate languages , 2007, VMIL.

[36]  Vivek Sarkar,et al.  X10: an object-oriented approach to non-uniform cluster computing , 2005, OOPSLA '05.

[37]  Gary T. Leavens,et al.  Ptolemy: A Language with Quantified, Typed Events , 2008, ECOOP.

[38]  Gregor Kiczales,et al.  D: A Language Framework for Distributed Programming , 1997 .