Paralelización especulativa
|
|
- Paula Espejo Rivas
- hace 6 años
- Vistas:
Transcripción
1 Sergio Aldea Departamento de Informática Universidad de Valladolid MUI-TIC, curso / 48
2 Índice Conceptos fundamentales Ejecución especulativa por software Especulación + OpenMP Conclusiones 2 / 48
3 Conceptos fundamentales Ejecución especulativa por software Especulación + OpenMP Conclusiones 3 / 48
4 Conceptos fundamentales Paralelismo: motivación Por qué no basta con CPUs más rápidas? Razones teóricas: Límites físicos al rendimiento de un único chip: velocidad de la luz, tamaño de los átomos, disipación del calor... Razones prácticas: Desarrollar nuevos chips es extremadamente caro Solución Utilizar varias CPU para cooperar en la resolución del problema 4 / 48
5 Conceptos fundamentales Paralelismo: motivación Y esto... para qué sirve? Programas de tiempo real Procesamiento masivo de datos (Big Data) Aplicaciones biológicas/médicas. Ej: Plegamiento de proteínas Simulaciones de matemática financiera Técnicas criptográficas Etc, etc... 5 / 48
6 Conceptos fundamentales Paralelización de algoritmos Dos alternativas: manual y automática La paralelización manual de algoritmos es una tarea difícil Requiere conocimientos del problema a paralelizar Requiere conocimientos de las librerías de comunicaciones Requiere conocimientos del hardware subyacente Por otra parte, las soluciones paralelas obtenidas no suelen ser aplicables a otras arquitecturas Solución ideal: dejar la paralelización en manos del compilador 6 / 48
7 Conceptos fundamentales Mecanismos de paralelización automática Identifican fragmentos de código que pueden ejecutarse en paralelo (típicamente bucles) 1. Paralelización automática en tiempo de compilación 2. Paralelización automática en tiempo de ejecución Modelos inspector-ejecutor Modelos de paralelización especulativa Todos están íntimamente ligados al análisis de dependencias Relación entre las lecturas y escrituras sobre una variable que ocurren en distintas iteraciones Afectan a la posibilidad de ejecutar en paralelo un bucle 7 / 48
8 Conceptos fundamentales Ejemplo de dependencia de datos Supongamos el siguiente bucle: do i = 1, lhs=sv[x] SV[x]=rhs end do 8 / 48
9 Conceptos fundamentales Ejemplo de dependencia de datos Con cuatro procesadores podría dividirse el trabajo así: Thread 1 Thread 2 Thread 3 Thread 4 do i = 1, lhs=sv[x] SV[x]=rhs end do do i = 26, lhs=sv[x] SV[x]=rhs end do do i = 51, lhs=sv[x] SV[x]=rhs end do do i = 75, lhs=sv[x] SV[x]=rhs end do 9 / 48
10 Conceptos fundamentales Ejemplo de dependencia de datos Sin embargo, dependiendo del valor de x puede producirse una violación de dependencia: Thread 1 Thread 2 Thread 3 Thread 4 do i = 1, lhs=sv[x] SV[x]=rhs end do do i = 26, lhs=sv[x] SV[x]=rhs end do do i = 51, lhs=sv[x] SV[x]=rhs end do do i = 75, lhs=sv[x] SV[x]=rhs end do 10 / 48
11 Conceptos fundamentales Tipos de dependencia Dependencias WAR (Write After Read): se lee de una variable en una iteración y se escribe sobre ella en una iteración posterior (i1) B = A + C (i2) C = A + D Dependencias WAW (Write After Write): se escribe sobre una misma variable en dos iteraciones consecutivas (i1) B = E + C (i2) B = A + D Dependencias RAW (Read After Write): se escribe en una variable en una iteración y se lee de ella en una iteración posterior (i1) A = B + C (i2) D = A + C 11 / 48
12 Conceptos fundamentales Tipos de dependencia Las dependencias RAW son las más conflictivas Thread 1 Thread 2 Thread 3 Thread 4 do i = 1, lhs=sv[x] SV[x]=rhs end do do i = 26, lhs=sv[x] SV[x]=rhs end do do i = 51, lhs=sv[x] SV[x]=rhs end do do i = 75, lhs=sv[x] SV[x]=rhs end do Si x no es conocido en tiempo de compilación, el compilador no puede paralelizar el bucle. 12 / 48
13 Conceptos fundamentales Modelos de paralelización especulativa En lugar de intentar determinar las dependencias entre las iteraciones, se ejecuta el bucle en paralelo suponiendo que no hay dependencias (ejecución optimista ) Un mecanismo de control (hardware o software) debe encargarse de detectar violaciones de dependencia en tiempo de ejecución y descartar los valores calculados incorrectamente Para cada variable compartida se comprueba si alguno de los hilos que se encuentra ejecutando iteraciones posteriores del bucle ha utilizado un valor antiguo de esa variable. 13 / 48
14 Conceptos fundamentales Ejemplo de aplicación: Cierre convexo Los puntos se procesan uno por uno Algoritmo incremental aleatorizado cuyo número esperado de dependencias está relacionado con la forma del conjunto de datos de entrada. 14 / 48
15 Conceptos fundamentales Ejemplo de aplicación: Cierre convexo Si el nuevo punto cae dentro, la solución no cambia 15 / 48
16 Conceptos fundamentales Ejemplo de aplicación: Cierre convexo Si el nuevo punto cae fuera, la solución sí que cambia 16 / 48
17 Conceptos fundamentales Ejemplo de aplicación: Cierre convexo Si el nuevo punto cae fuera, la solución sí que cambia 17 / 48
18 Conceptos fundamentales Ejemplo de aplicación: Cierre convexo 6 5 Speculative Secuencial 2D-Hull, square input set Especulativo: Speed-ups de hasta 5x con 20 procesadores. 18 / 48
19 Conceptos fundamentales : Ejemplo Thread 1 Thread 2 Thread 3 Thread 4 t10 t0 t1 t3 1) x=1; el thread 1 obtiene el valor de SV[1] 3) x=4; el thread 2 obtiene el valor de SV[4] LocalVar1 = SV[x] SV[x] = LocalVar2 t2 t4 t6 LocalVar1 = SV[x] SV[x] = LocalVar2 t5 t8 t10 5) x=1; el thread 3 obtiene SV[1] del thread 1 LocalVar1 = SV[x] SV[x] = LocalVar2 t6 t7 t9 4) x=1; el thread 4 obtiene SV[1] del thread 1 LocalVar1 = SV[x] SV[x] = LocalVar2 2) El thread 1 escribe en el elemento SV[1] 6) El thread 3 escribe en el elemento SV[1] Tiempo 7) Se detecta una violación de dependencia: se descartan los resultados del thread 4 19 / 48
20 Conceptos fundamentales Operaciones involucradas Thread 1 Thread 2 Thread 3 Thread 4 (i = 1, x = 1) (i = 2, x = 1) (i = 3, x = 2) (i = 4, x = 2) t0 (Thread no especulativo) Escritura especulativa: detección de dependencias (Thread más especulativo) t1 LocalVar1 = SV[x] t2 t3 SV[x] = LocalVar2 t4 t6 LocalVar1 = SV[x] SV[x] = LocalVar2 t5 t8 t10 LocalVar1 = SV[x] SV[x] = LocalVar2 t6 t7 t9 LocalVar1 = SV[x] SV[x] = LocalVar2 Tiempo Consolidación (commit) en orden de las iteraciones correctas Lectura especulativa: obtención del valor más reciente 20 / 48
21 Conceptos fundamentales Resumen de operaciones a realizar Todas las lecturas sobre variables especulativas deben devolver el valor más reciente posible Todas las escrituras sobre variables especulativas deben comprobar que no se producen eventuales violaciones de dependencia. Al final del bloque de iteraciones, cada thread debe realizar una operación de consolidación (commit) de los resultados calculados. 21 / 48
22 Conceptos fundamentales Ejecución especulativa por software Especulación + OpenMP Conclusiones 22 / 48
23 Ejecución especulativa por software Ejecución especulativa por software No requiere cambios en el hardware de la máquina, pero requiere una compilación específica y añade sobrecargas a la ejecución Se añade código al bucle original para la detección y gestión de dependencias La existencia de dependencias puede comprobarse: Al final de la ejecución paralela Al final de la ejecución de un conjunto de iteraciones En cada operación de memoria Los commits parciales y/o finales también se realizan por software 23 / 48
24 Ejecución especulativa por software Modificaciones en la estructura del bucle Supongamos un bucle de N iteraciones, y queremos que se ejecuta en P procesadores. Se reemplaza el bucle por un doall de 1 a P. Cada procesador se encarga de ejecutar un bloque de iteraciones consecutivas. Cuando termina, invoca una función que le asigna un bloque nuevo. Cuando todos terminan, se da por finalizada la ejecución especulativa del bucle. 24 / 48
25 Ejecución especulativa por software Modificaciones en el cuerpo del bucle Todas las lecturas sobre variables especulativas se reemplazan por una función que recupera el valor más reciente para la variable. Todas las escrituras sobre variables especulativas se reemplazan por una función que realiza la escritura y detecta eventuales violaciones de dependencia. Cada thread ejecuta al final de su bloque una función que consolida los resultados calculados y asigna el nuevo bloque de iteraciones a ejecutar. 25 / 48
26 Ejecución especulativa por software Modificaciones antes del bucle Se utiliza OpenMP para clasificar el uso de las variables. Se etiquetan como privadas las variables sobre las que siempre se escribe en una iteración antes de utilizarlas. Se etiquetan como compartidas las variables que sólo se leen. El resto de variables son susceptibles de sufrir una violación de dependencia, son especulativas, pero se etiquetan como compartidas. 26 / 48
27 Ejecución especulativa por software Breve descripción de OpenMP API para programar sistemas de memoria compartida NO es un lenguaje de programación for (i=0; i<10; i++) { b[i] = a[i] + a[i-1] } #pragma omp parallel for for (i=0; i<10; i++) { b[i] = a[i] + a[i-1] } Crea hilos y reparte trabajo entre ellos Variables privadas (a cada hilo) y compartidas No detecta dependencias Nosotros las gestionamos mediante una librería de paralelización especulativa. 27 / 48
28 Ejecución especulativa por software Ejemplo de modificación manual 1: char a; float b; 1: char a; float b; char temp; float value, int tid, threads;... 2: specinit(); 3: threads = omp get num threads(); 4: specstart(max); 5: #pragma openmp parallel for \ private (i,tid,temp,value,...) shared (a,b,threads,...) 6: for (i=0; i<max; i++) { 6: for (tid=0; tid<threads; tid++) { 7: while(true) { 8: i = assign following chunk(tid, MAX,...); Original loop code, part 1 Original loop code, part 1 9: a = f(b); 9: specload(&b, sizeof(b),..., &value); 10: temp = f(value); 11: specstore(&a, sizeof(a),..., &temp); Original loop code, part 2 Original loop code, part 2 12: commit or discard data(tid,...); 13: if(no chunks left(tid, MAX,...)) break; 14: } 15: } 15: } (a) Original (b) Código transformado 28 / 48
29 Ejecución especulativa por software Problemas paralelización especulativa manual Requiere conocimientos del problema a paralelizar Requiere conocimientos de la libreria TLS utilizada Requiere tiempo No estaría bien que todo ese proceso de transformación fuera automático? Solución 1. Definir una nueva cláusula speculative para etiquetar las variables especulativas 2. Modificar un compilador para que: reconozca la cláusula realice las transformaciones necesarias 29 / 48
30 Conceptos fundamentales Ejecución especulativa por software Especulación + OpenMP Conclusiones 30 / 48
31 Especulación + OpenMP Nueva cláusula OpenMP: speculative Identifica aquellas variables conflictivas, que pueden ocasionar violaciones de dependencia #pragma omp parallel for speculative (list) for-loop Ejemplo: #pragma omp parallel for default(none) private(i, Q, aux) speculative(a) for (i = 0; i < MAX; i++) { Q = i % (MAX) + 1; aux = a[q-1]; } Q = (4 * aux) % (MAX) + 1; a[q-1] = aux; 31 / 48
32 Especulación + OpenMP Qué cambios implica la cláusula speculative? 1. Inicializar el motor (specinit() y spectart()) 2. Cambiar la definición del bucle para repartir el trabajo entre los hilos 3. Reemplazar cada escritura/lectura por su variante especulativa (specload() y specstore()) 4. Comprobar dependencias, y consolidar las iteraciones correctas 32 / 48
33 Especulación + OpenMP Qué cambios implica la cláusula speculative? 1: char a; float b; 1: char a; float b; char temp; float value, int tid, threads;... 2: specinit(); 3: threads = omp get num threads(); 4: specstart(max); 5: #pragma openmp parallel for \ 5: #pragma openmp parallel for \ private (i) speculative (a,b) private (i,tid,temp,value,...) shared (a,b,threads,...) 6: for (i=0; i<max; i++) { 6: for (tid=0; tid<threads; tid++) { 7: while(true) { 8: i = assign following chunk(tid, MAX,...); Original loop code, part 1 Original loop code, part 1 9: a = f(b); 9: specload(&b, sizeof(b),..., &value); 10: temp = f(value); 11: specstore(&a, sizeof(a),..., &temp); Original loop code, part 2 Original loop code, part 2 12: commit or discard data(tid,...); 13: if(no chunks left(tid, MAX,...)) break; 14: } 15: } 15: } (a) Original anotado (b) Código generado automáticamente en GCC 33 / 48
34 Especulación + OpenMP Implementación en un compilador Durante la compilación: la cláusula debe ser reconocida como válida, y activar las transformaciones necesarias para paralelizar especulativamente el bucle. Enlazar con la librería de paralelización especulativa. Compilador elegido: GCC Maduro, estable, con soporte para más de 30 arquitecturas. Mayor impacto mediático. Mediante el mecanismo de plugins de GCC. 34 / 48
35 Especulación + OpenMP Arquitectura GCC C parser Front End Middle End Back End GIMPLE RTL C++ parser Plugin Pass Fortran parser GENERIC Interprocedural Optimizer RTL Optimizer Call Graph Manager Java parser SSA Optimizer Final Code Generation Pass Manager Assembly 1. Reconocimiento de la cláusula: Actualización del parser de GCC. 2. Transformaciones: Realizadas por un plugin, que actúa sobre el código en GIMPLE, antes de que el compilador realice el resto de optimizaciones. 35 / 48
36 Especulación + OpenMP Proceso de compilación Compiler parameters: - Threads - Block size Programmer Code C + OpenMP with speculative clause GCC plugin Linker Binary executable TLS Runtime library Ejecución: $ atlas --threads T --block B -c example.c 36 / 48
37 Especulación + OpenMP Ventajas cláusula speculative Menor número de ĺıneas para paralelizar un código Sólo requiere clasificar las variables utilizadas en el bucle No es necesario conocer los detalles de la librería especulativa Independencia del motor especulativo subyacente Permite paralelizar bucles que de otro modo no serían paralelizables 37 / 48
38 Especulación + OpenMP Evaluación Ejemplo de aplicaciones sintética : 0: #define NITER : int array[max], array2[max]; 2: struct card{ int field; }; 3: struct card p1 = {3}, p2 = {99999}, p3 = {11111}; 4: char aux char = a ; 5: double aux double = 3.435; 6: int i, j;... 7: #pragma omp parallel for default (none) \ 8: private(i, j) shared(array1, p2) \ 9: speculative(p1, p3, aux char, aux double, array2) 10: for ( i = 0 ; i < NITER ; i++ ) { 11: for ( j = 0 ; j < NITER ; j++ ) { 12: if (i <= 1000) p1.field = array[i % 4] + j; 13: else array2[i % 4] = p1.field; 14: if (i > 2000) aux char = i % aux char % 48; 15: else aux char = i % 20 + array[i % 4] % ; 16: if (i > 1500) aux double = array[i % 4] / (i+1) + aux double; 17: else array2[i % 4] = (int) (aux double / i*j) + (array2[(i+j) % 4] + i*j) % ; 18: if (i*j > 10000) p1 = p2; else p3 = p1; 19: } 20: } 38 / 48
39 Especulación + OpenMP Especulación manual vs. automática Número de ĺıneas requeridas para paralelizar especulativamente de forma manual vs. automática, y su rendimiento relativo. # de ĺıneas Rendimiento relativo por # de procesadores Aplicación Auto Manual D-Hull Delaunay hmmer Average Rendimientos similares para manual y automático: ±1,72 %. Manualmente, el número de ĺıneas a añadir/modificar depende del número de accesos a variables especulativas. 39 / 48
40 Especulación + OpenMP Duda razonable Vale bien, pero... El programador aún tiene que hacer el esfuerzo de analizar el código y clasificar las variables según su uso. 40 / 48
41 Especulación + OpenMP Proyecto MUI-TIC Original C file XMLCetus XML Modified XML Sirius Resulting C file XML Intel profiling information Profilazer XML augmented Loopest Analysis report XMLCetus: Genera un representación XML a partir de un código fuente. Profilazer: Extiende el fichero XML con información de profiling Loopest: Analiza el fichero XML y extrae información Sirius: Transforma XML a C. 41 / 48
42 Especulación + OpenMP Proyecto MUI-TIC Los informes permite al programador saber: Por cada bucle, la clasificación de las variables según su uso Reconocimiento de barreras al paralelismo: Funciones I/O, gestión de memoria, etc. Trazas de dependencias de una variable en diferentes puntos del código Tiempo de ejecución de cada bucle respecto del total Obtener una visión global del grado de paralelismo de la aplicación 42 / 48
43 Conceptos fundamentales Ejecución especulativa por software Especulación + OpenMP Conclusiones 43 / 48
44 Conclusiones Conclusiones La ejecución especulativa presenta un gran potencial para la extracción del paralelismo inherente a muchos bucles. Añadir soporte para paralelización especulativa a OpenMP incrementa el número de bucles que se pueden paralelizar mediante este modelo. Potencialmente, permite transformar cualquier bucle en un bucle paralelo (sin importar las dependencias) Si el programador no está seguro sobre las dependencias, podría etiquetar esas variables como especulativas. 44 / 48
45 Conclusiones Conclusiones El proceso es transparente para los programadores. No necesitan conocer nada del modelo de paralelización especulativa subyacente. Sólo necesitan añadir una ĺınea de código. El compilador detecta la nueva cláusula speculative, y realiza todas las transformaciones necesarias para paralelizar el código. Independientemente del tipo de datos de las variables: punteros, estructuras, etc. 45 / 48
46 Conclusiones Conclusiones La pregunta de cuál es el potencial real de la ejecución especulativa por software sigue pendiente de respuesta. Seguimos trabajando en dos áreas relacionadas: La transformación automática de bucles secuenciales en bucles susceptibles de ser ejecutados especulativamente. Una ejecución especulativa eficiente y robusta, que pueda utilizarse en aplicaciones comerciales. (Álvaro Estébanez) 46 / 48
47 PREGUNTAS? 47 / 48
48 Sergio Aldea Departamento de Informática Universidad de Valladolid MUI-TIC, curso / 48
Introducción a los procesadores ILP (Instruction-Level Parallel)
Introducción a los procesadores ILP (Instruction-Level Parallel) Herramientas básicas para conseguir paralelismo entre instrucciones: Encauzamiento (pipelining) Se usa en todo procesador ILP Utilizar varias
Más detallesSistemas Complejos en Máquinas Paralelas
Sistemas Complejos en Máquinas Paralelas Clase 1: OpenMP Francisco García Eijó Departamento de Computación - FCEyN UBA 15 de Mayo del 2012 Memoria compartida Las mas conocidas son las máquinas tipo Symmetric
Más detallesTema 1: PROCESADORES SEGMENTADOS
Tema 1: PROCESADORES SEGMENTADOS 1.1. Procesadores RISC frente a procesadores CISC. 1.2. Clasificación de las arquitecturas paralelas. 1.3. Evaluación y mejora del rendimiento de un computador. 1.4. Características
Más detallesEs una API (Aplication Program Interface) que se usa para paralelismo basado en hilos múltiples en entornos de memoria compartida
Algo de OPENMP Memoria Compartida Threads O hilos, se definen como flujos de instrucciones independientes, que se ejecutan separadamente del programa principal. Con estos hilos se aprovecha mucho una máquina
Más detallesGranularidad y latencia
Niveles de paralelismo y latencias de comunicación Niveles de paralelismo. Granularidad o tamaño de grano. Latencia de comunicación. Particionado de los programas. Empaquetado de granos. Planificación
Más detallesParalelización de Programas Secuenciales: OpenMP
Paralelización de Programas Secuenciales: OpenMP http://www.openmp.org Manuel Arenaz arenaz@udc.es Índice Introducción a la programación paralela Programación con OpenMP Directivas de compilación Librería
Más detallesTEMA 5: PARALELISMO A NIVEL DE HILOS, TAREAS Y PETICIONES (TLP, RLP) (primera parte).
TEMA 5: PARALELISMO A NIVEL DE HILOS, TAREAS Y PETICIONES (TLP, RLP) (primera parte). SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC www.atc.us.es Dpto. de Arquitectura y Tecnología de Computadores. Universidad
Más detallesTaller de Programación Paralela
Taller de Programación Paralela Departamento de Ingeniería Informática Universidad de Santiago de Chile April 17, 2008 Motivación Programar aplicaciones paralelas no es una tarea trivial. Paralelismo
Más detallesCómputo paralelo con openmp y C
Cómputo paralelo con openmp y C Sergio Ivvan Valdez Peña Guanajuato, México. 13 de Marzo de 2012 Sergio Ivvan Valdez Peña Cómputo Guanajuato, paralelo conméxico. openmp y () C 13 de Marzo de 2012 1 / 27
Más detalles1 Primitivas básicas de OpenMP
1 Primitivas básicas de OpenMP Consultar la página oficial de la plataforma OpenMP http://www.openmp.org/drupal/ Pragmas Es una directiva para el compilador que permite la definición de nuevas directivas
Más detallesComputación Matricial y Paralela
Computación Matricial y Paralela Programación en Memoria Compartida Javier Cuenca Dpto. de Ingeniería y Tecnología de Computadores Domingo Giménez Dpto. de Informática y Sistemas Universidad de Murcia
Más detallesAspectos avanzados de arquitectura de computadoras Pipeline. Facultad de Ingeniería - Universidad de la República Curso 2017
Aspectos avanzados de arquitectura de computadoras Pipeline Facultad de Ingeniería - Universidad de la República Curso 2017 Objetivo Mejorar el rendimiento Incrementar frecuencia de reloj? Ancho de los
Más detalles6. PROCESADORES SUPERESCALARES Y VLIW
6. PROCESADORES SUPERESCALARES Y VLIW 1 PROCESADORES SUPERESCALARES Y VLIW 1. Introducción 2. El modelo VLIW 3. El cauce superescalar 4. Superescalar con algoritmo de Tomasulo 2 PROCESADORES SUPERESCALARES
Más detallesFrancisco Javier Hernández López
Francisco Javier Hernández López fcoj23@cimat.mx http://www.cimat.mx/~fcoj23 Ejecución de más de un cómputo (cálculo) al mismo tiempo o en paralelo, utilizando más de un procesador. Arquitecturas que hay
Más detallesArquitectura de Computadores: Exámenes y Controles
2º curso / 2º cuatr. Grado en Ing. Informática Doble Grado en Ing. Informática y Matemáticas Arquitectura de Computadores: Exámenes y Controles Examen de Prácticas AC 05/07/2013 resuelto Material elaborado
Más detallesARQUITECTURA DE COMPUTADORES
Escuela Universitaria de Informática Ingeniería de Computadores ARQUITECTURA DE COMPUTADORES PRÁCTICA Nº 3 DESENROLLADO DE BUCLES INTRODUCCIÓN Este documento contiene el enunciado de la práctica de desenrollado
Más detallesTEMA 4. ARQUITECTURA IA-64
TEMA 4. ARQUITECTURA IA-64 Stalling, W.Computer Organization and Architecture cap. 15 Intel IA-64 Architecture Software Developer s Manual Generalidades IA-64 Desarrollo conjunto Intel-HP Nueva arquitectura
Más detallesSISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 3. PLANIFICACIÓN ESTÁTICA AVANZADA. TMS320C6713
SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 3. PLANIFICACIÓN ESTÁTICA AVANZADA. TMS320C6713 OBJETIVOS. En esta práctica se trata de estudiar dos de las técnicas de planificación estática más importantes:
Más detallesEsquemas repetitivos en Fortran 90
Los esquemas repetitivos permiten implementar iteraciones del lenguaje algorítmico (mientras, repetir, para, hasta). Podemos dividir los esquemas según: - Se conozcan el número de iteraciones a priori,
Más detallesFUNCIONAMIENTO DEL ORDENADOR
FUNCIONAMIENTO DEL ORDENADOR COMPUTACIÓN E INFORMÁTICA Datos de entrada Dispositivos de Entrada ORDENADOR PROGRAMA Datos de salida Dispositivos de Salida LOS ORDENADORES FUNCIONAN CON PROGRAMAS Los ordenadores
Más detallesPARADIGMA y LENGUAJES DE PROGRAMACIÓ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
Más detallesProcesadores superescalares. Introducción
Procesadores superescalares Introducción Introducción El término superescalar (superscalar) fue acuñado a fines de los 80s. Todas las CPUs modernas son superescalares. Es un desarrollo de la arquitectura
Más detallesde Gran Canaria Centro de Tecnología Médica Programación Concurrente
Universidad de Las Palmas de Gran Canaria Centro de Tecnología Médica http://www.ctm.ulpgc.es Tema 1: Introducción a la Escuela Técnica Superior de Ingenieros de Telecomunicación Conceptos Fundamentales
Más detallesEstructuras de Datos Declaraciones Tipos de Datos
Departamento de Informática Universidad Técnica Federico Santa María Estructuras de Datos Declaraciones Tipos de Datos Temas: 2-3-4 IWI-131, paralelo 01 Profesor: Teddy Alfaro O. Lenguaje de Programación
Más detallesMaster SIA 2012/13. Programación de Sistemas Paralelos. OpenMP: Ejercicios prácticos. Facultad de Informática. Ejercicio 1.A. pi.c
Master SIA 2012/13 Facultad de Informática Programación de Sistemas Paralelos OpenMP: Ejercicios prácticos En el directorio templates/practica de tu cuenta msiaxx tienes varios programas que hay que procesar
Más detallesCLUSTER FING: ARQUITECTURA Y APLICACIONES
CLUSTER FING: ARQUITECTURA Y APLICACIONES Gerardo Ares, Pablo Ezzatti Centro de Cálculo, Instituto de Computación FACULTAD DE INGENIERÍA, UNIVERSIDAD DE LA REPÚBLICA, URUGUAY CONTENIDO Introducción Conceptos
Más detallesEsquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema
Los esquemas repetitivos permiten implementar iteraciones del lenguaje algorítmico (mientras, repetir, para, hasta). Podemos dividir los esquemas según: - Se conozcan el número de iteraciones a priori,
Más detallesOptimización de Rutinas Multinivel de Álgebra Lineal en Sistemas Multicore
Máster en Nuevas Tecnologías en Informática Facultad de Informática Universidad de Murcia Optimización de Rutinas Multinivel de Álgebra Lineal en Sistemas Multicore Autor: Jesús Cámara Moreno Directores:
Más detallesTodo programa en 'C' consta de una o más funciones, una de las cuales se llama main.
LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan
Más detallesLusitania. Pensando en Paralelo. César Gómez Martín
Lusitania Pensando en Paralelo César Gómez Martín cesar.gomez@cenits.es www.cenits.es Esquema Introducción a la programación paralela Por qué paralelizar? Tipos de computadoras paralelas Paradigmas de
Más detallesProcesadores de lenguaje Tema 5 Comprobación de tipos
Procesadores de lenguaje Tema 5 Comprobación de tipos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Sistemas de tipos. Expresiones de tipo. Equivalencia de tipos. Sobrecarga,
Más detallesInformática I. Código Semestre Para Ingeniería Electrónica e Ingeniería de Telecomunicaciones Profesor: Sebastián Isaza
Informática I Código 2547100 Semestre 2014-2 Para Ingeniería Electrónica e Ingeniería de Telecomunicaciones Profesor: Sebastián Isaza Preguntas Informática I (2014-2) Prof. Sebastián Isaza 2 Informática
Más detallesEstructuras de Control
Algorítmica y Lenguajes de Programación Estructuras de Control Estructuras de Control. Introducción Hasta ahora algoritmos han consistido en simples secuencias de instrucciones Existen tareas más complejas
Más detallesIntroducción a los Sistemas Multiprocesadores
Introducción a los Sistemas Multiprocesadores Multiprocesadores estilo Von Neumann Modelos de Organización Modelos de Programación Clasificación de los Multiprocesadores Por qué Sistemas Multiprocesadores?
Más detallesProgramación paralela con OpenMP
Programación paralela con OpenMP Arquitectura de Computadores J. Daniel García Sánchez (coordinador) David Expósito Singh Javier García Blas Óscar Pérez Alonso J. Manuel Pérez Lobato Grupo ARCOS Departamento
Más detallesAlgoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C Sesión 1
Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C Sesión 1 Contenidos: 1. Características generales de C 2. Edición y compilación de un programa C 3. Variables y tipos
Más detallesUsando el Sistema Operativo
Sistemas Operativos Pontificia Universidad Javeriana Enero de 2010 Los sistemas operativos Los sistemas operativos Perspectivas del Computador Concepto general El sistema operativo es parte del software
Más detallesIntroducción a la programación: Contenido. Introducción
Introducción a la programación: Contenido Introducción a la programación:... 1 Introducción... 1 1. Procesamiento automatizado de información... 1 2. Concepto de algoritmo.... 2 3. Lenguajes de programación....
Más detallesTEMA 3: El proceso de compilación, del código fuente al código máquina
TEMA 3: El proceso de compilación, del código fuente al código máquina 3.1 Fase de compilación y linkado (link, montado o enlace) Un programa escrito en un lenguaje de alto nivel, no puede ser ejecutado
Más detallesCDI Arquitecturas que soportan la concurrencia. granularidad
granularidad Se suele distinguir concurrencia de grano fino es decir, se aprovecha de la ejecución de operaciones concurrentes a nivel del procesador (hardware) a grano grueso es decir, se aprovecha de
Más detallesPalabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones.
Palabras reservadas de C++ y C Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones. A continuación se muestra el link del listado de palabras
Más detallesArquitectura de Computadores II Clase #16
Arquitectura de Computadores II Clase #16 Facultad de Ingeniería Universidad de la República Instituto de Computación Curso 2010 Organización general Superescalar Varios pipelines. 2 operaciones enteras,
Más detallesProgramación Concurrente y Paralela. Unidad 1 Introducción
Programación Concurrente y Paralela Unidad 1 Introducción Contenido 1.1 Concepto de Concurrencia 1.2 Exclusión Mutua y Sincronización 1.3 Corrección en Sistemas Concurrentes 1.4 Consideraciones sobre el
Más detallesJava. Introducción a la Programación Orientada a Objetos
Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora
Más detallesIntroducción a Java LSUB. 30 de enero de 2013 GSYC
Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial
Más detalles2.2 Nombres, Ligado y Ámbito
2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el
Más detallesHerramientas para el estudio de prestaciones en clusters de computación científica, aplicación en el Laboratorio de Computación Paralela
Introducción Herramientas Estudio Conclusiones Herramientas para el estudio de prestaciones en clusters de computación científica, aplicación en el Laboratorio de Computación Paralela Ingeniería en Informática
Más detallesProgramación. Test Autoevaluación Tema 4
Programación Test Autoevaluación Tema 4 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.
Más detallesSoluciones a ejercicios de paralelismo y concurrencia
Soluciones a ejercicios de paralelismo y concurrencia J. Daniel García Sánchez (coordinador) David Expósito Singh Javier García Blas Óscar Pérez Alonso J. Manuel Pérez Lobato Arquitectura de Computadores
Más detallesLaboratorio de Arquitectura de Redes. Introducción al lenguaje C
Laboratorio de Arquitectura de Redes Introducción al lenguaje C Introducción al lenguaje C Introducción Características del lenguaje C Funciones en C Identificadores o etiquetas Las librerías y el linkado
Más detallesSíntesis arquitectónica y de alto nivel
Síntesis arquitectónica y de alto nivel Módulo 1. Concepto y fases de la Síntesis de Alto Nivel 1 Diseño de circuitos: la complejidad Tratamiento de problemas de complejidad creciente Rápido desarrollo
Más detallesModelos de Programación Paralela Prof. Gilberto Díaz
Universisdad de Los Andes Facultad de Ingeniería Escuela de Sistemas Modelos de Programación Paralela Prof. Gilberto Díaz gilberto@ula.ve Departamento de Computación, Escuela de Sistemas, Facultad de Ingeniería
Más detallesLaboratorio de Paralelismo OpenMP: ejemplos y ejercicios
Laboratorio de Paralelismo OpenMP: ejemplos y ejercicios > Máquinas y directorios Vamos a trabajar con el siguiente multiprocesador SMP: PowerEdge 6850 (DELL) 4 procesadores Intel Xeon 7100 de doble núcleo
Más detallesTema V Generación de Código
Tema V Generación de Código Una vez que se ha realizado la partición HW/SW y conocemos las operaciones que se van a implementar por hardware y software, debemos abordar el proceso de estas implementaciones.
Más detallesParalelismo en el procesador
2017 Paralelismo en el procesador ARQUITECTURA DE COMPUTADORAS ING. ELMER PADILLA AUTOR: GERARDO ROBERTO MÉNDEZ LARIOS - 20111013326 Ciudad universitaria, Tegucigalpa M.D.C., 04 de mayo del 2017. Contenido
Más detallesTipos de Datos de python (2ª parte):
Tipos de Datos de python (2ª parte): Enteriormente hemos visto algunos de los tipos de datos que maneja python. Vimos: int, float, chr, str, bool También vimos como convertir datos a cada uno de estos
Más detallesProcesadores de lenguaje Tema 8 Generación de código y optimización
Procesadores de lenguaje Tema 8 Generación de código y optimización Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Tipos de código objeto Operaciones básicas en la generación
Más detallesProgramación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++
Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++ OBJETIVO En este documento se presentan las construcciones básicas de orientación a objetos del lenguaje de programación C++, y recomendaciones
Más detallesProcesadores de Lenguaje
Procesadores de Lenguaje Generación de código intermedio Cris%na Tirnauca Domingo Gómez Pérez DPTO. DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN Este tema se publica bajo Licencia: CreaIve Commons BY NC SA
Más detallesBREAK: FORZAR SALIDA BUCLES FOR, WHILE, DO EN C. LOOP. STATEMENT NOT WITHIN LOOP OR SWITCH (CU00545F)
APRENDERAPROGRAMAR.COM BREAK: FORZAR SALIDA BUCLES FOR, WHILE, DO EN C. LOOP. STATEMENT NOT WITHIN LOOP OR SWITCH (CU00545F) Sección: Cursos Categoría: Curso básico de programación en lenguaje C desde
Más detallesAdolfo J. Banchio. FaMAF, IFEG-CONICET, Universidad Nacional de Córdoba. 27 04 10 Seminario de grupo 1
Paralelizar un Código usando OpenMP Adolfo J. Banchio FaMAF, IFEG-CONICET, Universidad Nacional de Córdoba 27 04 10 Seminario de grupo 1 Contenido Introducción Paralelización: por qué OpenMP? Qué es OpenMP?
Más detallesTEMA 1. FUNDAMENTOS DE LA CONCURRENCIA
TEMA 1. FUNDAMENTOS DE LA CONCURRENCIA Ingeniería en Informática Beneficios de la programación Especificación de ejecución Características de los sistemas s Verificación de programas s 2 Bibliografía Programción
Más detallesC1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid
C1 INTRODUCCIÓN AL LENGUAJE C Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid Índice 1. Lenguajes de Programación 1. Definición. 2. Niveles
Más detallesArquitectura e Ingeniería de Computadores. Examen Parcial. 7/02/2012
Apellidos Nombre Grupo: Arquitectura e Ingeniería de Computadores. Examen Parcial. 7/02/2012 Instrucciones.- Cada pregunta consta de cinco afirmaciones, y cada una de las afirmaciones puede ser cierta
Más detallesTema 2. El lenguaje JAVA
Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias
Más detallesDiseño de algoritmos paralelos
Diseño de algoritmos paralelos Curso 2011-2012 Esquema del capítulo Visión general de algunos algoritmos serie. Algoritmo paralelo vs. Formulación paralela Elementos de un Algoritmo paralelo Métodos de
Más detallesOPTIMIZACIÓN DE CÓDIGO
OPTIMIZACIÓN DE CÓDIGO INTRODUCCION La finalidad de la optimización de código es producir un código objeto lo más eficiente posible. En algunos casos también se realiza una optimización del código intermedio.
Más detallesIntroducción. El proceso de traducción
Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso
Más detallesVARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E
Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora
Más detallesProgramación: Estructuras de Control
Programación: 2 Estructuras de Control Contenido 2.1.- Introducción 2.2.- Estructuras de Selección 2.2.1.- Sentencia if 2.2.2.- Sentencia switch 2.3.- Estructuras de Iteración 2.3.1.- Sentencia while 2.3.2.-
Más detallesPrimeros pasos con CUDA. Clase 1
Primeros pasos con CUDA Clase 1 Ejemplo: suma de vectores Comencemos con un ejemplo sencillo: suma de vectores. Sean A, B y C vectores de dimensión N, la suma se define como: C = A + B donde C i = A i
Más detallesSistema Operativo. Repaso de Estructura de Computadores. Componentes Hardware. Elementos Básicos
Sistema Operativo Repaso de Estructura de Computadores Capítulo 1 Explota los recursos hardware de uno o más procesadores Proporciona un conjunto de servicios a los usuarios del sistema Gestiona la memoria
Más detallesIngeniería del software I 9 - Diseño detallado
Diseño detallado Ingeniería del software I 9 - Diseño detallado El diseño de alto nivel no especifica la lógica. Esto es incumbencia del diseño detallado. En este sentido, una notación textual provee mejor
Más detallesEs un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.
Los problemas que se plantean en la vida diaria suelen ser resueltos mediante el uso de la capacidad intelectual y la habilidad manual del ser humano. La utilización de la computadora en la resolución
Más detallesAhora vamos a hablar de la CPU, la Unidad Central de Procesamiento.
Ahora vamos a hablar de la CPU, la Unidad Central de Procesamiento. La CPU es el componente que ejecuta las instrucciones del programa alojado en la memoria del ordenador. Los procesadores están fabricados
Más detallesProcesadores de lenguaje Tema 1 Introducción a los compiladores
Procesadores de lenguaje Tema 1 Introducción a los compiladores Salvador Sánchez, Daniel Rodríguez Departamento de Ciencias de la Computación Universidad de Alcalá Resumen del tema Traductores Estructura
Más detallesCAPÍTULO 2 PROCESADORES SUPERESCALARES
CAPÍTULO 2 PROCESADORES SUPERESCALARES INTRODUCCIÓN Características de los procesadores superescalares Paralelismo Diversificación Dinamismo Arquitectura de un procesador superescalar genérico Características
Más detallesGuillermo Román Díez
Concurrencia Creación de Procesos en Java Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Creación de Procesos en Java 1/18 Concurrencia
Más detallesCap.2. Kernel Sistemas Operativos - Viña del Mar.
Cap.2. Kernel Sistemas Operativos - Viña del Mar. Maximiliano Osorio mosorio@inf.utfsm.cl Universidad Técnica Federico Santa Maria 19 de agosto de 2017 1 / 44 Tabla de contenidos 1 Proceso Protección de
Más detallesESTRUCTURAS DE CONTROL
ESTRUCTURAS DE CONTROL En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa. Con las estructuras de control se puede: De
Más detallesIntroducción al Diseño de Compiladores. Año
Introducción al Diseño de Compiladores Año 2003 1 BIBLIOGRAFÍA [AHO] Compilers. Principles, Techniques, and Tools Aho, Sethi; Adisson-Wesley 1986 [TEU] Compiladores: Conceptos fundamentales. Teufel ; Addison
Más detallesIntroducción al lenguaje C
Introducción al lenguaje C Ampliación de Informática Belarmino Pulido Junquera Índice 1. Presentación del lenguaje C 2. Estructura de un programa en C 3. Tipos de datos escalares 4. Operadores básicos
Más detallesProgramación I.
Programación I toni.navarrete@upf.edu jesus.ibanez@upf.edu Profesores teoría Toni Navarrete e-mail: despacho: toni.navarrete@upf.edu 371 Jesús Ibáñez e-mail: despacho: jesus.ibanez@upf.edu 381 Introducción
Más detallesIntroducción a la Programación
Introducción a la Programación Fundamentos de Programación Ingeniería Informática en Sistemas de Información Alicia Troncoso 1 Contenido l Introducción l Mi primer programa l Etapas a seguir en la programación
Más detallesIntroducción al lenguaje C
Introducción al lenguaje C Programación 2 Profesorado de Informática CeRP del Suroeste, Colonia, Uruguay 15 de marzo de 2016 Programación 2 Introducción al lenguaje C 15 de marzo de 2016 1 / 34 Objetivos
Más detallesESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo
ESTRUCTURA DE DATOS Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo DATOS ESTÁTICOS Su tamaño y forma es constante durante la ejecución
Más detallesTema 5. Soporte lógico de computadoras.
Tema 5. Soporte lógico de computadoras. 5.1 Conceptos generales Como se ha visto previamente, un ordenador consta de dos partes, una la parte física, conocida como "Hardware" y otra, la parte lógica denominada
Más detallesMemoria compartida simétrica
Memoria compartida simétrica Arquitectura de Computadores J. Daniel García Sánchez (coordinador) David Expósito Singh Javier García Blas Óscar Pérez Alonso J. Manuel Pérez Lobato Grupo ARCOS Departamento
Más detallesLa última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.
Manual de Dev-C++ 4.9.9.2 Página 1 de 11 Introducción Dev-C++ es un IDE (entorno de desarrollo integrado) que facilita herramientas para la creación y depuración de programas en C y en C++. Además, la
Más detallesUso de recursos compartidos
Uso de recursos compartidos Cada proceso o hebra se ejecuta de forma independiente. Sin embargo, cuando varias hebras (o procesos) han de acceder a un mismo recurso, se ha de coordinar el acceso a ese
Más detalles2º curso / 2º cuatr. Arquitectura de Computadores. Grado en Ing. Informática. Seminario 1. Herramientas de programación paralela I: Directivas OpenMP
2º curso / 2º cuatr. 2º curso / 2º cuatr. Grado en Ing. Informática Arquitectura de Computadores Seminario 1. Herramientas de programación paralela I: Directivas OpenMP 2 Qué es OpenMP? De dónde viene
Más detallesEstructuras de control selectivas
Práctica 3 Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 2.0.2 Concepto de sentencia y estructura de control El cuerpo de los métodos
Más detallesLección 2 Introducción al lenguaje C
Lección Introducción al lenguaje C Decimal Binario Hexadecimal A B C D E F Octal Equivalencia entre decimal, binario, hexadecimal y octal. Código ASCII (American Standard Code for Information Interchange)
Más detallesPARTE II PROGRAMACION CON THREADS EN C
PARTE II PROGRAMACION CON THREADS EN C II.1 INTRODUCCION Una librería o paquete de threads permite escribir programas con varios puntos simultáneos de ejecución, sincronizados a través de memoria compartida.
Más detallesLenguajes de Programación I
Lenguajes de Programación I Tipos de Datos Compuestos Ernesto Hernández-Novich Copyright c 2006-2010 Registros Registros agrupan datos de tipos heterogéneos para almacenarlos y manipularlos
Más detallesCompiladores e intérpretes Introducción
Introducción Profesor: Eridan Otto Introducción Perspectiva histórica Motivación Definiciones Componentes y fases de un compilador 1 Introducción Definiciónes básicas Traductor: desde un punto de vista
Más detallesEstructuras de control
Estructuras de control Introducción Los algoritmos vistos hasta el momento han consistido en simples secuencias de instrucciones; sin embargo, existen tareas más complejas que no pueden ser resueltas empleando
Más detallesVariables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.
Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1
Más detallesLenguaje de programación. COMPILADORES Unidad I: Introducción al proceso de compilación
COMPILADORES Unidad I: Introducción al proceso de compilación Flor Prof. Flor Narciso GIDyC-Departamento de Computación LABSIULA-Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de
Más detallesTema 3: Resolución de problemas con computadoras 2014
Resolución de problemas La Informática puede definirse también como la ciencia que estudia el análisis y resolución de problemas utilizando computadoras. La computadora es una máquina digital con capacidad
Más detalles