PARADIGMA y LENGUAJES DE PROGRAMACIÓN

Documentos relacionados
Programación Concurrente y Paralela. Unidad 1 Introducción

Evolución del software y su situación actual

Concurrencia. Concurrencia

Con estas consideraciones, Flynn clasifica los sistemas en cuatro categorías:

Arquitectura de Computadoras. Clase 9 Procesamiento paralelo

Hilos Secciones Stallings:

TEMA 9. SISTEMAS OPERATIVOS DISTRIBUIDOS

Introducción a los Sistemas Operativos

Lusitania. Pensando en Paralelo. César Gómez Martín

Tema 12: El sistema operativo y los procesos

Sistemas Operativos- Evolución Histórica

Tipos de Diseño. Ing. Elizabeth Guerrero V.

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Diseño de algoritmos paralelos

Tema: Herencia en C#.

de Gran Canaria Centro de Tecnología Médica Programación Concurrente

UNIDAD II Metodología de programación paralela. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM

Sistemas Operativos. Un sistema operativo es un conjunto de programas de computadora diseñados especialmente para cubrir los siguientes objetivos:

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

Las optimizaciones pueden realizarse de diferentes formas. Las optimizaciones se realizan en base al alcance ofrecido por el compilador.

Unidad VII Optimización. M.C. Juan Carlos Olivares Rojas

Modelos de computadores paralelos

Concurrencia y paralelismo

1. Introducción 2. S.O. de Red. NFS 3. S.O. Distribuidos 4. Características de Diseño. Tema5: Sistemas Operativos Distribuidos

INDICE 1. Introducción 2. Entrada / Salida: Principios y Programación 3. Procesos

Universidad Autónoma del Estado de México Facultad de Medicina

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

Introducción a los sistemas operativos. Ing Esp Pedro Alberto Arias Quintero

La Máquina de Acceso Aleatorio (Random Access Machine)

Introducción a la programación: Contenido. Introducción

Herramientas Informáticas I Software: Sistemas Operativos

Sistemas Operativos. Introducción. Tema 6

Unidad 4 - Procesamiento paralelo. Arquitectura de computadoras. D o c e n t e : E r n e s t o L e a l. E q u i p o : J e s s i c a F i e r r o

Tecnología de software para sistemas de tiempo real

IFCD0111 Programación en Lenguajes Estructurados de Aplicaciones de Gestión

Sistemas Operativos. Dr. Wenceslao Palma M.

Programación Distribuida y Tiempo Real

Programación de Ordenadores

Capítulo 2. Sistemas Operativos. Elementos, estructura y funciones generales.

Unidad I: Organización del Computador. Ing. Marglorie Colina

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Programación concurrente

ARQUITECTURA DE VON NEUMANN Y HARVARD

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

TAREA 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS.

Planificación con prioridades

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

PREGUNTAS INFORMÁTICA MONITOR UPB EXAMEN 1

Programación MODULAR: Subalgoritmos - funciones y procedimientos

MINUTA: Taller en UAEMEX, Toluca. Construcción de Tecnología HPC

CAPITULO ALGORITMOS Y PROGRAMAS CONTENIDO

Cómputo paralelo con openmp y C

Memoria. Organización de memorias estáticas.

Procesamiento Paralelo

Arquitecturas cliente/servidor

Algoritmos y programas. Algoritmos y Estructuras de Datos I

1. Secuencia y temporalización de los contenidos.

EVOLUCIÓN DE LOS PROCESADORES

Sistemas Distribuidos. Soporte de Sistemas Operativos

ESTRUCTURAS CICLICAS

Tema 1: Programación Multiproceso. Curso

Sesión 7. Cálculo Paralelo en Elmer

Clasificación n de los Sistemas Operativos. Clasificación de los SO Estructuras de los SO Modos de procesamiento

Capítulo 3. Procesos concurrentes 3.1. Conceptos de programación concurrente La computación concurrente es la simultaneidad en la ejecución de

Hoja de respuestas. Examen tipo A

Convivencia Introducción

