Building Scalable Software Systems in the Multicore Era

By: Hridesh Rajan

PDF Download Download Paper

Abstract

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.

ACM Reference

Rajan, H. 2010. Building Scalable Software Systems in the Multicore Era. Proceedings of the Workshop on Future of Software Engineering Research, FoSER, at the 18th ACM SIGSOFT International Symposium on Foundations of Software Engineering, Santa Fe, USA (2010), 293–298.

BibTeX Reference

@inproceedings{Rajan2010,
  author = {Hridesh Rajan},
  title = {Building Scalable Software Systems in the Multicore Era},
  booktitle = {Proceedings of the Workshop on Future of Software Engineering Research, FoSER, at the 18th ACM SIGSOFT International Symposium on Foundations of Software Engineering, Santa Fe, USA},
  pages = {293--298},
  year = {2010},
  publisher = {{ACM}},
  editor = {Gruia{-}Catalin Roman and Kevin J. Sullivan},
  doi = {10.1145/1882362.1882423},
  abstract = {
  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.},
}