Balancing Performance and Reliability in Software Components by Javier López-Gómez A dissertation submitted by in partial fulfillment of the requirements for the degreee of Doctor in Philosophy in Computer Science and Technology Universidad Carlos III de Madrid Advisors: José Daniel García Sánchez Javier Fernández Muñoz October 2020 This thesis is distributed under license “Creative Commons Attribution – Non Commercial – Non Derivatives”. A mis padres. To my parents. Acknowledgements Quiero dedicar esta página a recordar a aquellas personas que me han acom- pañado durante esta etapa y a las que, lamentablemente, no pudieron hacerlo. En primer lugar, a mis padres. Os debo todo lo que soy y seré. Gracias por el cuidado y educación recibidos, por los buenos (y malos) momentos, por aquellos días de piscina en Playa de Madrid, por las barbacoas en la Fundación del Lesionado Medular/ASPAYM Madrid, por las comidas en “La Bodeguita” y en el Centro Municipal de Mayores Ascao. Gracias a vosotros aprendí a ser fuerte. A mamá, porque me enseñaste lo más importante, a sonreir a pesar de la adversidad, y otras cosas de menor importancia, como mantener un hogar. A papá, por enseñarme gran parte de lo que sé, el equilibrio, e iluminarme el camino; aunque fuera de forma accidental, sin tí, mi vocación sería otra. Nunca os lo podré agradecer tanto como lo merecisteis. D.E.P. En segundo lugar, a mis compañeros de trabajo: Manu, Javi Doc, y David. Por todos los momentos compartidos en el laboratorio y fuera de él; por ayu- darme y presionarme para que trabajara. Sin vosotros, dudo que estuviera es- cribiendo estas líneas ahora. A mis compañeros de laboratorio: Guille, Mario, Javi Prieto, y José Cabrero, por las charlas y momentos de risa. A Alejan- dro Calderón, que siempre ha estado ahí para escucharme y echar una mano. A José Daniel, por darme la oportunadad de trabajar en el grupo y por estar ahí en los momentos difíciles que últimamente han acontecido. También a mis compañeros de trabajo del CERN: Enric, Stephan, Guilherme, Bertrand, Javi, Emmanouil “Manos”, y especialmente a Axel, Jakob y Pere, por acogerme en ROOT. No voy a terminar sin mencionar a las personas que siempre estuvieron ahí (no, no me olvido de vosotros): a mi hermano, a Úrsula, a mi tía Paloma y mi tío Matías, a mi primo “el niño”. A mis amigos: Rafa, Santi y Raquel, Dani “Rumi”, Jorge, David, Mayca, y Antonio “GPS”. También a los amigos de mi padre, que son parte de la familia: a Antonio y Dioni, Avelina “Veli”, Luis Miguel “Albert”, y aquellos que ya no están, Jaime Rojas y Luis Alfonso “Kiki”. ¡Gracias por acompañarme en el camino! Published and Submitted Content The following publications from the author have been included as part of this thesis: • Javier López-Gómez, Javier Fernández, David del Rio Astorga, Vassil Vas- silev, Axel Naumann, and J. Daniel García. «Relaxing the One Def- inition Rule in Interpreted C++». In: Proceedings of the 29th Inter- national Conference on Compiler Construction, Pages 212–222. DOI: 10.1145/3377555.3377901. – This publication is wholly included in this thesis in Chapter 3. – The material from this source included in this thesis is not singled out with typographic means and references. • Javier López-Gómez, David del Rio Astorga, Manuel F. Dolz, Javier Fer- nández, and Jose Daniel García. «Detecting semantic violations of lock- free data structures through C++ contracts». In: The Journal of Super- computing 76, 5057–5078 (2020). DOI: 10.1007/s11227-019-02827-4. – This publication is wholly included in this thesis in Chapter 4. – The material from this source included in this thesis is not singled out with typographic means and references. • Javier López-Gómez, Javier Fernández Muñoz, David del Rio Astorga, Manuel F. Dolz, J. Daniel García. «Exploring stream parallel patterns in distributed MPI environments». In: Parallel Computing, Volume 84, 2019, Pages 24–36. ISSN: 0167-8191. DOI: 10.1016/j.parco.2019.03.004. – This publication is wholly included in this thesis in Chapter 5. – The material from this source included in this thesis is not singled out with typographic means and references. vi Abstract Over the last few years, software complexity has grown exponentially followed by a rise in the number of reported defects. In general, the cost of detecting and mitigating a defect in a software system increases non-linearly as it progresses through the lifecycle of a project and may cause a substantial loss. Consequently, it is desirable to detect software defects as soon as possible with the aim of minimizing the associated costs. In this regard, design-by-contract aids in specifying assumptions made by a software component, both from the provider and consumer perspectives. Such specification enables the verification of the correct use of an interface. However, this methodology is under-used and may have other applications in software verification and optimization. While this may be true, software reliability can also be attained by properly hiding the complexity related to the use of low-level interfaces. Indeed, the development of distributed scientific applications that execute among multiple multi-core nodes poses several challenges compared to sequential programming. While the use of parallel pattern libraries is becoming popular, many distributed applications still rely directly on the MPI model. Additionally, while many organizations use C/C++ for the implementation of high-performance applications, it is not uncommon to see prototypes written in an interpreted language during the early stages. In some cases, bridging the gap between the prototype and the production software is attained by the use of a C/C++ interpreter. However, state-of-the-art interpreters still have some limitations. To tackle these issues, this thesis aims at reducing the number of software defects, either by detecting them or by avoiding the introduction of new prob- lems. This way, resulting programs have fewer defects, thus reducing the de- velopment efforts incurred by the debugging of large applications. In short, in this thesis, we contribute with the following. First, we introduce a prototype for contract based programming for the C++ programming language which is aligned with the latest proposals from the C++ standards committee. Second, we provide a framework that leverages C++ contracts to aid in the verification of concurrent shared-memory data structures. Third, we extend a generic par- allel pattern interface to enable porting a shared-memory parallel application to distributed-memory with minimum efforts. Finally, we provide a methodology to relax the one definition rule in C++ interpreters, thus allowing users to give vii viii ABSTRACT a new definition for a declaration. Evaluations show that these contributions help to reduce both, the presence of software defects and the required develop- ment efforts. Resumen Durante los últimos años, la complejidad del software ha crecido exponencial- mente seguido de un ascenso en el número de defectos informados. En general, el coste de detectar y mitigar un defecto en un sistema software aumenta de forma no-lineal al progresar a través del ciclo de vida de un proyecto, y puede causar una pérdida substancial. En consecuencia, es deseable detectar los de- fectos de software tan pronto como sea posible con el objetivo de minimizar el coste asociado. En este sentido, el diseño por contrato ayuda a especificar las asunciones hechas por un componente software desde ambas perspectivas, la del sumin- istrador y la del consumidor. Tales especificaciones permiten la verificación del uso correcto de una interfaz. Sin embargo, esta metodología está infrautilizada y puede tener otras aplicaciones en verificación y optimización de software. Por otro lado, la fiabilidad del software también puede conseguirse ocultando ade- cuadamente la complejidad derivada del uso de interfaces de bajo nivel. A este respecto, el desarrollo de aplicaciones científicas distribuidas que ejecuten en múltiples máquinas multi-núcleo plantea varios desafíos comparado con la pro- gramación secuencial. Aunque el uso de bibliotecas de patrones paralelos se está volviendo popular, algunas aplicaciones distribuidas aún confían directamente en el modelo MPI. Además, mientras que muchas organizaciones usan C/C++ para la implementación de aplicaciones de alto rendimiento, no es raro ver pro- totipos escritos en un lenguaje interpretado durante las primeras etapas de de- sarrollo. En algunos casos, el cierre de la brecha entre el prototipo y el software de producción se consigue con el uso de un intérprete de C/C++. Sin embargo, los últimos intérpretes aún tienen algunas limitaciones. Para abordar estas cuestiones, esta tesis busca reducir el número de defectos software, ya sea detectándolos o evitando la introducción de nuevos problemas. De esta manera, los programas resultantes tienen menos defectos, reduciendo así los esfuerzos de desarrollo y el tiempo de depuración de grandes aplicaciones. En resumen, esta tesis contribuye con lo siguiente. En primer lugar, se presenta un prototipo de soporte a la programación basada en contratos para el lenguaje C++, de acuerdo con las últimas propuestas del comité de normalización de di- cho lenguaje. En segundo lugar, se propone un marco de trabajo que aprovecha dicha característica para ayudar en la verificación de estructuras de datos con- currentes en memoria compartida. En tercer lugar, se extiende una interfaz ix x RESUMEN genérica de patrones paralelos que permite portar una aplicación paralela de memoria compartida al modelo de memoria distribuida con un esfuerzo mín- imo. Finalmente, se define una metodología para relajar la regla de definición única (ODR) en intérpretes de C++, permitiendo así que los usuarios puedan suministrar una nueva definición para una declaración. La evaluación demues- tra que estas contribuciones ayudan a reducir tanto la presencia de defectos en el software como el esfuerzo de desarrollo requerido. Contents Abstract vii Resumen ix 1 Introduction 1 1.1 Motivation .............................
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages137 Page
-
File Size-