UNIVERSIDAD DE MAGALLANES FACULTAD DE INGENIERÍA DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN. Cálculo de Índice de Similidud Estructural



Documentos relacionados
4. Programación Paralela

Capítulo 5. Cliente-Servidor.

LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN

"Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios

PRACTICA NO.24: CLUSTER

Trabajo TICO Unidad 2: Sistemas Operativos. Guillermo Jarne Bueno.

computadoras que tienen este servicio instalado se pueden publicar páginas web tanto local como remotamente.

Arquitectura de sistema de alta disponibilidad

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS

Introducción a la Firma Electrónica en MIDAS

Sistemas Operativos Windows 2000

Vielka Mari Utate Tineo Instituto Tecnológico de las Américas ITLA. Profesor José Doñé PRATICA NO. 24, CLUSTER

Nicolás Zarco Arquitectura Avanzada 2 Cuatrimestre 2011

DISCOS RAID. Se considera que todos los discos físicos tienen la misma capacidad, y de no ser así, en el que sea mayor se desperdicia la diferencia.

1.1 EL ESTUDIO TÉCNICO

Guía de uso del Cloud Datacenter de acens

Entre los más conocidos editores con interfaz de desarrollo tenemos:

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

CAPITULO IV. HERRAMIENTAS DE CÓDIGO ABIERTO

Decisión: Indican puntos en que se toman decisiones: sí o no, o se verifica una actividad del flujo grama.

CAPÍTULO 1 Instrumentación Virtual

Utilización del sistema operativo GNU/ Linux en las netbooks

Fundamentos del diseño 3ª edición (2002)

SISTEMAS DE INFORMACIÓN II TEORÍA

Microsoft Office 2010 Illustrated. Tipos de Software


Utilidades de la base de datos

App para realizar consultas al Sistema de Información Estadística de Castilla y León

Arquitectura: Clusters

CI Politécnico Estella

Maxpho Commerce 11. Gestión CSV. Fecha: 20 Septiembre 2011 Versión : 1.1 Autor: Maxpho Ltd

Adelacu Ltda. Fono Graballo+ Agosto de Graballo+ - Descripción funcional - 1 -

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática

CAPÍTULO 3 VISUAL BASIC

No se requiere que los discos sean del mismo tamaño ya que el objetivo es solamente adjuntar discos.

Capítulo 1 Documentos HTML5

Introducción a las redes de computadores

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:

Bases de datos en Excel

CAPÍTULO 2 Sistemas De Base De Datos Multiusuarios

Workflows? Sí, cuántos quiere?


SEGURIDAD Y PROTECCION DE FICHEROS


Novedades en Q-flow 3.02

SCT Software para la calibración de transductores de fuerza. Versión 3.5. Microtest S.A.

Unidad III. Software para la administración de proyectos.

Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El Hardware y el Software.

La Pirámide de Solución de TriActive TRICENTER

Alumna: Adriana Elizabeth Mendoza Martínez. Grupo: 303. P.S.P. Miriam De La Rosa Díaz. Carrera: PTB. en Informática 3er Semestre.

Módulos: Módulo 1. Hardware & Arquitectura de sistemas - 20 Horas

Tema: INSTALACIÓN Y PARTICIONAMIENTO DE DISCOS DUROS.

UNIVERSIDAD DE SALAMANCA

CAPÍTULO I. Sistemas de Control Distribuido (SCD).

Entidad Formadora: Plan Local De Formación Convocatoria 2010

Informática 4º ESO Tema 1: Sistemas Informáticos. Sistemas Operativos (Parte 2)

Análisis de los datos

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE

Ingeniería de Software. Pruebas

Sistema de marketing de proximidad

Capítulo I. Definición del problema y objetivos de la tesis. En la actualidad Internet se ha convertido en una herramienta necesaria para todas

IES Abyla. Departamento de Informática. Sistemas Operativos

CAPITULO 4. Requerimientos, Análisis y Diseño. El presente capítulo explica los pasos que se realizaron antes de implementar

Capítulo 12: Indexación y asociación

Capítulo VI. Conclusiones. En este capítulo abordaremos la comparación de las características principales y

PROYECTOS, FORMULACIÓN Y CRITERIOS DE EVALUACIÓN

ADMINISTRACIÓN CENTRALIZADA DELL POWERVAULT DL2000 CON TECNOLOGÍA SYMANTEC

Guia para examen de Sistemas Operativos Para primer parcial Febrero 2013 Revisión 2 Ing. Julio Cesar Gonzalez Cervantes

Tema 4. Gestión de entrada/salida

Figura 1. Símbolo que representa una ALU. El sentido y la funcionalidad de las señales de la ALU de la Figura 1 es el siguiente:

I INTRODUCCIÓN. 1.1 Objetivos

INFORMÁTICA IE. Términos a conocer y conceptos básicos. World Wide Web (WWW):

Formularios. Formularios Diapositiva 1

Capítulo 4. Requisitos del modelo para la mejora de la calidad de código fuente

K2BIM Plan de Investigación - Comparación de herramientas para la parametrización asistida de ERP Versión 1.2

Sistema de SaaS (Software as a Service) para centros educativos

QUERCUS PRESUPUESTOS MANUAL DEL USO

BASES DE DATOS OFIMÁTICAS

Resolución de problemas en paralelo

Software Computacional y su clasificación

Desarrollo de un cluster computacional para la compilación de. algoritmos en paralelo en el Observatorio Astronómico.

Studium, Campus Virtual de la Universidad de Salamanca.

Resumen ÁREA DE FACTURACIÓN::INFORMES::Pedidos Detalle Resumen ÁREA DE

Oficina Online. Manual del administrador

Procesos. Bibliografía. Threads y procesos. Definiciones

GUÍA Nro. 1 TECNOLOGÍA DE INTERNET. TIII PIII

Emerson Network Energy Center, ENEC Lite, es. Multilenguaje. Navegación intuitiva. Multiusuario. Seguridad. Mantenimiento y control

GLOSARIO. Arquitectura: Funcionamiento, estructura y diseño de una plataforma de desarrollo.

Soluciones innovadoras para optimizar su infraestructura TI. Virtualización con el sistema operativo i, PowerVM y Power Systems de IBM

CONCEPTOS BASICOS. Febrero 2003 Página - 1/10

forma de entrenar a la nuerona en su aprendizaje.

Presentaciones. Con el estudio de esta Unidad pretendemos alcanzar los siguientes objetivos:

1 GLOSARIO. Actor: Es un consumidor (usa) del servicio (persona, sistema o servicio).

TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

Microsoft Dynamics Sure Step Fundamentos

MACROS. Automatizar tareas a través del uso de las macros.

Microsoft Access proporciona dos métodos para crear una Base de datos.

Transcripción:

UNIVERSIDAD DE MAGALLANES FACULTAD DE INGENIERÍA DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN Cálculo de Índice de Similidud Estructural Manuel Cruz Pillancari 2010