TECNOLOGÍAS DE LA INFORMACIÓN Y LA COMUNICACIÓN I

Programación en Lenguajes Estructurados de Aplicaciones de Gestión. Certificados de profesionalidad

Paradigma de paso de mensajes

TEMA 1: INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS

Facultad de Ingeniería Industrial y de Sistemas v1.1 Pre Maestría LENGUAJES DE PROGRAMACION

I.S.F.T. Nº 38 Programación I página 1

Guía práctica de estudio 05: Diagramas de flujo

RECORDAR TIPOS DE DATOS

UNIVERSIDAD NACIONAL FEDERICO VILLARREAL FACULTAD DE INGENIERÍA ELECTRÓNICA E INFORMÁTICA SÍLABO

Fundamentos de Sistemas Operativos Licenciatura en Administración de Tecnologías de Información y Comunicaciones

Pontificia Universidad Católica del Ecuador

Sistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria

1.1. Modelos de arquitecturas de cómputo: clásicas, segmentadas, de multiprocesamiento.

Técnicas de Programación

Introducción a la programación

Funcionamiento de la computadora

Planificaciones Algoritmos y Programación I. Docente responsable: AZCURRA DIEGO ANDRES. 1 de 5

Tema 1: Principios de Java

Tema: Clases y Objetos en C#. Parte II.

Transcripción:

CATEDRA CARRERA: PARADIGMA y LENGUAJES DE PROGRAMACIÓN LICENCIATURA EN SISTEMAS DE INFORMACION FACULTAD DE CIENCIAS EXACTAS QUIMICAS Y NATURALES UNIVERSIDAD NACIONAL DE MISIONES Año 2017 2do Cuatrimestre

PARADIGMA y LENGUAJES DE PROGRAMACIÓN UNIDAD I: Programación Concurrente Algoritmos concurrentes, distribuidos y paralelos. Motivación y aspectos de la programación distribuida UNIDAD II: Metodología de programación paralela. Descomposición, asignación de procesadores. Modelos de sistemas paralelos. Modelos de programación paralela. Evaluación de rendimiento. UNIDAD III: Programación paralela. Computación orientada a redes. Variantes de sistemas cliente/servidor. La interfaz MPI. Programación en hebras con OpenMP. Introducción a la programación de hardware gráfico paralelo: CUDA

PARADIGMA y LENGUAJES DE PROGRAMACIÓN UNIDAD IV: Programación Funcional El paradigma funcional. Tipos de datos. Intervalos. Operadores Listas. Árboles. Evaluación perezosa. Estrategia y técnicas de la evaluación perezosa. Introducción al lenguaje Haskell UNIDAD V: Programación Lógica. El paradigma Lógico. Sintaxis y semántica. Lógica de primer Orden. Grafos, evaluación de expresiones. Unificación. Clausula Horn resolución SLD. Introducción al lenguaje Prolog.

UNIDAD I: Programación Concurrente La concurrencia es el acaecimiento de varios sucesos al mismo tiempo. Desde el punto de vista de la programación concurrente, se dice que dos sucesos son concurrentes si uno sucede entre el comienzo y el fin de otro.

UNIDAD I: Programación Concurrente La forma de ejecutar un programa concurrente puede variar en función del hardware disponible: Multiprogramación Sistemas con un único procesador. Los procesos deben compartir el tiempo de cómputo.

UNIDAD I: Programación Concurrente Multiproceso Sistemas donde hay varios procesadores. Es posible asignar diferentes procesadores a diferentes procesos.

Programación Concurrente IMPORTANTE: Notar que aunque se disponga de varios procesadores, es posible que el número de procesos de los programas que deben ejecutarse en ellos sobrepase el número de procesadores disponibles. En tal caso, podría necesitarse multiprogramación incluso aunque existiera multiproceso.

Programación Concurrente

En las ciencias de la computación, un algoritmo paralelo, es el que puede ser ejecutado por partes en el mismo instante de tiempo por varias unidades de procesamiento, para finalmente unir todas las partes y obtener el resultado.

