Posted by Rosa M. Badia 13 May 2009
While we already have had quite a bit of discussion about the Grid/Cloud buzz words, I would like to raise your attention on one more of these type of words: multicore. The forecast is to have thousands of cores in a chip. How will this impact the way we do computing? How will this impact the way we program? How will this impact grid and cloud computing?
With the objective of overcoming the three walls: the memory wall, the power wall and the ILP wall, the current trends in chip fabrication have led to placing more than one processor (from now on, core) in a chip. While manufacturers are now shipping chips with a few cores (at most 4-8 cores), the forecast is to include hundreds or thousands of them in a chip within a few years. What is more, while now only a few of these chips has an heterogeneous nature with a non traditional memory organization, like the controversial Cell chip, in the future the prediction is to have highly heterogeneous organizations in a chip, with complex memory hierarchies and different type of cores (like accelerators and GPUs).
The community is currently very excited with this new and performant chips, but also aware of the increasing complexity of software development in these platforms. While current programming methodologies can be used with up to 4-8 cores, new methods that enable the parallel execution of applications need to be devised. The pressure cannot be only on the programmers, but also on the programming models that should be able to abstract the underlying architecture, and even more enable, if possible, automatic parallelization and perform the required data transfers between different levels of the memory, all in a very dynamical fashion. Additionally, now more than ever we cannot expect programmers to tune and re-program their applications every time a new architecture appears, and therefore portability or the so called performance portability is a pre-requisite.
Having this in mind, there are several considerations to make with regard to Grid computing. The first is about programming: the principles that guided the research in programming the grid were very close, nor to say identical to the ones described above for multicore chips. The goals of programming models for the grid were: to be able to manage computing environments that are inherently parallel, distributed, heterogeneous and dynamic, both in terms of the resources involved and their performance. While it may be possible to build grid applications using established programming tools, they are not particularly well-suited to effectively manage flexible composition or deal with heterogeneous hierarchies of machines, data and networks with heterogeneous performance. Therefore, the experience of the research performed in the recent years in programming the grid can be applied to multi-core programming. Successful examples of this are environments like ProActive or GRID superscalar (GRIDSs, in the form of their siblings CellSs or SMPSs). Feedback from the groups that have done research on how to program the grid into standards such as OpenMP (with its current movement towards considering parallel tasks) and OpenCL (that considers the heterogeneity of the systems) can be key.
A second consideration is given that compute nodes will be much more powerful in the near future one can think that there would not be (or would be less) need for computational grids as we conceive them now, given that the fat local computing nodes will be enough to satisfy the needs of computing. There are even some voices that maintain that in fact there would be too much computing, and that the problem is to find applications that need it. However, my opinion is that we will continue to have a need for grids. These forthcoming grids will be grids of fatter nodes, but the community will be able to conceive applications that need this computing (we do not have to forget that, for example, some scientific communities that, like expanding gases fit all available space, are always able to consume all available cycles). An important consideration here that supports this idea is the fact that even considering a world with local computers, the data sources and communities will continue to be distributed. Therefore, the need for grids and grid software will remain.
Finally, how multi-cores will impact cloud computing? Similarly to grid computing, cloud computing will be enabled with fatter computing nodes. Also, and this applies also to grid computing, the cloud middleware will have to be adapted to consider the underlying multi-core hardware. Since most of cloud computing technology is based on virtualization, the key here is the enablement of this technology to multicore taking into account that these would be much more complex and heterogeneous. The new multicore platforms enable to host more than one instance of the operating system and the challenge now is how to perform the right dynamic resource management of the virtualized systems to meet the Service Level Agreements established with the end-users.
Thanks to Daniele Lezzi for discussion and comments.