La presente Memoria de Titulación ha sido aprobada con la siguiente calificación: Manuel Cruz Pillancari Memoria : Exámen de Título : Nota Final : Sr. Eduardo Peña Jaramillo Director Departamento De Ingeniería en Computación 21 de diciembre de 2010.

UNIVERSIDAD DE MAGALLANES FACULTAD DE INGENIERÍA DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN Cálculo de Índice de Similidud Estructural Trabajo de titulación presentado en conformidad a los requisitos para obtener el título de Ingeniero Civil en Computación e Informática. Profesor Guía: Sr. Dr. Pedro Alberti Villalobos. Profesor Co-Guía: Sr. Dr. Sergio Soza Amigo. Manuel Cruz Pillancari 2010

A mis padres, Manuel y Ana

Resumen Este trabajo tiene como finalidad la de resolver el problema del Cálculo de Índice de Similitud Estructural, el cual tiene relación con el área económica, por medio del diseño e implementación de un algoritmo paralelo que permita la optimización del tiempo de ejecución del problema a resolver. Para dar solución al problema antes mencionado se optó por utilizar un modelo de memoria compartida y para trabajar en esta arquitectura de computación paralela, se utilizó la tecnología multi-núcleo utilizando la librería de programación OpenMP, con lo que en el fondo se logra distribuir las operaciones necesarias para resolver el problema de índice de similitud estructural, entre los distintos núcleos disponibles de la máquina utilizada y de esta manera que estos cálculos puedan ser realizados de manera simultánea. También se puede mencionar que la aplicación desarrollada permitirá presentar los resultados obtenidos sobre la similitud estructural encontrada, para su posterior interpretación y análisis en lo relativo a esta temática. i

Índice general I. Introducción 1 1.1. Objetivos..................................... 2 1.1.1. Objetivo General............................. 2 1.1.2. Objetivos Específicos........................... 2 1.2. Descripción de los Capítulos........................... 2 II. Marco Teórico 4 2.1. Computación Paralela.............................. 5 2.1.1. Clasificación de Arquitecturas Paralelas................. 5 2.1.2. Modelos de Comunicación........................ 6 2.1.3. Aplicaciones de la Computación Paralela................ 7 2.1.4. Librerías para Computación Paralela.................. 8 2.1.5. Teoría de Algoritmos Paralelos...................... 10 2.1.6. Factores que Afectan a la Computación en Paralelo.......... 12 ii

2.1.7. Cluster de Computadores........................ 13 2.2. Análisis Input-Output.............................. 17 2.2.1. Modelo de Input-Output......................... 17 2.2.2. Matrices de Coeficientes Técnicos.................... 19 2.2.3. Indicador de Lemasne.......................... 20 III. Desarrollo 22 3.1. Comparativa entre Memoria Distribuida y Compartida.................................... 23 3.2. Librería OpenMP................................. 25 3.2.1. Directivas................................. 26 3.2.2. Funciones................................. 26 3.3. Herramientas de Programación......................... 27 3.3.1. Lenguajes de Programación....................... 27 3.3.2. Diseñador de Interfaz Gráfica...................... 29 3.4. Aplicaciones de Prueba.............................. 30 3.4.1. Utilizando OpenMP........................... 30 3.4.2. Utilizando Perl.............................. 33 3.4.3. Utilizando Glade............................. 35 3.5. Construcción de la Aplicación.......................... 37 3.5.1. Entrada de Datos............................. 38 iii

3.5.2. Cálculo de Similitud Estructural..................... 38 3.5.3. Salida de Datos.............................. 42 3.5.4. Menú de la Aplicación.......................... 44 3.6. Pruebas...................................... 46 3.6.1. Equipo Computacional.......................... 46 3.6.2. Pruebas para Matrices de Coeficientes................. 47 3.6.3. Pruebas para Indicador de Lemasne................... 53 IV. Conclusión 57 4.1. Conclusión..................................... 58 4.2. Trabajos Futuros................................. 59 A. Módulos de Perl 60 A.1. Instalación de Módulos de Perl......................... 61 B. Manual de Usuario 62 B.1. Formato de Entrada............................... 63 B.2. Ventana de Entrada................................ 64

Índice de figuras 2.1. Modelo de Memoria Distribuida......................... 6 2.2. Modelo de Memoria Compartida......................... 7 2.3. Cluster de Computadores............................. 13 3.1. Modelo Fork-Join................................. 25 3.2. Código Fuente del Programa prueba.c...................... 31 3.3. Ejecución del Programa prueba.c........................ 31 3.4. Código Fuente del Programa for.c........................ 32 3.5. Ejecución del Programa for.c........................... 33 3.6. Código que permite leer datos en archivo excel................. 34 3.7. Código que permite escribir datos en archivo excel............... 35 3.8. Ventana realizada con el programa Glade.................... 36 3.9. Diagrama de Bloques de la Aplicación..................... 37 3.10. Formato de tabla Input-Output utilizada.................... 38 3.11. Diagrama para la obtención de Matriz asociada a la Producción....... 39 v

3.12. Diagrama para la obtención de Matriz asociada a la Distribución....... 40 3.13. Diagrama para la obtención del Indicador de Lemasne............. 42 3.14. Indicador de Lemasne de Similitud Global con funciones de Producción... 43 3.15. Indicador de Lemasne de Similitud Global con funciones de Distribución.. 43 3.16. Matriz de diferencias asociada a las funciones de Producción......... 44 3.17. Matriz de diferencias asociada a las funciones de Distribución........ 44 3.18. Interfáz Gráfica de la Aplicación......................... 45 3.19. Gráfico Matrices de Producción......................... 47 3.20. Gráfico Speedup Matrices de Producción.................... 49 3.21. Gráfico Matrices de Distribución......................... 50 3.22. Gráfico Speedup Matrices de Distribución................... 52 3.23. Gráfico Indicador de Lemasne.......................... 53 3.24. Gráfico Speedup Indicador de Lemasne..................... 55 A.1. Instalación Módulo de Perl............................ 61 B.1. Archivo Excel con los Datos de Entrada.................... 63 B.2. Ventana de Entrada................................ 64

Índice de tablas 2.1. Tabla de Input-Output.............................. 18 3.1. Tiempos (en milisegundos) obtenidos en Matrices de Producción....... 48 3.2. Speedup obtenido en Matrices de Producción.................. 49 3.3. Tiempos (en milisegundos) obtenidos en Matrices de Distribución...... 51 3.4. Speedup obtenido en Matrices de Distribución................. 52 3.5. Tiempos (en milisegundos) obtenidos con el Indicador de Lemasne...... 54 3.6. Speedup obtenido en Indicador de Lemasne.................. 55

