Scaling For The Future (Of Hardware)
Its been obvious for quite some time now that multicore CPUs were the hope for expanding computing capacity now that upping clock speeds on chips has reached a point of diminishing returns. The unfortunate thing about this, as is bemoaned in this article is that the software industry is currently rubbish at supporting these future hardware environments.
For a number of decades commercial and open source software development has been squarely aimed at exploiting a single processor. Parallel processor machines, for a very long time, were expensive and general reserved for servers or machines support multiple users. This is all changing and software development is going to have to change to keep up.
Now I think I’ve mentioned before that there is niche opening up here for tool developers. Those who can provide libraries and facilities that simplify the process of exploiting multiple cores have the potential to make a serious amount of money, especially in the initial period during which software development is making the transition to multicore platforms (multicore system will eventually become so ubquitous that many of the capabilities and techniques that early pioneers provide will become run-of-the-mill).
There is, however, another perspective on this paradigm shift. The other place that will see the biggest impact from this change will be at the architectural level. Its here that the software architects will stop having to consider creating the monolithic applications of the past that were split internally into well defined threads. The problem with this model, as highlighted by the article, is that we generally don’t develop code that splits workload across multiple threads. Instead we tend to delegate responsibility for a specific task to a single thread.
This has generally worked well until now. It helps minimize issues of shared resources (as a single thread has responsibility for its domain, it can general be given read/write control for the data associated with the domain). The unfortunate truth is that, with more cores coming online, existing applications following this model will see little or no performance benefit. The future, as argued in the article, will require that we start writing software to be exploited by multiple cores simultaneously.
This is no easy task, but then again this isn’t a completely new field either. Threading has been around for some time and there were processes before that. I think the problem is that most software developers start out giving absolutely no consideration to scaling a task (in fact, in some cases, I think they don’t give sufficient consideration to task breakdown and separation of concerns, but thats another topic). This leads to architectural decisions that confine a task to a single thread. This is the mind set we’ve got to break if we’ve to exploit large number multicore hardware to its fullest extent.