Expressing Adaptivity and Context Awareness in the ASSISTANT Programming Model Carlo Bertolli, Daniele Buono, Gabriele Mencagli, and Marco Vanneschi Dept. of Computer Science, University of Pisa, Largo Pontecorvo 3, Pisa I-56127 Italy bertolli@di.unipi.it, WWW home page: http://www.di.unipi.it/bertolli Abstract. Pervasive Grid computing platforms are composed of a vari- ety of fixed and mobile nodes, interconnected through multiple wireless and wired network technologies. Pervasive Grid Applications must adapt themselves to the state of their surrounding environment (context), which includes the state of the resources on which they are executed. By fo- cusing on a specific instance of emergency management application, we show how a complex high-performance problem can be solved according to multiple parallelization methodologies. We introduce the ASSISTANT programming model which allows programmers to express multiple ver- sions of a same parallel module, each of them suitable for particular con- text situations. We show how the exemplified programs can be included in a single ASSISTANT parallel module and how their dynamic switch- ing can be expressed. We provide experimental results demonstrating the effectiveness of the approach. Key words: Adaptivity, Context Awareness, Parallel Programming, High-Performance Computing 1 Introduction Pervasive Grid computing platforms [15] are composed of a variety of fixed and mobile nodes, interconnected through multiple wireless and wired network tech- nologies. In these platforms the term context represents the state of logical and physical resources and of the surrounding environment (e.g. acquired by sensor data). An example of Pervasive Grid application is risk and emergency man- agement [4]. These applications include data- and compute-intensive processing (e.g. forecasting models) not only for off-line centralized activities, but also for on-line, real-time and decentralized ones: these computations must be able to provide prompt and best-effort information to mobile users. In general these applications are composed of multiple software modules interconnected in some graph structure (e.g. work- or data-flow). In abstract terms each module is re- sponsible for solving a specific sub-problem. Clearly, each problem can be solved according to different methods featuring different characteristics. They are suit- able for different parallelization techniques and optimized for being mapped onto different resources. For instance, a method can be optimized for the paralleliza- tion according to task farm instead of data parallel. These computations can also