Capítulo I Introducción Fundamentalmente este trabajo de título se enfoca en el desarrollo e implementación de un algoritmo paralelo, para dar solución al problema del Cálculo de Índice de Similitud Estructural. Con respecto al Cálculo de Similitud Estructural se puede mencionar que tiene como objetivo la detección de los parecidos que presentan las distintas economías y también permite observar qué economía es más o menos desarrollada en términos de su estructura económica. Para calcular este índice de similitud se realiza por medio del indicador que propuso Le Masne, el cual permite obtener las semejanzas que presenten las diversas economías analizadas. Para la realización de este trabajo primeramente se realizó un análisis sobre los distintos modelos y alternativas de computación paralela existentes. Para posteriormente seleccionar uno de ellos y continuar con el análisis y diseño del algortimo a desarrollar. Una vez terminada la implementación del algoritmo paralelo se realizaron las pruebas correspondientes, para poder evaluar en base a diferentes métricas de rendimiento, el desempeńo del algoritmo realizado.

CAPÍTULO I. INTRODUCCIÓN 2 1.1. Objetivos 1.1.1. Objetivo General Realizar un algoritmo paralelo que permita resolver el problema de Cálculo de Similitud Estructural y además minimizar el tiempo de ejecución al realizar estas operaciones. 1.1.2. Objetivos Específicos Los objetivos específicos son los siguientes: Investigar y estudiar sobre el área de análisis input-output, con el fin de entender con mayor claridad el problema a resolver. Analizar los distintos modelos y alternativas de sistemas de computación paralela para llevar a cabo la implementación del algoritmo. Conocer y analizar la teoría asociada a la construcción de algoritmos Paralelos. Implementación y realización de pruebas sobre el algoritmo propuesto. 1.2. Descripción de los Capítulos La estructura de este Trabajo de Título se describe a continuación: Capítulo I: En esta sección se realiza una introducción del proyecto a desarrollar, indicando los objetivos tanto generales como específicos a alcanzar. Capítulo II: Corresponde al marco teórico del proyecto, se entregarán aquellos conceptos relacionados con la Computación Paralela y el Análisis Input-Output, con el fin de aportar los conocimientos necesarios para abordar el tema de estudio.

CAPÍTULO I. INTRODUCCIÓN 3 Capítulo III: Se muestra principalmente cómo se realizó la construcción del algoritmo paralelo y las pruebas respectivas para evaluar el rendimiento del algoritmo realizado. Capítulo IV: En este capítulo se encuentran las conclusiones respectivas de este proyecto de título y además se mencionan algunos trabajos futuros que pueden llevarse a cabo.

Capítulo II Marco Teórico

CAPÍTULO II. MARCO TEÓRICO 5 2.1. Computación Paralela La computación paralela es una técnica de programación en la que muchas instrucciones se ejecutan simultáneamente. Se basa en el principio de que los problemas grandes se pueden dividir en partes más pequeñas que pueden resolverse de forma concurrente (en paralelo). Existen varios tipos de computación paralela: paralelismo a nivel de bit, paralelismo a nivel de instrucción, paralelismo de datos y paralelismo de tareas. Durante muchos años, la computación paralela se ha aplicado en la computación de altas prestaciones, pero el interés en ella ha aumentado en los últimos años debido a las restricciones físicas que impiden el escalado en frecuencia. Los programas para computadores paralelos son más difíciles de escribir que los secuenciales porque la concurrencia introduce nuevos tipos de errores de software, siendo las condiciones de carrera las más comunes. La comunicación y la sincronización entre las diferentes subtareas son típicamente las grandes barreras para conseguir un buen rendimiento de los programas paralelos. 2.1.1. Clasificación de Arquitecturas Paralelas En 1966, Flynn propuso una clasificación de arquitecturas de computadoras: S=Single, I=Instruction (o programa), M=Multiple, D=Data stream (secuencia de datos) SISD: Corresponde a uniprocesadores, se ejecuta un sólo flujo de instrucciones, para operar sobre datos almacenados en una única memoria. SIMD: Instrucciones o programas que se aplican simultáneamente a muchos datos. Ejemplos son procesadores vectoriales y Graphical Processing Units (GPUs).

CAPÍTULO II. MARCO TEÓRICO 6 MISD: Diferentes instrucciones operan sobre los mismos datos en paralelo. Arquitecturas no muy comunes. Usadas generalmente para proveer redundancia de hardware para aumentar la confiabilidad. Ejemplos: computador de transbordador espacial. MIMD: Diferentes instrucciones actuando simultáneamente sobre diferentes datos. Esta es la arquitectura típica de un multiprocesador. 2.1.2. Modelos de Comunicación Los procesadores pueden comunicarse de diferentes formas. Los modelos mas usados son: Memoria Distribuida Existe un mecanismo de comunicación entre procesadores. Este mecanismo generalmente toma la forma de instrucciones del tipo send y receive. Estas instrucciones requieren de algunas otras adicionales como por ejemplo identificación inequívoca de procesadores y del número de procesadores existentes. Figura 2.1: Modelo de Memoria Distribuida

CAPÍTULO II. MARCO TEÓRICO 7 Memoria Compartida Todos los procesadores acceden a una memoria común por lo cual se rehúsan los mecanismos que se encuentran en un uniprocesador. Los procesadores además pueden tener memoria local, es decir una memoria privada para cada procesador. La memoria compartida por todos los procesadores generalmente se denomina memoria global. Figura 2.2: Modelo de Memoria Compartida 2.1.3. Aplicaciones de la Computación Paralela Los avances en el área computacional y en especial en el poder de procesamiento de los computadores ha permitido la aparición de nuevos dominios de aplicación en el ámbito de la computación paraleala. Algunos de los principales dominios de aplicación son: Ingeniería y diseño: sistemas con altos requerimientos de cálculo numérico para simulación de sistemas físicos como dinámica de fluidos (ej: aerodinámica), diseño de circuitos electrónicos, análisis de estructuras, etc. Computación científica: aplicaciones en bioinformática como secuenciación de genes, diseño y análisis de estructuras de genes y proteínas, diseño de drogas, etc. Aplicaciones en áreas de la física y la química permiten el desarrollo de nuevos materiales. Simulaciones de la atmósfera permiten a los meteorólogos realizar predicciones del tiempo.

CAPÍTULO II. MARCO TEÓRICO 8 Aplicaciones comerciales: los grandes volúmenes de datos y transacciones que requieren algunas organizaciones, generalmente con aplicaciones en Internet. Ejemplos: Google, Amazon, etc. Ciencias de la Computación: herramientas de análisis de programas, como modelchecking y deducción automática requieren de un gran poder computacional para poder aplicarse a sistemas reales. Entretenimiento: la industria de juegos y realidad virtual desarrollan aplicaciones con altos requerimientos de procesamiento numérico y gráfico. A menudo existen requerimientos de tiempo real (ej: animación). La industria del cine animado ha requerido soluciones que sólo pueden ser resueltas por aplicaciones paralelas. 2.1.4. Librerías para Computación Paralela MPI (Interfaz de Paso de Mensajes) Es un estándar que define la sintaxis y la semántica de las funciones contenidas en una biblioteca de paso de mensajes diseñada para ser usada en programas que exploten la existencia de múltiples procesadores. El esquema de pase de mensajes está basado en la suposición de que cada proceso tiene una memoria local privada, y que puede comunicarse con los otros procesos a través de la transferencia de mensajes. La mayoría de las implementaciones de MPI se realizan en una combinación de C, C++ y el lenguaje ensamblador. Sin embargo, el idioma y la aplicación de usuario final son, en principio, siempre desasociado.