Ejercicio: Realiza el producto escalar de dos vectores de forma paralela. El producto escalar de dos vectores se define la sumatoria del producto entre los elementos del vector

Solución:

Ejercicio: Crear un algoritmo que calcule todos los números primos entre 1 y 100

Ejercicio: Crear un algoritmo que calcule todos los números primos entre 1 y 100 Se podría dividir los números originales en subconjuntos y calcular los primos para cada uno de los subconjuntos de los números originales; al final, uniríamos todos los resultados y tendríamos la solución final del algoritmo.

Algunos algoritmos son fácilmente divisibles en partes, por el contrario, a veces los problemas no son tan fácilmente paralelizables (Metodologías)

Instrucciones atómicas e intercalación Los procesos se definen de forma similar a un procedimiento. Un proceso puede recibir parámetros, tanto por valor como por referencia. Estos últimos pueden ser compartidos por diferentes procesos (si la misma referencia es pasada a todos ellos). Por ejemplo, el siguiente fragmento de código en PascalFC define un proceso que escribe por pantalla el valor de una variable:

Instrucciones atómicas e intercalación Una vez definido un proceso es posible declarar una o varias variables de tipo proceso en la sección de declaración de variables del programa principal. En el ejemplo anterior, se podría considerar declarar dos variables de tipo proceso print, p1 y p2 de la siguiente manera:

Instrucciones atómicas e intercalación En ejecución, se crearán dos procesos que ejecutarán la misma secuencia de instrucciones. Éste no tiene porqué ser siempre el caso, y como se verá más adelante un programa puede contener procesos que ejecutan acciones diferentes. P.P. P1 P2

Instrucciones atómicas e intercalación Es importante notar que el orden en el que aparecen los procesos dentro de este bloque no es importante: los procesos se iniciarán en orden aleatorio. La ejecución del bloque no termina hasta que todos los procesos hayan terminado. A continuación se presenta el programa completo: P.P. P2 P1

Instrucciones atómicas e intercalación

Instrucciones atómicas e intercalación Cuando se desarrollan programas concurrentes es especialmente importante conocer la secuencia de instrucciones que se ejecutan. En el ejemplo anterior, el hecho de que los procesos p1 y p2 se ejecuten concurrentemente quiere decir que sus instrucciones pueden ejecutarse en cualquier orden. En principio, dado que cada uno de ellos ejecuta solamente una instrucción, podría pensarse que el programa sólo puede producir dos salidas diferentes:

Instrucciones atómicas e intercalación Sin embargo, este programa puede producir en total cuatro salidas diferentes: Como se puede observar, en las dos últimas ejecuciones se intercalan las salidas de los procesos. Esto se debe a que la instrucción write, cuando recibe dos (o más) argumentos, se ejecuta realmente como dos (o más) instrucciones de escritura.

Instrucciones atómicas e intercalación En cambio, la instrucción write con un sólo argumento se ejecuta como una instrucción atómica.

Instrucciones atómicas e intercalación Las instrucciones atómicas son aquellas que son ejecutadas completamente antes de que se ejecute cualquier otra instrucción de cualquier otro proceso del programa. Por tanto, podemos estar seguros de que la cadena Soy el proceso se escribirá completamente en pantalla antes de que cualquier otra instrucción puede ejecutarse.

Instrucciones atómicas e intercalación La única manera de saber qué resultados puede producir un programa paralelo es estudiar todas las posibles intercalaciones, es decir, todas las posibles secuencias de instrucciones atómicas de los procesos que se pueden dar. En el programa anterior, el número de intercalaciones es relativamente pequeño, pero en programas más grandes esta opción puede no ser viable. Programación Paralela

Instrucciones atómicas e intercalación A la hora de construir algoritmos paralelos es especialmente importante, conocer qué instrucciones del lenguaje son realmente instrucciones atómicas y cuáles no.

Con algoritmos paralelos es más rápido tratar grandes tareas de computación que mediante técnicas secuenciales.

