Models
We are all parallel thinkers.
Parallel programming can be a child’s play – as any child that has programmed with Squeak Etoys or StarLogo can attest. We believe that most parallel programming should not be “Computer Science”, but use simple, intuitive ways of expressing parallelism – ways that make sense for each application domain, and ways that avoid subtle synchronization bugs by design.
Tools
Simplicity is hard.
While parallel languages must become simpler, hardware is becoming more complex. To bridge this gap, we need tools of increased sophistication under the hood. Information and flexibility available at the programming level must be passed down and leveraged. Mappings must be dynamic, and use advanced optimization techniques to adapt to successive generations of chips. New tools must be developed to ensure efficiency and correctness of legacy and emerging code.
Execution
How does a millipede move its legs?
Future microprocessors will contain hundreds, and perhaps thousands of cores. Different cores may be specialized for different tasks; some cores may become defective over time, and power constraints will require a sophisticated management of computing resources. This complexity must be encapsulated to present a simple execution model to the software.
Applications
The end-goal: better applications
The world is rich in parallelism, as will be the client-focused applications of the future. Our success will be determined by the new applications we enable. We envision human-centric and environment-aware applications that will dramatically improve our quality of lives but are not feasible today. Conversational computing, tele-immersion, personal digital content creation, learning by reading – these will drive our unified vision spanning models, tools, and executions