CAPÍTULO II. MARCO TEÓRICO 9 PVM (Máquina Virtual Paralela) La Máquina Virtual Paralela (conocida como PVM por sus siglas en inglés de Parallel Virtual Machine) es una biblioteca para el cómputo paralelo en un sistema distribuido de computadores. Está diseñado para permitir que una red de computadores heterogénea comparta sus recursos de cómputo (como el procesador y la memoria RAM) con el fin de aprovechar esto para disminuir el tiempo de ejecución de un programa al distribuir la carga de trabajo en varios computadores. La biblioteca PVM fue desarrollada por la Universidad de Tennessee, el Laboratorio Nacional Oak Ridge y la Universidad Emory. La primera versión fue escrita en ORNL en 1989, y después de ser modificado por la Universidad de Tennessee, fue lanzada la versión 2 en marzo de 1991. La versión 3 fue lanzada en marzo de 1993 con mejoras en la tolerancia a fallas y portabilidad. OpenMP Es una interfaz de programación de aplicaciones (API) para la programación multiproceso de memoria compartida en múltiples plataformas. Permite añadir concurrencia a los programas escritos en C, C++ y Fortran sobre la base del modelo de ejecución fork-join. Está disponible en muchas arquitecturas, incluidas las plataformas de Unix y de Microsoft Windows. Se compone de un conjunto de directivas de compilador, rutinas de biblioteca, y variables de entorno que influencian el comportamiento en tiempo de ejecución. OpenMP es un modelo de programación portable y escalable que proporciona a los programadores una interfaz simple y flexible para el desarrollo de aplicaciones paralelas para las plataformas que van desde las computadoras de escritorio hasta las supercomputadoras.

CAPÍTULO II. MARCO TEÓRICO 10 POSIX Threads La librería de hilos POSIX (que significa Portable Operating System Interface for Unix) es una API para C/C++. La cual permite generar un nuevo flujo de procesos concurrentes. Es más efectivo en multi-procesadores o sistemas multi-núcleo, donde el flujo del proceso programado pueda ejecutarse en otro núcleo o procesador por lo que se estaría ganando velocidad a través del procesamiento paralelo o distribuido. Todos los hilos dentro de un proceso comparten el mismo espacio de direcciones. Un hilo se genera mediante la definición de una función y sus argumentos que serán tratados en el hilo. El propósito de utilizar la libería de hilos POSIX en el desarrollo de software es para minimizar el tiempo de ejecución de la aplicación. 2.1.5. Teoría de Algoritmos Paralelos Método de Diseño de Algoritmos Paralelos Par el desarrollo de algoritmos paralelos, generalmente se parte desde un algoritmo secuencial, sobre el cual se realizan diferentes tipos de descomposiciones, para luego llegar a hacer un análisis del algoritmo obtenido. El método más comúnmente usado en el proceso de desarrollo de algoritmos paralelos se basa en la realización de los siguientes cuatro pasos: Descomposición: Particionado del algoritmo secuencial en diferentes piezas o tareas. Comunicación: Definición de cómo serán los patrones de comunicación entre las tareas. Aglomeración: Combinación de tareas en tareas compuestas, con el objetivo de minimizar la comunicación y lograr un mayor rendimiento. Mapping: Asignación de tareas a procesos o procesadores del sistema de computación.

CAPÍTULO II. MARCO TEÓRICO 11 Medidas de Rendiemiento de Programas Paralelos A continuación se presentarán algunas definiciones útiles de medidas de rendimiento que podrán ser usadas para hacer un análisis de rendimiento teórico en el proceso de desarrollo o análisis de programas paralelos. Aceleración (speedup): Donde: S = T s /T p (2.1) T s representa el tiempo del algoritmo secuencial. T p representa el tiempo del algoritmo paralelo. Teóricamente, la aceleración S nunca puede execeder el número de procesos. La aceleración ideal es p, aunque difícilmente alcanzable en la práctica debido a que las tareas paralelas realizan cómputos extras o sufren esperas para lograr sincronizarse y/o comunicarse. Eficiencia: Donde: E = S/p (2.2) S es la aceleración o Speedup. p representa el número de procesadores. La eficiencia es un valor, por lo general entre cero y uno, que representa una estimación de la utilización correcta de los procesadores en la solución del problema, en comparación con el gran esfuerzo que se desperdicia en la comunicación y sincronización.

CAPÍTULO II. MARCO TEÓRICO 12 Escalabilidad La escalabilidad es la propiedad que tienen algunos algoritmos de mantener constante la eficiencia al aumentar el número de procesadores, aunque para ello haya que aumentar el tamaño del problema. Dicho en terminos simples, se dirá que un problema es escalable si al aumentar el número de procesadores empleados para resolverlo, el hecho de incrementar el tamaño del problema se logra que todos sigan teniendo trabajo, de forma que se mantenga la eficiencia. La escalabilidad responde a la pregunta de si se puede aprovechar la potencia aportada al aumentar el número de procesadores, aunque para ello haya que aumentar el problema. Si un problema no es escalable, aunque se aumente el número de procesadores, no se conseguirá incrementar ni mantener la eficiencia, con lo que cada vez se irá aprovechando menos la potencia de los procesadores. 2.1.6. Factores que Afectan a la Computación en Paralelo La forma de programar en máquinas paralelas es dependiente del tipo de plataforma de que se trate. En cualquiera de ellas, sin embargo, es muy importante maximizar la reutilización de los datos mas cercanos al procesador, tener en cuenta la jerarquía de memorias, al igual que se hace en computación secuencial. En la computación en paralelo, juegan un papel fundamental las redes de interconexión. Especialmente, en el caso de los cluster de computadores con memoria distribuida en que aparecen mensajes que pueden ser de longitud variable, características de la red como la latencia (tiempo de establecimiento de la comunicación) o la tasa de transmisión afectan directamente a las prestaciones de los programas paralelos ejecutados en esas máquinas. Tambien puede ocurrir la situación en la que el tiempo de latencia sea muy alto, aunque una vez establecida la comunicación, la tasa de envío del mensaje sea rápida. En estos casos, un programa paralelo de grano fino tendra unas malas prestaciones. Habrá que utilizar programas de grano grueso (muchas operaciones entre comunicaciones, aunque estas comunica-

CAPÍTULO II. MARCO TEÓRICO 13 ciones sean de más datos). Otro de los factores, muy importante, que afecta a las prestaciones de los programas paralelos es la distribución de los datos. La forma en que los datos estén distribuidos entre los diferentes procesadores, marcará en gran medida las comunicaciones que haran falta durante el programa, y entre qué procesadores. Por lo general, convendrá repartir los datos uniformemente entre todos los procesadores, porque esto suele suponer una distribución equilibrada de la carga. 2.1.7. Cluster de Computadores El término se aplica a un conjunto de computadores construidos mediante la utilización de componentes de hardware comunes y que se comportan como si fuesen un único computador. Figura 2.3: Cluster de Computadores

