5 research outputs found

    High-level compiler analysis for OpenMP

    Get PDF
    Nowadays, applications from dissimilar domains, such as high-performance computing and high-integrity systems, require levels of performance that can only be achieved by means of sophisticated heterogeneous architectures. However, the complex nature of such architectures hinders the production of efficient code at acceptable levels of time and cost. Moreover, the need for exploiting parallelism adds complications of its own (e.g., deadlocks, race conditions,...). In this context, compiler analysis is fundamental for optimizing parallel programs. There is however a trade-off between complexity and profit: low complexity analyses (e.g., reaching definitions) provide information that may be insufficient for many relevant transformations, and complex analyses based on mathematical representations (e.g., polyhedral model) give accurate results at a high computational cost. A range of parallel programming models providing different levels of programmability, performance and portability enable the exploitation of current architectures. However, OpenMP has proved many advantages over its competitors: 1) it delivers levels of performance comparable to highly tunable models such as CUDA and MPI, and better robustness than low level libraries such as Pthreads; 2) the extensions included in the latest specification meet the characteristics of current heterogeneous architectures (i.e., the coupling of a host processor to one or more accelerators, and the capability of expressing fine-grained, both structured and unstructured, and highly-dynamic task parallelism); 3) OpenMP is widely implemented by several chip (e.g., Kalray MPPA, Intel) and compiler (e.g., GNU, Intel) vendors; and 4) although currently the model lacks resiliency and reliability mechanisms, many works, including this thesis, pursue their introduction in the specification. This thesis addresses the study of compiler analysis techniques for OpenMP with two main purposes: 1) enhance the programmability and reliability of OpenMP, and 2) prove OpenMP as a suitable model to exploit parallelism in safety-critical domains. Particularly, the thesis focuses on the tasking model because it offers the flexibility to tackle the parallelization of algorithms with load imbalance, recursiveness and uncountable loop based kernels. Additionally, current works have proved the time-predictability of this model, shortening the distance towards its introduction in safety-critical domains. To enable the analysis of applications using the OpenMP tasking model, the first contribution of this thesis is the extension of a set of classic compiler techniques with support for OpenMP. As a basis for including reliability mechanisms, the second contribution consists of the development of a series of algorithms to statically detect situations involving OpenMP tasks, which may lead to a loss of performance, non-deterministic results or run-time failures. A well-known problem of parallel processing related to compilers is the static scheduling of a program represented by a directed graph. Although the literature is extensive in static scheduling techniques, the work related to the generation of the task graph at compile-time is very scant. Compilers are limited by the knowledge they can extract, which depends on the application and the programming model. The third contribution of this thesis is the generation of a predicated task dependency graph for OpenMP that can be interpreted by the runtime in such a way that the cost of solving dependences is reduced to the minimum. With the previous contributions as a basis for determining the functional safety of OpenMP, the final contribution of this thesis is the adaptation of OpenMP to the safety-critical domain considering two directions: 1) indicating how OpenMP can be safely used in such a domain, and 2) integrating OpenMP into Ada, a language widely used in the safety-critical domain.Actualment, aplicacions de dominis diversos com la computaci贸 d'altes prestacions i els sistemes d'alta integritat, requereixen nivells de rendiment assolibles nom茅s mitjan莽ant arquitectures heterog猫nies sofisticades. No obstant, la natura complexa d'aquestes dificulta la producci贸 de codi eficient en un temps i cost acceptables. A m茅s, la necessitat d鈥檈xplotar paral路lelisme introdueix complicacions en s铆 mateixa (p. ex. bloqueig mutu, condicions de carrera,...). En aquest context, l'an脿lisi de compiladors 茅s fonamental per optimitzar programes paral路lels. Existeix per貌 un equilibri entre complexitat i beneficis: la informaci贸 obtinguda amb an脿lisis simples (p. ex. definicions abastables) pot ser insuficient per moltes transformacions rellevants, i an脿lisis complexos basats en models matem脿tics (p. ex. model poli猫dric) faciliten resultats acurats a un alt cost computacional. Existeixen molts models de programaci贸 paral路lela que proporcionen diferents nivells de programabilitat, rendiment i portabilitat per l'explotaci贸 de les arquitectures actuals. En aquest marc, OpenMP ha demostrat molts avantatges respecte dels seus competidors: 1) el seu nivell de rendiment 茅s comparable a models molt ajustables com CUDA i MPI, i proporciona m茅s robustesa que llibreries de baix nivell com Pthreads; 2) les extensions que inclou la darrera especificaci贸 satisfan les caracter铆stiques de les actuals arquitectures heterog猫nies (茅s a dir, l鈥檃coblament d鈥檜n processador principal i un o m茅s acceleradors, i la capacitat d'expressar paral路lelisme de tasques de gra fi, ja sigui estructurat o sense estructura; 3) OpenMP 茅s 脿mpliament implementat per venedors de xips (p. ex. Kalray MPPA, Intel) i compiladors (p. ex. GNU, Intel); i 4) tot i que el model actual manca de mecanismes de resili猫ncia i fiabilitat, molts treballs, incloent aquesta tesi, busquen la seva introducci贸 a l'especificaci贸. Aquesta tesi adre莽a l'estudi de t猫cniques d鈥檃n脿lisi de compiladors amb dos objectius: 1) millorar la programabilitat i la fiabilitat de OpenMP, i 2) provar que OpenMP 茅s un model adequat per explotar paral路lelisme en sistemes cr铆tics. En particular, la tesi es centra en el model de tasques per qu猫 aquest ofereix la flexibilitat per abordar aplicacions amb problemes de balanceig de c脿rrega, recursivitat i bucles incomptables. A m茅s, treballs recents han provat la predictibilitat en q眉esti贸 de temps del model, escur莽ant la dist脿ncia cap a la seva introducci贸 en sistemes cr铆tics. Per a poder analitzar aplicacions que utilitzen el model de tasques d鈥橭penMP, la primera contribuci贸 d鈥檃questa tesi consisteix en l鈥檈xtensi贸 d'un conjunt de t猫cniques cl脿ssiques de compilaci贸 per suportar OpenMP. Com a base per incloure mecanismes de fiabilitat, la segona contribuci贸 consisteix en el desenvolupament duna s猫rie d'algorismes per detectar de forma est脿tica situacions que involucren tasques d鈥橭penMP, i que poden conduir a una p猫rdua de rendiment, resultats no deterministes, o fallades en temps d鈥檈xecuci贸. Un problema ben conegut del processament paral路lel relacionat amb els compiladors 茅s la planificaci贸 est脿tica d鈥檜n programa representat mitjan莽ant un graf dirigit. Tot i que la literatura sobre planificaci贸 est脿tica 茅s extensa, aquella relacionada amb la generaci贸 del graf en temps de compilaci贸 茅s molt escassa. Els compiladors estan limitats pel coneixement que poden extreure, que dep猫n de l鈥檃plicaci贸 i del model de programaci贸. La tercera contribuci贸 de la tesi 茅s la generaci贸 d鈥檜n graf de depend猫ncies enriquit que pot ser interpretat pel sistema en temps d鈥檈xecuci贸 de manera que el cost de resoldre les depend猫ncies sigui m铆nim. Amb les anteriors contribucions com a base per a determinar la seguretat funcional de OpenMP, la darrera contribuci贸 de la tesi consisteix en adaptar OpenMP a sistemes cr铆tics, explorant dues direccions: 1) indicar com OpenMP es pot utilitzar de forma segura en un domini com, i 2) integrar OpenMP en Ada, un llenguatge molt utilitzat en el domini de seguretat.Postprint (published version
    corecore