Heterogeneous computing is already here, and it will stay. Making the best use of it will require revisiting the whole computing stack. Programming models need to deal with productivity vs. performance. Compilers need to learn to use heterogeneous nodes. Operating systems must learn new tricks. Computer architects need to decide which nodes to put together to get the most effective machines, how to design the memory hierarchy, and how best to connect all these modules. Several challenges exist at the hardware level. The first is memory hierarchy. Another challenge at the hardware level is the interconnect. Yet another challenge is distributing the workload among the different cores to get the best performance with the lowest power consumption. At the software level, the situation is also very challenging. There are several considerations: how much hardware to reveal to the programmer, the measures of success, and the need for a new programming model (or language). Portability is another issue. If we are writing a niche program for a well-defined machine, then the first three measures are enough. But if we are writing a program for public use on many different heterogeneous computing machines, then we need to ensure portability.
ASJC Scopus subject areas
- Computer Science(all)