CAPÍTULO II. MARCO TEÓRICO 14 De un cluster se espera que presente combinaciones de los siguientes servicios: Alto rendimiento Alta disponibilidad Balanceo de carga Escalabilidad La construcción de los computadores del cluster es más fácil y económica debido a su flexibilidad: pueden tener todos la misma configuración de hardware y sistema operativo (cluster homogéneo), diferente rendimiento pero con arquitecturas y sistemas operativos similares (cluster semi-homogéneo), o tener diferente hardware y sistema operativo (cluster heterogéneo), lo que hace más fácil y económica su construcción. Para que un cluster funcione como tal, no basta solo con conectar entre sí los computadores, sino que es necesario proveer un sistema de manejo del cluster, el cual se encargue de interactuar con el usuario y los procesos que corren en él para optimizar el funcionamiento. Clasificación de los Clusters Alto rendimiento: Son clusters en los cuales se ejecutan tareas que requieren de gran capacidad computacional, grandes cantidades de memoria, o ambos a la vez. El llevar a cabo estas tareas puede comprometer los recursos del cluster por largos periodos de tiempo. Alta disponibilidad: Son clusters cuyo objetivo de diseño es el de proveer disponibilidad y confiabilidad. Estos clusters tratan de brindar la máxima disponibilidad de los servicios que ofrecen. La confiabilidad se provee mediante software que detecta fallos y permite recuperarse frente a los mismos, mientras que en hardware se evita tener un único punto de fallos. Alta eficiencia: Son clusters cuyo objetivo de diseño es el ejecutar la mayor cantidad de tareas en el menor tiempo posible. Existe independencia de datos entre las tareas individuales. El retardo entre los nodos del cluster no es considerado un gran problema.

CAPÍTULO II. MARCO TEÓRICO 15 Componentes de un Cluster En general, un cluster necesita de varios componentes de software y hardware para poder funcionar. A saber: Nodos Almacenamiento Sistemas Operativos Conexiones de Red Protocolos de Comunicación y servicios Aplicaciones Ambientes de Programación Paralela Sistemas para Cluster Rocks Cluster Es una distribución de Linux para cluster de computadores de alto rendimiento. Rocks se basó inicialmente en la distribució Red Hat Linux, sin embargo las versiones más modernas de Rocks están basadas en CentOS, con un instalador anaconda modificado, que simplifica la instalación en masa en muchos computadores. Rocks incluye muchas herramientas (tales como MPI) que no forman parte de CentOS pero son los componentes integrales que hacen un grupo de computadores en un cluster. Es una de las distribuciones más empleadas en el ámbito de clusters, por su facilidad de instalación e incorporación de nuevos nodos. Otra de sus grandes facilidades es que incorpora gran cantidad de software para el mantenimiento y monitorización del cluster, lo que a su vez podría suponer en algunos casos una limitación.

CAPÍTULO II. MARCO TEÓRICO 16 PelicanHPC PelicanHPC es un Live CD que permite configurar un clúster de alto rendimiento en pocos minutos. Un cluster Pelican permite hacer uso de la computación paralela en MPI. El nodo frontend arranca desde el Live CD. En el arranque PXE de los nodos esclavos, usando el nodo frontend como el servidor. Pelican es creado usando Debian Live. Utiliza LAM- MPI e implementaciones de MPI que ya vienen instaladas. ABC GNU/Linux Esta distribución está basada en Ubuntu y esta dedicada a crear clusters de alto rendimiento con tan solo arrancar en uno de ellos el sistema en modo live. o siendo instalado en su disco duro. Los nodos arrancan a través de PXE. Usa como gestor de ventanas Gnome. Integra el monitor de recursos Ganglia. Desarrollado por Iker Castaños Chavarri en el Departamento de Ingeniería de Sistemas y Automática de la EUITI de Bilbao, Universidad del País Vasco. Condor Es un proyecto de la Universidad de Wisconsin-Madison (UWMadison). Esta ideado para aprovechar al máximo la capacidad computacional de una red de computadores. Normalmente solo se dispone de la potencia del computador que estamos utilizando para ejecutar nuestros trabajos. Condor permite ejecutar nuestro trabajo en tantas máquinas como haya disponibles, por lo que, en el mejor de los casos, nuestro trabajo finalizará en el tiempo que tarda en ejecutarse el mas lento de los procesos. Además permite: Conocer el estado de nuestros trabajos en cada momento. Implementar nuestras propias políticas de orden de ejecución. Mantener un registro de la actividad de nuestros trabajos. Añadir tolerancia a fallos a nuestros trabajos.

CAPÍTULO II. MARCO TEÓRICO 17 2.2. Análisis Input-Output El Análisis Input-Output permite el conocimiento de la estructura económica y productiva de un sistema económico a un nivel de detalle máximo, con la coherencia que todo sistema mantiene entre sus elementos y relaciones. Se trata, por tanto, de una herramienta de incuestionable utilidad en estudios tanto regionales como de ámbito nacional. El desarrollo moderno del Análisis Input-Output tiene su punto de partida en los trabajos de Leontief desarrollados en los años 30 y, en particular, en la construcción del conocido modelo Input-Output clásico. Sin embargo, el esquema conceptual o marco teórico se remonta a los estudios de los teoricistas Quesnay (1758), al crear el instrumento analítico conocido como tableau economique, y Walras (1877), que representa matemáticamente las interdependencias de un sistema económico, planteadas bajo la hipótesis de existencia de un equilibrio general de los mercados. El desarrollo de metodologías de ajuste y proyección de matrices input-output permiten obtener, adicionalmente, una enriquecedora visión dinámica del funcionamiento interno de este sistema de relaciones económico productivas. 2.2.1. Modelo de Input-Output Puesto que en un modelo de insumo-producto se suele incorporar un gran número de industrias, su esquema es por fuerza bastante complicado. Para simplificar el problema se adoptan las siguientes hipótesis o supuestos económicos: Cada sector produce solo una mercancía homogénea. Cada sector usa una relación fija de insumo para la obtención de su producto La producción en cada sector está sujeta a rendimientos constantes a escala.

