Automatic Mapping of ASSIST Applications Using Process Algebra 1. Introduction a Grid System Is a Geographically Distributed
Total Page:16
File Type:pdf, Size:1020Kb
Automatic mapping of ASSIST applications using process algebra Marco Aldinucci Inst. of Information Science and Technologies – National Research Council (ISTI–CNR) Via Moruzzi 1, Pisa I-56100, Italy [email protected] and Anne Benoit School of Informatics, The University of Edinburgh Mayfield Road, Edinburgh EH9 3JZ, Scotland, UK [email protected] ABSTRACT One of the most promising technical innovations in present-day computing is the in- vention of grid technologies which harness the computational power of widely distributed collections of computers. However, the programming and optimisation burden of a low level approach to grid computing is clearly unacceptable for large scale, complex ap- plications. The development of grid applications can be simplified by using high-level programming environments. In the present work, we address the problem of the mapping of a high-level grid application onto the computational resources. In order to optimise the mapping of the application, we propose to automatically generate performance mod- els from the application using the process algebra PEPA. We target applications written with the high-level environment ASSIST, since the use of such a structured environment allows us to automate the study of the application more effectively. Our methodology is presented through an example of a classical Divide&Conquer algorithm, together with results which demonstrate the efficiency of this approach. Keywords: high-level parallel programming; ASSIST environment; Performance Eval- uation Process Algebra (PEPA); automatic model generation; Divide&Conquer. 1. Introduction A grid system is a geographically distributed collection of possibly parallel, in- terconnected processing elements, which all run some form of common grid mid- dleware (e.g. Globus services) [11]. The key idea behind grid-aware applications is to make use of the aggregate power of distributed resources, thus benefiting from a computing power that falls far beyond the current availability threshold in a single site. However, developing programs able to exploit this potential is highly program- mer intensive. Programmers must design concurrent programs that can execute on large-scale platforms that cannot be assumed to be homogeneous, secure, reliable or centrally managed. They must then implement these programs correctly and effi- ciently. As a result, in order to build efficient grid-aware applications, programmers have to address the classical problems of parallel computing as well as grid-specific Third Workshop on High-Level Parallel Programming and Applications ones: 1. Programming: code all the program details, take care about concurrency ex- ploitation, among the others: concurrent activities set up, mapping/scheduling, communication/synchronisation handling and data allocation; 2. Mapping & Deploying: deploy application processes accordingly to a suitable mapping onto grid platforms. These may be highly heterogeneous in architec- ture and performance. Moreover, they are organised in a cluster-of-clusters fashion, thus exhibiting different connectivity properties among each pairs of platforms. 3. Dynamic environment: manage resource unreliability and dynamic availabil- ity, network topology, latency and bandwidth unsteadiness. Hence, the number and quality of problems to be resolved in order to draw a given QoS (in term of performance, robustness, etc.) from grid-aware applications is quite large. The lesson learnt from parallel computing suggests that any low-level approach to grid programming is likely to raise the programmer’s burden to an unacceptable level for any real world application. Therefore, we envision a layered, high-level programming model for the grid, which is currently pursued by several research initiatives and programming environments, such as ASSIST [18], eSkel [7], GrADS [16], ProActive [4], Ibis [17]. In such an environment, most of the grid specific efforts are moved from programmers to grid tools and run-time systems. Thus, the programmers have only the responsibility of organising the application specific code, while the programming tools (i.e. the compiling tools and/or the run- time systems) deal with the interaction with the grid, through collective protocols and services [10]. In such a scenario, the QoS and performance constraints of the application can either be specified at compile time or varying at run-time. In both cases, the run-time system should actively operate in order to fulfil QoS requirements of the application, since any static resource assignment may violate QoS constraints due to the very uneven performance of grid resources over time. As an example, AS- SIST applications exploit an autonomic (self-optimisation) behaviour. They may be equipped with a QoS contract describing the degree of performance the appli- cation is required to provide. The ASSIST run-time tries to keep the QoS contract valid for the duration of the application run despite possible variations of platforms performance at the level of grid fabric [3]. The autonomic features of an ASSIST application rely heavily on run-time application monitoring, and thus they are not fully effective for application deployment since the application is not yet running. In order to deploy an application onto the grid, a suitable mapping of application processes onto grid platforms should be established, and this process is quite critical for application performance. In this paper we address this problem by defining a performance model of an ASSIST application in order to statically optimise the mapping of the application onto a heterogeneous environment. The model is generated from the source code of the application, before the initial mapping. It is expressed with the process Automatic mapping of ASSIST applications using process algebra algebra PEPA [13], designed for performance evaluation. The use of a stochastic model allows us to take into account aspects of uncertainty which are inherent to grid computing, and to use classical techniques of resolution based on Markov chains to obtain performance results. This static analysis of the application is complementary with the autonomic reconfiguration of ASSIST applications, which works on a dynamic basis. In this work we concentrate on the static part to optimise the mapping, while the dynamic management is done at run-time. It is thus an orthogonal but complementary approach. Structure of the paper. The next section introduces the ASSIST high-level pro- gramming environment and its run-time. Section 3 introduces the Performance Evaluation Process Algebra PEPA, which is used to model ASSIST applications (Section 4). These performance models help to optimise the mapping of the appli- cation. We illustrate our approach on the Data Mining C4.5 algorithm, and per- formance results are provided to show the effectiveness of this approach. Finally, concluding remarks are given in Section 5, as well as future work directions. 2. The ASSIST environment and its run-time support ASSIST (A Software System based on Integrated Skeleton Technology) is a pro- gramming environment aimed at the development of distributed high-performance applications [18,2]. ASSIST applications should be compiled in binary packages which can be deployed and run on grids, including those exhibiting heterogeneous platforms. Deployment and run is provided through standard middleware services (e.g. Globus) enriched with the ASSIST run-time support. 2.1. The ASSIST coordination language ASSIST applications are described by means of a coordination language, which can express arbitrary graphs of modules, interconnected by typed streams of data. Each stream realises a one-way asynchronous channel between two sets of endpoint modules: sources and sinks. Data items injected from sources are broadcast to all sinks. All data items injected into a stream should match stream type. Modules can be either sequential or parallel. A sequential module wraps a sequential function. A parallel module (parmod) can be used to describe the parallel execution of a number of sequential functions that are activated and run as Virtual Processes (VPs) on items arriving from input streams. The VPs may synchronise with the others through barriers. The sequential functions can be programmed by using a standard sequential language (C, C++, Fortran). A parmod may behave in a data-parallel (e.g. SPMD/for-all/apply-to-all) or task-parallel (e.g. farm) way and it may exploit a distributed shared state which survives to VPs lifespan. A module can nondeterministically accept from one or more input streams a number of input items, which may be decomposed in parts and used as function parameters to instantiate VPs according to the input and distribution rules specified in the parmod. The VPs may send items or parts of items onto the output streams, and Third Workshop on High-Level Parallel Programming and Applications these are gathered according to the output rules. An ASSIST application is sketched in Appendix A. We briefly describe here how to code an ASSIST application and its modules; more details on the particular application in Appendix A are given in Section 4.1. In lines 5–6 four streams with type task t are declared. Lines 7–10 define endpoints of streams. Overall, lines 4–11 define the application graph of modules. In lines 14–18 two sequential modules are declared: these simply provide a container for a sequential function invocation and the binding between streams and function parameters. In lines 21–56 two parmods are declared. Each parmod is characterised