We will effectively expand our applications coverage using the concept of a computational “dwarf,” which is a pattern of communication and computation common across a set of applications [Asanovic, Bodik et al. 2006]. Figure 4 is a temperature chart listing the dwarfs and shows their importance to each application. The Berkeley View team showed that 13 dwarfs cover six app areas (1st 6 columns of the figure), and while these 13 are not necessarily complete, they provide a set of essential computational patterns that systems must support. The dwarfs actually play 4 roles:
1. Dwarfs are not tied to code or language artifacts--these “anti-benchmarks” encourage innovation in algorithms, languages, data structures, and hardware;
2. They aid multidisciplinary discourse, in that they are simple enough and few enough so that members of all SIGs understand them and we can rely on them for communication;
3. They define patterns for creating frameworks and libraries reusable across application domains (see Section 3.3);
4. They decouple research, allowing analysis of programming support without waiting years for full application development.
A natural question is what happens if we try to decompose the five apps above into the 13 dwarfs? We found that all five apps mapped neatly onto existing dwarfs, as illustrated by the next five columns in Figure 4 (for the browser, we illustrate the core code; plug-ins could look quite different). We believe this mapping success is further strong evidence as to the effectiveness of the dwarfs.
Temperature Chart of the 13 Dwarfs. It shows their importance to each of the original six application areas and then how important each one is to the five compelling applications. More details on the dwarfs can be found in [Asanovic, Bodik et al. 2006].