CAPÍTULO II. MARCO TEÓRICO 18 Se puede expresar una tabla input-output o de transacciones interindustriales de la manera siguiente: Compras Ventas Tabla 2.1: Tabla de Input-Output demanda intermedia I II III... N Total Ventas Sector I x 11 x 12 x 13... x 1N nj=1 x 1j Sector II x 21 x 22 x 23... x 2N nj=1 x 2j Sector III x 31 x 32 x 33... x 3N nj=1 x 3j......... Sector N x N1 x N2 x N3... x NN nj=1 x Nj Total Compras ni=1 x i1 ni=1 x i2 ni=1 x i3... ni=1 x in Esta tabla muestra como se interrelacionan todas las industrias, en el sentido de que cada una adquiere productos fabricados por las demás, a fin de llevar a cabo su propio proceso. Cada elemento x ij dentro del cuerpo de la tabla representa en valor monetario las compras que las empresas del sector i han efectuado a otras empresas del sector j. Se puede observar que: x ij con i j representa las compras de un sector con respecto a otro distinto. x ij con i = j representa las compras de un sector con respecto al mismo sector. Se lee: Horizontalmente: La fila de una clase o sector muestra el valor de las ventas por cada comprador y el valor total de las ventas en términos monetarios. Verticalmente: La columna de cada clase o sector representa el valor de las compras por cada vendedor y el valor total de las compras, en términos monetarios.

CAPÍTULO II. MARCO TEÓRICO 19 Por último las compras y ventas totales son iguales para cada clase. Se ha admitido hasta el momento el supuesto de expresar la tabla de transferencias interindustriales en términos monetarios y no físicos, ya que este último traería una complejidad al momento de sumar y obtener la última linea. Suma Horizontal, o por filas; es posible ya que representa las ventas de un mismo sector destinadas a satisfacer los requerimientos de los sectores y por lo tanto se expresan en la misma unidad de medida. Suma Vertical, o por columnas; no tiene sentido, ya que cada cifra representa una compra efectuada a otro sector de producción y por lo tanto esta expresada en diversas unidades de medida. 2.2.2. Matrices de Coeficientes Técnicos Matriz de Coeficientes Técnicos asociada a la Producción En base a la información proporcionada por la Tabla de Input-Output puede elaborarse la Tabla de Coeficientes Técnicos asociadas a la producción que toma el valor que representa cada uno de los inputs sobre la producción final de cada sector. Relacionando cada x ij con la producción total X i se efectúa el cuociente x ij /X i el cual define el COEFICIENTE TÉCNICO ASOCIADO A LA PRODUCCIÓN a ij. Y por ende se puede contruir la matriz de coeficientes técnicos asociado a la producción. A = a 11 a 12 a 1n a 21 a 22 a 2n...... a n1 a n2 a nn

CAPÍTULO II. MARCO TEÓRICO 20 Matriz de Coeficientes Técnicos asociada a la Distribución Al igual que la matriz de coeficientes anterior, también es necesario utilizar la información proporcionada por la Tabla de Input-Output para construir la Tabla de Coeficientes Técnicos asociados a la distribución que en este caso toma el valor que representa cada uno de los outputs sobre la distribución total de cada sector. Referenciando cada x ij con la distribución total X j se realiza el cuociente x ij /X j el cual define el COEFICIENTE TÉCNICO ASOCIADO A LA DISTRIBUCIÓN b ij. Y por lo tando se puede contruir la matriz de coeficientes técnicos asociado a la distribución. B = b 11 b 12 b 1n b 21 b 22 b 2n...... b n1 b n2 b nn 2.2.3. Indicador de Lemasne El Índice de Similitud Estructural que propuso Le Masne en 1988 permite lograr la detección de los parecidos que presentan distintas economías, el cual permite una comparación en base al cómo se hacen y distribuyen los distintos insumos y servicios. Y que tiene la siguiente expresión: n Sj 1 0 = 100(1 0, 5 a 1 ij a 0 ij ) (2.3) i=1

CAPÍTULO II. MARCO TEÓRICO 21 Donde 1 y 0 indican los periodos (o las regiones) que se comparan, n es el número de sectores de la tabla y a 1 ij y a0 ij son los coeficientes técnicos de cada periodo (o de cada región). Este índice varía entre 0 y 100, de modo que cuanto más próximo a 100 se encuentre el índice mayor es el grado de similitud entre los dos periodos (o las dos regiones) que se comparan.

Capítulo III Desarrollo

CAPÍTULO III. DESARROLLO 23 3.1. Comparativa entre Memoria Distribuida y Compartida Latencia en el acceso a memoria El tiempo de acceso a memoria es mayor en cluster de computadores que en multiprocesadores debido a: No localidad de los módulos de memoria. Necesidad de acceder a los módulos de memoria a través de la red. Conflictos de acceso a memoria por varios procesadores. Mecanismos de comunicación La comunicación en multiprocesadores se realiza implícitamente con instrucciones de carga y almacenanmiento del procesador. La comunicación en cluster de computadores se realiza mediante un software que permita copiar datos entre módulos de memoria de diferentes procesadores a través de la red de interconexión (comunicación básica uno-a-uno soportado por la red y su interfaz). Mecanismos de sincronización En el cluster de computadores se aprovecha el mencanismo de comunicación para implementar la sincronización (Ej: recepción bloqueante). En multiprocesadores se utilizan implementaciones de software tales como semáforos, monitores, etc.

CAPÍTULO III. DESARROLLO 24 Herramientas de programación En un cluster de computador hay que distribuir la carga a un módulo de memoria local antes de empezar a trabajar (balanceo de carga para la mejora de prestaciones). En multiprocesadores no se reparte la carga de trabajo. Degradación de prestaciones ante reparto de carga estático en cluster de computadores. Compiladores y herramientas de programación más sofisticadas en cluster de computadores. Programación La programación en cluster de computadores es más compleja por la implicación del programador en la distribución de datos y asignación de trabajo. Sin embargo, la programación en multiprocesadores puede resultar complicada en los casos en los que una sincronización errónea no es trivialmente detectada. Elección del modelo a utilizar Teniendo en cuenta la comparativa anterior, para el desarrollo de esta tesis se optó por la utilización de un modelo de programación de memoria compartida. Enfocándose en ciertos factores, de mayor importancia para el tesista, como la facilidad de programación de este modelo en comparación al distribuido con respecto a la distribución de la carga y en la comunicación, ya que en el modelo distribuido es necesario enviar datos a través de una red de interconexión. También sería recomendable mencionar el hecho de que la tecnología multi-núcleo, presenta una nueva gama de posibilidades para el desarrollo de aplicaciones por medio del cómputo paralelo, ya que ofrece nuevos niveles de desempeño, velocidad y eficiencia.

CAPÍTULO III. DESARROLLO 25 3.2. Librería OpenMP En base a la utilización de un modelo de memoria compartida, se decidió trabajar con OpenMP, el cual es un modelo de programación portable y escalable que proporciona una interfaz simple y flexible para el desarrollo de aplicaciones paralelas para las plataformas que van desde los computadores de escritorio hasta los supercomputadores. Cuando se incluye una directiva OpenMP esto implica que se incluye una sincronización obligatoria en todo el bloque. En el fondo, el bloque de código se enmarcará dentro de una región paralela y se lanzarán hilos según las características que nos dé la directiva, y al final de ella habrá una barrera para la sincronización de los diferentes hilos. Este tipo de ejecución se denomina fork-join. Figura 3.1: Modelo Fork-Join