Esta es la forma en que se trabaja en el desarrollo de los procesadores modernos, ya que es más difícil incrementar la capacidad de procesamiento con un único procesador que aumentar su capacidad de cómputo mediante la inclusión de unidades en paralelo, logrando así la ejecución de varios flujos de instrucciones dentro del procesador. VS.

Pero hay que ser cauto con la excesiva paralelización ya que cada algoritmo paralelo tiene una parte secuencial y debido a esto, los algoritmos paralelos puedes llegar a un punto de saturación (Ley de Amdahl). Por todo esto, a partir de cierto nivel de paralelismo, añadir más unidades de procesamiento puede sólo incrementar el costo (planificación, comunicación).

El coste o complejidad de los algoritmos secuenciales se estima en términos del espacio (memoria) y tiempo (ciclos de procesador) que requiera. Los algoritmos paralelos también necesitan optimizar la comunicación entre diferentes unidades de procesamiento. Esto se consigue mediante la aplicación de dos paradigmas de programación y diseño de procesadores distintos: Memoria compartida. Paso de mensajes.

La técnica memoria compartida necesita del uso de semáforos o cerrojos en los datos para impedir que se modifique simultáneamente por dos procesadores, por lo que se produce un costo extra en ciclos de CPU. También obliga a serializar alguna parte del algoritmo. La técnica paso de mensajes usa canales y mensajes pero esta comunicación añade un costo, memoria adicional para las colas y los mensajes, así como la latencia en el mensaje.

Algoritmos distribuidos Una subclase de los algoritmos paralelos, son los algoritmos distribuidos. Estos están diseñados para trabajar en entornos tipo clusters y de computación distribuida, donde se usan otras técnicas, fuera del alcance de los algoritmos paralelos clásicos.

Algoritmos distribuidos Por lo general son procesadores geográficamente situados en diferentes lugares o un conjunto de maquinas independientes conectadas por una red. Estas entidades concurrentes tienen las siguientes características: - No comparten memoria - Sincronización en torno a comunicación - Son sistemas altamente escalables

Algoritmos distribuidos Conexión de ordenadores mediante red de interconexión. Multicomputadores. Cada ordenador con su memoria local y su propio espacio de direcciones. Como ejemplos de implementación de programas distribuidos podemos citar a los modelos de paso de mensajes con primitivas de comunicación send/receive:

Algoritmos distribuidos Conexión de ordenadores de uso convencional (monoprocesador o multiprocesador) mediante una red de interconexión de alta velocidad donde el conjunto se ve como un único ordenador.

Algoritmos distribuidos Otra propuesta de programación distribuida es Modelo RMI (Remote method invocation), que permite al programador invocar procedimientos remotos.

GUIA TP UNIDAD I Ejercicio 1 a) Que diferencia existe entre la multiprogramación y el multiproceso? b) Describa que es una instrucciones atómica y que es la intercalación? c) Considera a:=a+1 una instrucción atómica? Justifique la respuesta. d) Que podría pasar si dos procesos ejecutaran en paralelo la instrucción a:=a+1. Ejercicio 2 Investigar como instalar lenguaje PascalFC en su sistema operativo. Lectura recomendada por la cátedra: página del Ing. John Coppens http://jcoppens.com/soft/pfc2/

GUIA TP UNIDAD I Ejercicio 3 a) Implemente el ejercicio de la diapositiva 10 en PascalFC b) Al ejecutarlo varias veces que sucede con la salida del mismo? Ejercicio 4 Investigar: a) Que son los Semáforos en la programación paralela? b) Para que sirven? c) Cuales son sus instrucciones y para que se utiliza cada una? Ejercicio 5 Investigue e implemente una solución en PascalFC con semáforos al problema de la salida detectada en el ejercicio 3.

REFERENCIAS Libro Francisco Gortázar Bellas y otros. Lenguajes de Programación y Procesadores. Capitulo 3.5 Aula Virtual Daniel Guerrero Martínez. Universidad de Granada España. Disponible en: http://lsi.ugr.es/jmantas/pdp/teoria/descargas/pdp_tema1_introduccion.pdf Página del Ing. John Coppens. Disponible en: http://jcoppens.com/soft/pfc2/