I have seen this article in two forms, one in IEEE Spectrum and once in Communications of the ACM. Both articles discuss issues with programming for multicore. The Spectrum article is an echo of the ACM article. The real meat is in the Communications of the ACM.
The article discusses problems, sets out application domains, and discusses what the PAR lab at Berkley is planning to do about each domain.
The listing of problems is accurate. The proposed solutions are not. Yes, we could all start building systems in Erlang or using a special C++ compiler that “really” understands how to make parallel code. David Patterson is an academic, his solution makes perfect sense. Lets do more research. Obviously large grants are needed to fund just this sort of project.
I have to agree with Patterson when he says:
Despite these reasons for hope, the odds are still against the microprocessor industry squarely completing its risky Hail Mary pass and finding some all-encompassing way to convert every piece of software to run on many parallel processors.
The conversion of the existing libraries to fully and wondrously fast parallel software is a pipe dream. Let’s throw it out then and make it an anti-requirement. The solution for multicore software does not have to be backwards compatible with legacy software, operating systems or libraries. There, I feel free. We now have a green field to build something new and really exciting.
What about using other languages? Are we assuming that C or C++ are the only answer? Erlang has been touted at the great savior for multiple processor systems. It makes some sense. I have read the getting started guides. The issue for me is that Erlange is a high level language. It runs on a Linux, or Windows OS. Search for Erlang Operating System. Not much there. Erlang processes are not exactly the same as threads or full Linux processes. Amdahl’s Law gets us. If the OS running under Erlang is not fully parallel, the whole thing craps out.
Patterson does not deal specifically with the “paralleling compiler”. It is one of the silver bullets that will allow existing systems to magically become multicore. I just do not believe it is possible. C and C++ are amazing and powerful languages. Any language that allows a broad range of solutions and styles for the same problem can not be easily translated for a completely new architecture. A wise friend would always remind me, “there is no such thing as portable code, only code that has been ported.” Typing make will not give us a perfect parallel program.
So, the new solution must use existing C or C++ compilers.
One article and it gave us two new requirements. Good progress.
- The solution for multicore software does not have to be backwards compatible with legacy software, operating systems or libraries.
- The new solution must use existing C or C++ compilers.