CAPÍTULO III. DESARROLLO 26 3.2.1. Directivas A continuación se presentarán algunas directivas de compilación (o pragmas), que proporciona OpenMP para la construcción de una región paralela: parallel: Esta directiva nos indica que la parte de código que la comprende puede ser ejecutada por varios hilos. single: La parte de código que define esta directiva, sólo la puede ejecutar un único hilo de todos los lanzados, y no tiene que ser obligatoriamente el hilo padre. for: Esta directiva permite que las iteraciones del ciclo asociado sean ejecutadas en paralelo. critical: Sólo un hilo puede estar en esta sección. Sirve para definir regiones críticas. 3.2.2. Funciones También se presentarán algunas funciones propias de OpenMP para el desarrollo de aplicaciones paralelas: omp set num threads: Fija el número de hilos simultáneos. omp get num threads: Devuelve el número de hilos en ejecución. omp get thread num: Devuelve el número que identifica al thread (este valor está entre 0 y omp get num threads()-1). omp get max threads: Devuelve el número máximo de hilos que lanzará nuestro programa en las zonas paralelas.

CAPÍTULO III. DESARROLLO 27 3.3. Herramientas de Programación A continuación se mencionarán las herramientas que fueron necesarias para poder desarrollar la aplicación propuesta para esta tesis. 3.3.1. Lenguajes de Programación Con respecto al uso de la librería de programación paralela OpenMP, solo permite añadir concurrencia a los programas escritos en los lenguajes de programación C, C++ y Fortran. Por ende fue necesario seleccionar alguno de los lenguajes mencionados para la construcción de la aplicación. Se ha optado por el uso del lenguaje C para la paralelización de la aplicación a realizar y por medio del uso de la librería OpenMP. Se eligió este lenguaje porque es más conocido por el tesista, y además de contar con una amplia documentación y bibliografía. Lenguaje C Es un lenguaje de programación de propósito general de nivel medio que ofrece economía sintáctica, control de flujo, estructuras sencillas y un buen conjunto de operadores. Dentro de sus características se pueden destacar: Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de archivos, proporcionadas por liberías. Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados es el estructurado. Un sistema de tipos que impide operaciones sin sentido. Acceso a memoria de bajo nivel mediante el uso de punteros.

CAPÍTULO III. DESARROLLO 28 Un conjunto reducido de palabras clave. Cabe mencionar que para el desarrollo de la aplicación fue necesario trabajar con archivos en formato de Microsoft Excel (.xls o.xlsx), tanto para la entrada como la salida de datos. Y como el lenguaje C no permite de forma nativa trabajar con estos archivos, se optó por utilizar el lenguaje de programación Perl, ya que provee de módulos específicos para el manejo de este tipo de archivos. Lenguaje Perl Es un lenguaje de programación que toma características del lenguaje C, del lenguaje interpretado shell (sh), AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación. Perl es un lenguaje imperativo, con variables, expresiones, asignaciones, bloques de código delimitados por llaves, estructuras de control y subrutinas. Los módulos de Perl (ver Anexo A para la instalacion de los módulos de Perl) que permiten el manejo de archivos en formato de microsoft excel son los siguientes: Spreadsheet::Read: Permite leer datos de las hojas de cálculo. Spreadsheet::XLSX: Permite leer archivos en el formato de Microsoft Excel 2007. Spreadsheet::Write: Permite la escritura en archivos CSV or XLS (Microsoft Excel). Spreadsheet::WriteExcel: Permite la escritura mulit-plataforma en archivos Excel.

CAPÍTULO III. DESARROLLO 29 3.3.2. Diseñador de Interfaz Gráfica También se consideró apropiado el diseño de una interfaz gráfica con la finalidad de proveer al usuario final, de una interfaz simple e intuitiva para poder interactuar con la aplicación de manera transparente y cómoda. Y por ello para la construcción de la interfaz gráfica se decidió ocupar como manejador de interfaces el programa Glade. Glade Glade (o Glade Interface Designer) es una herramienta de desarrollo visual de interfaces gráficas mediante GTK/GNOME. Es independiente del lenguaje de programación y predeterminadamente, ya que no genera código fuente sino un archivo xml. La posibilidad de generar automáticamente código fuente fue discontinuada desde Glade-3. Algunas características de esta herramienta son: Deshacer y rehacer disponible para todas las operaciones. Permite abrir varios proyectos simultáneamente. Ayuda contextual mediante DevHelp. Las herramientas de Glade (paleta, editor, etc.) son implementadas como widgets.

CAPÍTULO III. DESARROLLO 30 3.4. Aplicaciones de Prueba Previo a empezar con el desarrollo de la aplicación es conveniente realizar en un principio programas de prueba, con el fin de familiarizarse poco a poco con las herramientas de programación necesarias para la construcción de la aplicación. A continuación se mostrarán algunos ejemplos de prueba realizados con los lenguajes utilizados: 3.4.1. Utilizando OpenMP Con respecto al uso de esta librería se trabajó con libgomp, la cual es una implementación de la GNU para la API (interfaz de programación de aplicaciones) de OpenMP. Forma de Compilación También se utilizó el compilador gcc el cual agrupa un conjunto de compiladores creados por el proyecto GNU. GCC es software libre y lo distribuye la FSF bajo la licencia GPL. El comando de compilación de acuerdo a la implementación utilizada es el siguiente: gcc -fopenmp nombre archivo.c Al momento de compilar debe ser usada la bandera fopenmp como se puede apreciar en el comando anterior. Ya que esto permite el uso de las directivas de OpenMP. Posteriormente se mostrará el código fuente de un ejemplo realizado y su correspondiente ejecución, donde se lanzan dos hilos dentro de la región paralela y cada uno de ellos imprime por pantalla su identificador.

CAPÍTULO III. DESARROLLO 31 Figura 3.2: Código Fuente del Programa prueba.c Figura 3.3: Ejecución del Programa prueba.c A continuación se presentará otro ejemplo con su respectivo código fuente y su ejecución, pero esta vez, al crear la región paralela se utilizó un constructor for que especifica que

CAPÍTULO III. DESARROLLO 32 las iteraciones del ciclo asociado deben ser ejecutadas en paralelo. Y además se agregó la cláusula schedule la cual especifica cuántas iteraciones del ciclo for son divididas entre el número de hilos, para este caso el número de iteraciones es de tamaño fijo ya que se usó la categoría static. Y para este ejemplo se ejecutarán dos iteraciones simultáneas y el número de iteraciones que atenderá cada hilo será de dos, tomando un ciclo que en total realiza cuatro iteraciones. Figura 3.4: Código Fuente del Programa for.c

CAPÍTULO III. DESARROLLO 33 Figura 3.5: Ejecución del Programa for.c 3.4.2. Utilizando Perl En esta sección se mostrarán algunos ejemplos realizados con el lenguaje Perl, que permiten tanto la lectura como escritura de datos sobre archivos excel. Para el caso de la lectura de un archivo excel, primeramente es necesario incluir los módulos de perl que permiten la lectura de estos datos, para posteriormente abrir el archivo excel con la función ReadData y de esta forma se puede acceder a cualquiera de las celdas de la hoja de cálculo. En el código que se mostrará a continuación se presenta la manera de accesar y leer el contenido de una celda en un fichero excel.

