El presente Trabajo Fin de Grado forma parte de un conjunto de cuatro TFGs propuestos por profesores del DATSI con objeto de desarrollar una herramienta que permita integrar programación paralela y programación distribuida en un único modelo basado en el lenguaje C. El modelo utiliza directivas de OpenMP ampliadas con otras relacionadas con MPI, formando lo que se ha denominado OMPD (OpenMP Distribuido). Dada la complejidad de esta propuesta, se planteó una distribución del desarrollo del proyecto global en cuatro subproyectos, cada uno de los cuales está encaminado a desarrollar e incorporar a OMPD un subconjunto de directivas de MPI asociadas a diferentes conceptos de este modelo de distribución de datos: 1-Definición de datos, 2-Reparto de iteraciones, 3-Envío de datos y 4-Recuperación de resultados. El presente TFG corresponde al primero de los indicados, que se encarga de desarrollar y documentar las declaraciones correspondientes a la definición de tipos de datos. Se utilizarán las herramientas Bison y Flex para el construir el parser y el scanner respectivamente, partiendo de un analizador de la arquitectura C99 de C y un analizador de OpenMP con gramática ampliada. Una primera etapa será la de crear y diseñar la tabla de símbolos, necesaria para registrar los tipos, tamaños y parámetros de las distintas variables y funciones. Posteriormente tendremos que incluir el manejo de la tabla de símbolos a la gramática. La siguiente etapa consistiría en traducir las directivas OMPD de definición de tipo de datos hacia MPI, asegurando la transparencia para el resto del código. Por último, se validará el funcionamiento correcto mediante varios ejemplos de pequeña entidad ajustados a las nuevas directivas. La meta no es la de mejorar la eficiencia de las aplicaciones paralelas, esto es algo que ya se logra con la combinación de OpenMP y MPI. OpenMPD es una extensión del lenguaje OpenMP diseñada para facilitar la programación en sistemas de memoria distribuida. Aunque MPI es el estándar para estos sistemas, su complejidad dificulta su uso. OpenMPD simplifica la paralelización mediante directivas simples y claras, similar a OpenMP, pero para entornos de memoria distribuida.
ABSTRACT
This Final Degree Project is part of a set of four TFGs proposed by professors from DATSI, aimed at developing a tool that integrates parallel and distributed programming into a single model based on the C language. The model uses OpenMP directives extended with those related to MPI, forming what has been termed OMPD (Distributed OpenMP). Given the complexity of this proposal, the overall project development was divided into four subprojects, each focused on developing and incorporating into OMPD a subset of MPI directives associated with different concepts of this data distribution model: 1-Data Definition, 2-Iteration Distribution, 3-Data Sending, and 4-Result Retrieval. This TFG corresponds to the first of the aforementioned subprojects, which is responsible for developing and documenting the declarations related to data type definitions. Bison and Flex tools will be used for building the parser and scanner, respectively, starting from a C99 architecture analyzer and an OpenMP analyzer with extended grammar. The initial stage involves creating and designing the symbol table, necessary for recording the types, sizes, and parameters of various variables and functions. Subsequently, the symbol table handling will be incorporated into the grammar. The next stage involves translating OMPD data type definition directives to MPI, ensuring transparency for the rest of the code. Finally, the correct functionality will be validated through several small-scale examples adjusted to the new directives. The goal is not to improve the efficiency of parallel applications, which is already achieved with the combination of OpenMP and MPI. OpenMPD is an extension of the OpenMP language designed to facilitate programming in distributed memory systems. Although MPI is the standard for these systems, its complexity makes it difficult to use. OpenMPD simplifies parallelization through simple and clear directives, similar to OpenMP, but for distributed memory environments.
El presente Trabajo Fin de Grado forma parte de un conjunto de cuatro TFGs propuestos por profesores del DATSI con objeto de desarrollar una herramienta que permita integrar programación paralela y programación distribuida en un único modelo basado en el lenguaje C. El modelo utiliza directivas de OpenMP ampliadas con otras relacionadas con MPI, formando lo que se ha denominado OMPD (OpenMP Distribuido). Dada la complejidad de esta propuesta, se planteó una distribución del desarrollo del proyecto global en cuatro subproyectos, cada uno de los cuales está encaminado a desarrollar e incorporar a OMPD un subconjunto de directivas de MPI asociadas a diferentes conceptos de este modelo de distribución de datos: 1-Definición de datos, 2-Reparto de iteraciones, 3-Envío de datos y 4-Recuperación de resultados. El presente TFG corresponde al primero de los indicados, que se encarga de desarrollar y documentar las declaraciones correspondientes a la definición de tipos de datos. Se utilizarán las herramientas Bison y Flex para el construir el parser y el scanner respectivamente, partiendo de un analizador de la arquitectura C99 de C y un analizador de OpenMP con gramática ampliada. Una primera etapa será la de crear y diseñar la tabla de símbolos, necesaria para registrar los tipos, tamaños y parámetros de las distintas variables y funciones. Posteriormente tendremos que incluir el manejo de la tabla de símbolos a la gramática. La siguiente etapa consistiría en traducir las directivas OMPD de definición de tipo de datos hacia MPI, asegurando la transparencia para el resto del código. Por último, se validará el funcionamiento correcto mediante varios ejemplos de pequeña entidad ajustados a las nuevas directivas. La meta no es la de mejorar la eficiencia de las aplicaciones paralelas, esto es algo que ya se logra con la combinación de OpenMP y MPI. OpenMPD es una extensión del lenguaje OpenMP diseñada para facilitar la programación en sistemas de memoria distribuida. Aunque MPI es el estándar para estos sistemas, su complejidad dificulta su uso. OpenMPD simplifica la paralelización mediante directivas simples y claras, similar a OpenMP, pero para entornos de memoria distribuida.
ABSTRACT
This Final Degree Project is part of a set of four TFGs proposed by professors from DATSI, aimed at developing a tool that integrates parallel and distributed programming into a single model based on the C language. The model uses OpenMP directives extended with those related to MPI, forming what has been termed OMPD (Distributed OpenMP). Given the complexity of this proposal, the overall project development was divided into four subprojects, each focused on developing and incorporating into OMPD a subset of MPI directives associated with different concepts of this data distribution model: 1-Data Definition, 2-Iteration Distribution, 3-Data Sending, and 4-Result Retrieval. This TFG corresponds to the first of the aforementioned subprojects, which is responsible for developing and documenting the declarations related to data type definitions. Bison and Flex tools will be used for building the parser and scanner, respectively, starting from a C99 architecture analyzer and an OpenMP analyzer with extended grammar. The initial stage involves creating and designing the symbol table, necessary for recording the types, sizes, and parameters of various variables and functions. Subsequently, the symbol table handling will be incorporated into the grammar. The next stage involves translating OMPD data type definition directives to MPI, ensuring transparency for the rest of the code. Finally, the correct functionality will be validated through several small-scale examples adjusted to the new directives. The goal is not to improve the efficiency of parallel applications, which is already achieved with the combination of OpenMP and MPI. OpenMPD is an extension of the OpenMP language designed to facilitate programming in distributed memory systems. Although MPI is the standard for these systems, its complexity makes it difficult to use. OpenMPD simplifies parallelization through simple and clear directives, similar to OpenMP, but for distributed memory environments. Read More