CAPÍTULO III. DESARROLLO 34 Figura 3.6: Código que permite leer datos en archivo excel Teniendo en cuenta el caso de la escritura en un archivo excel, también es necesario incluir los módulos de perl que permiten la escritura de estos datos, para posteriormente crear un archivo excel con el método new del módulo Spreadsheet::WriteExcel y con el uso del método write que permite acceder a cualquiera de las celdas de la hoja de cálculo para escribir en ella. En el código que se mostrará a continuación se presenta la creación de un archivo excel y su posterior escritura de datos en el.

CAPÍTULO III. DESARROLLO 35 Figura 3.7: Código que permite escribir datos en archivo excel Forma de ejecución Para la ejecución de scripts hechos en perl, se deberá ejecutar el siguiente comando: perl nombre archivo.pl 3.4.3. Utilizando Glade La finalidad del uso del diseñador de interfaces Glade como se mencionó anteriormente consiste en brindar al usuario final, de una interfaz gráfica simple e intuitiva para interactuar con la aplicación.

CAPÍTULO III. DESARROLLO 36 A continuación se mostrará un ejemplo bastante sencillo, en el cual se crea una ventana, un contenedor y además se agrega una etiqueta dentro de la misma con el texto Hola Mundo. Figura 3.8: Ventana realizada con el programa Glade Una vez realizada la interfaz gráfica de la aplicación es necesario generar el código fuente de la misma, lo cual se realiza por medio del programa Glade, este código es producido en lenguaje C por lo que después se deberá compilar y de esta manera se podrá obtener el archivo ejecutable para poder interactuar con la interfaz realizada.

CAPÍTULO III. DESARROLLO 37 3.5. Construcción de la Aplicación En breve se explicará como se desarrolló la aplicación que permitirá obtener el Cálculo de Índice de Similitud Estructural. Para ello se tratarán las fases de mayor importancia para la construcción de la aplicación. Antes de comenzar se presentará un diagrama de bloques, en el cual se podrán apreciar las tareas principales que se llevaron a cabo para el desarrollo de la aplicación. Figura 3.9: Diagrama de Bloques de la Aplicación Como se puede ver en el diagrama de la Figura 3.9, básicamente la aplicación consta de tres procesos, donde en los extremos por medio de scripts realizados en lenguaje Perl se leen y escriben los datos de los archivos en formato excel y en el centro del diagrama el programa en lenguaje C se encarga de tomar estos datos para realizar las operaciones pertinentes para la obtención de los resultados asociados al Cálculo de Similitud Estructural. La comunicación entre los procesos se realiza por medio de tuberías o Pipes, las cuales permiten que entre los procesos conectados la salida de cada elemento de un proceso pase a ser la entrada del siguiente.

CAPÍTULO III. DESARROLLO 38 3.5.1. Entrada de Datos Para la entrada de datos se debe trabajar con tablas de input-output. La información de estas tablas se encuentran dentro de un archivo excel y donde cada tabla ocupa una hoja dentro del archivo. Figura 3.10: Formato de tabla Input-Output utilizada 3.5.2. Cálculo de Similitud Estructural En lo referente a la parte de cálculos cabe mencionar que primeramente se realizó el algortimo secuencial, para tener mayor claridad de las operaciones que se necesitan para obtener el Cálculo de Índice de Similitud Estructural. Y también para reconocer que operaciones se podrían paralelizar. Con respecto a la obtención de las matrices de coeficientes técnicos, cabe mencionar que estas matrices deben calcularse para cada tabla de input-output existente, o sea cada tabla va a tener asociada una matriz de coeficientes técnicos con respecto a las funciones de producción y distribución.

CAPÍTULO III. DESARROLLO 39 Obtención Matriz de Coeficientes asociada a la Producción A continuación se explicará como se paralelizó esta tarea, utilizando un diagrama para ver como se distribuyó el trabajo entre los hilos, para el cálculo de la matriz de coeficientes técnicos asociado a la producción. Figura 3.11: Diagrama para la obtención de Matriz asociada a la Producción Como se puede ver en la Figura 3.11, cada hilo trabaja de forma simultánea sobre una columna de una tabla de input-output y se encarga de efectuar las operaciones correspondientes para obtener la matriz de coeficientes técnicos de la producción. Para explicar en mayor detalle lo anterior se tomará como referencia el hilo T k, donde 0 k N 1. El hilo representado por T k en particular se mueve por la columna k y va efectuando el siguiente cuociente, x ik /X k (donde el valor de k se mantiene y el valor de i varía entre 1 i n y además n representa el total de sectores) y de esta forma este hilo obtiene los coeficientes de la columna k pertenecientes a la matriz asociada a la producción.

CAPÍTULO III. DESARROLLO 40 Obtención Matriz de Coeficientes asociada a la Distribución Para el caso de la obtención de la matriz de coeficientes técnicos asociada a la distribución, también se utilizará un diagrama para explicar el trabajo que realizan los hilos para completar esta tarea. Figura 3.12: Diagrama para la obtención de Matriz asociada a la Distribución Como se puede apreciar en la Figura 3.12, cada hilo trabaja de forma simultánea sobre una fila de una tabla de input-output y se encarga de efectuar las operaciones correspondientes para obtener la matriz de coeficientes técnicos de distribución. Al igual que el diagrama anterior se tomará como referencia el hilo T k para explicar esta tarea en profundidad, donde 0 k N 1. El hilo referenciado por T k en este caso se mueve por la fila k y va efectuando el siguiente cuociente, x kj /X k (donde el valor de k se mantiene y el valor de j varía entre 1 j n y además n representa el total de sectores) y de esta forma este hilo obtiene los coeficientes de la fila k pertenecientes a la matriz asociada a la distribución.

CAPÍTULO III. DESARROLLO 41 Obtención del Indicador de Lemasne Una vez calculadas las matrices de coeficientes técnicos, se puede proceder a realizar el Cálculo de Similitud Estructural, por medio del indicador de Lemasne. Previo a la explicación de la obtención del indicador de Lemasne cabe recalcar el hecho de que este cálculo es simétrico, o sea que si se calcula la similitud entre las matrices de coeficientes A i y A j (con i j) nos entrega el mismo resultado que entre A j y A i, con lo que se puede reducir el número de comparaciones a la mitad. Como se mencionaba anteriormente se debe realizar la comparación entre todas las matrices de coeficientes del mismo tipo (ya sean las de producción o distribución). Para conocer el número de comparaciones que deben realizarse tanto para las matrices de producción y distribución, se puede obtener de la siguiente combinatoria: Donde: N k = N! (N k)!k! (3.1) N representa el total de tablas de input-output. k para este caso toma el valor 2 ya que la comparación se realiza de a pares. Para explicar con mayor claridad la obtención de este cálculo, se presentará un digrama para mostrar como se paralelizó esta tarea.