Programación Paralela en OpenMp

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Programación Paralela en OpenMp"

Transcripción

1 Programación Paralela en OpenMp Proyecto PAPIME PE Facultad de Ingeniería Universidad Nacional Autónoma de México 1

2 Utilidad de realizar procesamiento paralelo en computadoras con arquitectura de memoria compartida que permitan la ejecución simultanea de varios hilos. 2

3 Memoria compartida En el hardware de una computadora, la memoria compartida se refiere a un bloque de memoria de acceso aleatorio a la que se puede acceder por varias unidades de procesamiento diferentes. 3

4 Memoria Compartida En software, la memoria compartida Es un método de comunicación entre procesos/hilos, es decir, una manera de intercambiar datos entre programas que se ejecutan al mismo tiempo. Un proceso creará un espacio en la memoria RAM a la que otros procesos pueden tener acceso. 4

5 Arquitectura de Memoria Compartida Casi todas las computadoras actuales cuentan con una arquitectura de memoria compartida con múltiples unidades de procesamiento conectadas a la misma memoria física. 5

6 Multicore La carrera de creación de procesadores cada vez más rápidos sufrió un punto de inflexión con la aparición de procesadores con arquitectura multicore. Esta arquitectura permitía frenar la escalada de consumo de potencia. Las arquitecturas multicore permiten obtener un rendimiento equivalente sin la contraprestación del consumo y esto ha provocado un gran desarrollo en los últimos años. Ejemplo Samsung Galaxy S4 con un procesador con 8 cores. 6

7 Multicore Para poder aprovechar la potencia que ofrecen estos procesadores los desarrolladores de software deben transformar las actuales aplicaciones secuenciales en paralelas. 7

8 Referencia para diseño de programas paralelos Seguir etapas de diseño de un programa paralelo (Ian- Foster) The Multicore Association en su Multicore Programming Practices ofrece un método para escribir software en arquitecturas multicore utilizando Cy C++ Algunos integrantes: CriticalBlue, Freescale, Intel, PolyCore Software, Texas Instruments, Wind River s Virtutech subsidiary. 8

9 Etapas de Diseño Aplicar las etapas en el diseño de programas paralelos : Particionamiento Comunicación Aglomeración Mapeo Particionamiento Aglomeración Comunicación Mapeo 9

10 Etapas de fase de diseño Particionamiento (descomposición de tareas). Detección de niveles de paralelismo y granularidad; así como de algoritmos paralelos. Comunicación (estructura necesaria para coordinar la ejecución). Manejo de alta cohesión y bajo acoplamiento entre subprocesos. Aglomeración: Evaluación de tareas y estructura con respecto al rendimiento y costo, combinando tareas para mejorar. Aplicación de paradigmas de programación paralela. Mapeo. (asignación de tareas a unidades de procesamiento). Decisión de la distribución de los procesos en los procesadores 10

11 Fase Diseño V1 particionamiento comunicación problema tareas subprocesos con comunicación 11

12 Fase Diseño V1 aglomeración mapeo subprocesos con comunicación programas paralelos Paradigmas de programación paralela procesadores Planificación de procesos 12

13 Fase Diseño V2 13

14 Multicore Programming Practices Aborda un conjunto de fases con el objetivo de parelelizar una aplicación: Análisis de la aplicación y diseño de alto nivel: el objetivo de esta fase es analizar las características de la aplicación. Implementaciony diseño de bajo nivel:selección de los patrones de diseño, algoritmos y estructuras de datos para la posterior codificación de la concurrencia necesaria. Depuración: La introducción de concurrencia implica condiciones especiales en la depuración del código. Rendimiento: Es un proceso de optimización en el que se analiza la mejora del rendimiento conseguido, identificando nuevos cuellos de botella en la ejecución del código, incluyendo comunicaciones, sincronización, bloqueos, equilibrado de carga y ubicación de los datos. 14

15 Particionamiento o Descomposición Descomposición de dominio o datos Descomposición funcional o tareas 15

16 Descomposición de dominio Encontrar el elemento mayor en un arreglo de enteros Primero se trabaja en la división de los datos y después es el cómputo asociado 16

17 Descomposición de dominio Encontrar el elemento mayor en un arreglo de enteros CPU 0 CPU 1 CPU 2 CPU 3 17

18 Descomposición de dominio Encontrar el elemento mayor en un arreglo de enteros CPU 0 CPU 1 CPU 2 CPU 3 18

19 Descomposición de dominio Encontrar el elemento mayor en un arreglo de enteros CPU 0 CPU 1 CPU 2 CPU 3 19

20 Descomposición de dominio Encontrar el elemento mayor en un arreglo de enteros CPU 0 CPU 1 CPU 2 CPU 3 20

21 Descomposición de dominio Encontrar el elemento mayor en un arreglo de enteros CPU 0 CPU 1 CPU 2 CPU 3 21

22 Descomposición de dominio Encontrar el elemento mayor en un arreglo de enteros CPU 0 CPU 1 CPU 2 CPU 3 Elba Karen Sáenz García- Oscar René Valdez 22

23 Descomposición de dominio Encontrar el elemento mayor en un arreglo de enteros CPU 0 CPU 1 CPU 2 CPU 3 23

24 Descomposición de dominio Encontrar el elemento mayor en un arreglo de enteros CPU 0 CPU 1 CPU 2 CPU 3 24

25 Descomposición de dominio Encontrar el elemento mayor en un arreglo de enteros CPU 0 CPU 1 CPU 2 CPU 3 25

26 Descomposición de dominio Encontrar el elemento mayor en un arreglo de enteros CPU 0 CPU 1 CPU 2 CPU 3 26

27 Descomposición de dominio Encontrar el elemento mayor en un arreglo de enteros CPU 0 CPU 1 CPU 2 CPU 3 27

28 Descomposición Funcional Primero se trabaja en la división de tareas o funciones y despues en los datos asociados a cada tarea 28

29 Descomposición Funcional f() g() h() q() r() s() 29

30 Descomposición Funcional CPU 1 CPU 0 f() g() CPU 2 h() q() r() s() 30

31 Descomposición Funcional CPU 1 CPU 0 f() g() CPU 2 h() q() r() s() 31

32 Descomposición Funcional CPU 1 CPU 0 f() g() CPU 2 h() q() r() s() 32

33 Descomposición Funcional CPU 1 CPU 0 f() g() CPU 2 h() q() r() s() 33

34 Descomposición Funcional CPU 1 CPU 0 f() g() CPU 2 h() q() r() s() 34

35 Descomposición pipilined 35

36 Gráfica de dependencias Grafica = (nodo, flecha) Nodo por cada variable (excepto variables índice) Constante Operador o función Flechas indican uso de variables y constantes 36

37 for (i = 0; i < 3; i++) a[i] = b[i] / 2.0; Gráfica de dependencias Ejemplo #1 b[0] 2 b[1] 2 b[2] 2 / / / a[0] a[1] a[2] 37

38 for (i = 0; i < 3; i++) a[i] = b[i] / 2.0; Gráfica de dependencias Ejemplo #1 b[0] 2 b[1] 2 b[2] 2 / / / a[0] a[1] a[2] 38

39 for (i = 1; i < 4; i++) a[i] = a[i-1] * b[i]; Gráfica de dependencias Ejemplo #2 a[0] b[1] b[2] b[3] * * * a[1] a[2] a[3] 39

40 for (i = 1; i < 4; i++) a[i] = a[i-1] * b[i]; Gráfica de dependencias Ejemplo #2 a[0] b[1] b[2] b[3] * * * a[1] a[2] a[3] 40

41 a = f(x, y, z); b = g(w, x); t = a + b; c = h(z); s = t / c; Gráfica de dependencias Ejemplo #3 w x y z g b f a h c t / s 41

42 a = f(x, y, z); b = g(w, x); t = a + b; c = h(z); s = t / c; Gráfica de dependencias Ejemplo #3 w x y z g b f a h c t / s 42

43 Gráfica de dependencias for (i = 0; i < 3; i++) a[i] = a[i] / 2.0; Ejemplo #4 a[0] 2 a[1] 2 a[2] 2 / / / a[0] a[1] a[2] 43

44 for (i = 0; i < 3; i++) a[i] = a[i] / 2.0; Gráfica de dependencias Ejemplo #4 a[0] 2 a[1] 2 a[2] 2 / / / a[0] a[1] a[2] 44

45 Otros ejemplos 45

46 Es posible encontrar paralelismo? Renderizar una foto Búsqueda de una palabra en un documento Actualizar una hoja de cálculo Compilar un programa 46

47 Conceptos de Paralelismo 47

48 Paralelismo Existen dos visiones del paralelismo: Paralelismo Hardware: definido por la arquitectura de la máquina Paralelismo Software: Definido por la estructura del programa. Se manifiesta en las instrucciones que no tienen dependencia 48

49 Niveles de paralelismo Paralelismo a nivel de tarea o trabajo: Diferentes tareas se ejecutan simultáneamente en diferentes Unidades de procesamiento (UP). Paralelismo a nivel de programa: Dividir tarea en subtareas y asignarlas a diferentes UP. Paralelismo a nivel de instrucción: Ejecutar instrucciones independientes en forma simultánea. Paralelismo a nivel de bit: De bajo nivel, se logra a través del hardware 49

50 Concurrencia y paralelismo Programa concurrente: Es aquél que define acciones que pueden realizarse simultáneamente Programa paralelo: Es un programa concurrente diseñado para su ejecución en un hardware paralelo Programa distribuido: Es un programa paralelo diseñado para su ejecución en una red de procesadores autónomos que no comparten la memoria 50

51 Modelos de programación Shared Memory Threads Distributed Memory / Message Passing Data Parallel Hybrid Single Program Multiple Data (SPMD) Multiple Program Multiple Data (MPMD) 51

52 Alternativas para modelo de memoria compartida En el caso de memoria compartida. trabajar con procesos (UNIX) usar threads: Pthreads (POSIX), Java, OpenMP 52

53 Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE

54 Qué es OpenMP? API para programación multiproceso en computadoras con arquitectura de memoria compartida, en múltiples plataformas. Formada por directivas del compilador bibliotecas de funciones variables de ambiente, No un lenguaje. Basado en el modelo de hilos. 54

55 Open MP Definido por un grupo de proveedores de hardware y de software AMD (OpenMP ARB 1997) BCS - Barcelona Supercomputing Center CAPS-Entreprise Convey Computer Cray Fujitsu HP IBM Intel Microsoft NEC NVIDIA Oracle Corporation Signalogic The Portland Group, Inc. Texas Instruments Mas información en 55

56 Qué es OpenMP? Modelo de programación paralelo. Paralelismo de memoria compartida. Extensiones para lenguajes de programación existentes (C,C++, Fortran) Combina código serial y paralelo en un solo archivo fuente. 56

57 Algunos Compiladores Compañía Compilador Información GNU gcc Usado en Linux, Solaris, AIX, MacOSX, Windows OpenMP 3.1 y soportado desde GCC 4.7 IBM XL C/C++ / Fortran fopenmp Usado en AIX y Linux. Oracle C/C++ / Fortran Solaris y Linux Intel C/C++ / Fortran (10.1) Windows, Linux y MacOSX. /Qopenmp y -openmp 57

58 Algunas preguntas Qué es un proceso? Qué es un hilo? Qué se comparte entre los hilos? Cuál es la diferencia entre hilo y proceso? 58

59 Proceso Programa en algún estado en ejecución. Poseen espacios de memoria independientes Los cambios de estado (cambios de contexto) son relativamente costosos en términos de tiempo. 59

60 Estados de un proceso 60

61 Estados de un proceso En un principio, un proceso no existe. Una vez creado el proceso pasa al estado denominado Listo(está en condiciones de hacer uso de la CPU en cuanto se le dé la oportunidad. Un proceso puede pasar de Ejecución a Bloqueado cuando ha de esperar porque ocurra un determinado evento o suceso. Espera por la terminación de una operación de E/S o finalización de otra tarea de otro proceso 61

62 Hilos (Thread) Dentro de un proceso puede haber varios hilos de ejecución. Un hilo, también llamado hebra, proceso ligero, flujo, subproceso o thread es un programa en ejecución que comparte la imagen de memoria y otros recursos del proceso con otros hilos. Por tanto, un hilo puede definirse como cada secuencia de control dentro de un proceso que ejecuta sus instrucciones de forma independiente. 62

63 Procesos con un solo hilo y con múltiples hilos Código Datos Archivos Código Datos Archivos Hilo Hilos Mono-hilo Multi-hilo 63

64 Hilos y procesos un proceso un hilo un proceso varios hilos varios procesos un hilo por proceso varios procesos varios hilos por proceso 64

65 Empezando con OpenMP Proyecto PAPIME PE

66 Arquitectura de OpenMP Fork/join (Maestro esclavo) Trabajo Y Datos Compartido entre hilos Maneja sincronización (barreras, otras) 66

67 Fork / Join F O R K J O I N F O R K J O I N Master Thread Parallel Regions 67

68 Sintaxis Directivas o pragmas #pragma omp construct [clause [clause] ] Clausulas: Especifican atributos para compartir datos y calendarización Una pragma en C o C++ es un directivo al compilador. 68

69 Regiones paralelas Master Thread #pragma omp parallel Thread 1 Thread 2 Thread 3 Implicit Barrier 69

70 Regiones paralelas Los hilos son creados desde el pragma parallel. Los datos son compartidos entre los hilos. C/C++ : #pragma omp parallel { bloque código } 70

71 Cuántos hilos? Num. Hilos = Num. Procesadores o núcleos Intel lo usa de esta forma. Se definen más hilos con la variable de ambiente OMP_NUM_THREADS. 71

72 Actividad 1 Compilar la versión serial. #include <stdio.h> int main() { int i; printf( Hola Mundo\n"); for(i=0;i<6;i++) printf("iter:%d\n",i); } printf( Adios \n"); 72

73 Actividad 1 Agregar la directiva para ejecutar las primeras cuatro líneas del main en paralelo. Compilar con la opción -fopenmp Qué sucede? 73

74 Actividad 2 Aumentar el número de hilos a 4 y ejecutar el programa $ export OMP_NUM_THREADS=4 Ejecutar el programa con más hilos y describir lo que sucede. 74

75 Regiones paralelas Número de hilos en la región paralela El número de hilos que se generan para ejecutar una región paralela se controla: a. estáticamente, mediante una variable de entorno: > export OMP_NUM_THREADS=4 b. en ejecución, mediante una función : omp_set_num_threads(4); c. en ejecución, mediante una cláusula del pragma parallel : num_threads(4) 75

76 Work Sharing constructor for #pragma omp paralell #pragma omp for for(i=0;i<100;i++) { Realizar Trabajo(); } Divide las iteraciones entre los hilos. Debe estar especificada en una región paralela 76

77 #pragma omp parallel #pragma omp for for(i = 0; i < 12; i++) c[i] = a[i] + b[i] #pragma omp parallel #pragma omp for i = 0 i = 1 i = 2 i = 3 i = 4 i = 5 i = 6 i = 7 i = 8 i = 9 i = 10 i = 11 Implicit barrier 77

78 Combinando Pragmas Estos dos segmentos de código son equivalentes. #pragma omp parallel { #pragma omp for for (i=0; i< MAX; i++) { res[i] = huge(); } } #pragma omp parallel for for (i=0; i< MAX; i++) { res[i] = huge(); } 78

79 Actividad Modificar el programa de la actividad 1 para dividir el número de iteraciones entre los hilos. 79

80 Regiones paralelas Variables Compartidas y Privadas El hilo maestro tiene como contexto el conjunto de variables del programa, y existe a lo largo de toda la ejecución del programa. Al crearse nuevos hilos, cada uno incluye su propio contexto, con su propia pila, utilizada como stack frame para las rutinas invocadas por el hilo Las variables definidas por el hilo maestro son compartidas por todos los hilos. Sin embargo, algunas variables deberán ser propias de cada, privadas.. 80

81 Condiciones de carrera Una condición de carrera (race condition) ocurre cuando dos o mas hilos acceden a un recurso compartido sin control. Lo más común es el conflicto en el almacenamiento Acceso concurrente de la misma dirección de memoria por varios hilos Al menos un hilo está escribiendo 81

82 Variables Compartidas y Privadas Thread Private Variables Shared Variables Private Variables Thread Shared-Memory Model and Threads 82

83 Ejemplo descomposición de dominio código secuencial: int a[1000], i; for (i = 0; i < 1000; i++) a[i]=foo(i); Thread 0: for (i=0;i<500; i++) a[i] = foo(i); Thread 1: for (i=500;i<1000; i++) a[i] = foo(i); Private Shared 83

84 Descomposición Funcional volatile int e; main () { int x[10], j, k, m; j = f(x, k); m = g(x. k); } Variables locales a funciones: Private int f(int *x, int k) { Thread 0 int a; a = e * x[k] * x[k]; return a; } int g(int *x, int k) { Thread 1 int a; k = k-1; a = e / x[k]; return a; } 84

85 shared(x) Clausulas Se declara la variable X como compartida por todos los hilos. Sólo existe una copia, y todos los hilos acceden y modifican dicha copia. private(y) R.P.: Cláusulas de ámbito Se declara la variable Y como privada en cada hilo. Se crean P copias, una por hilo(sin inicializar!). Se destruyen al finalizar la ejecución de los hilos. 85

86 Ejemplo Realizar un programa que sume dos arreglos unidimensionales y los almacene en un tercer arreglo. float x, y; int I, c[n]; #pragma omp parallel for private(x,y) for(i=0; i<n; i++) { x = a[i]; y = b[i]; c[i] = x + y; } 86

87 Ejemplo problemas con private Se requiere realizar el producto entre dos vectores de dimensión n. float prod_punto(float* a, float* b, int N) { float sum = 0.0; #pragma omp parallel for for (int i=0; i<n; i++) { sum += a[i] * b[i]; } return sum; } 87

88 Funciones de ambiente void omp_set_num_threads(int nthreads) int omp_get_num_threads(void) int omp_get_max_threads(void) int omp_get_thread_num(void) int omp_get_num_procs(void) 88

89 Regiones paralelas Quién soy yo? Cuántos somos? Cada hilo paralelo se identifica por un número. El 0 es el hilo maestro. Dos funciones de la bibliotreca omp.h: tid = omp_get_thread_num(); devuelve el identificador del thread. nth = omp_get_num_threads(); devuelve el número de hilos generados. 89

90 Ejercicio Realizar un programa donde dentro de una región paralela se muestren los identificadores de los hilos y el número total de hilos. 90

91 Región crítica Una región o sección crítica es una secuencia de instrucciones que no debe ser interrumpida por otros proceso 91

92 Constructor critical float dot_prod(float* a, float* b, int N) { float sum = 0.0; #pragma omp parallel for for (int i=0; i<n; i++) { #pragma omp critical sum += a[i] * b[i]; } return sum; } // Sintaxis: #pragma omp critical [(lock_name)] Cuál será el problema aquí? 92

93 #include <omp.h> #include <stdio.h> #include <stdlib.h> Ejercicio- paralelizar } max = a[0]; #define SIZE 10 int main() { int i; int max; int a[size]; for (i = 0; i < SIZE; i++) { a[i] = rand(); printf("%d\n", a[i]); for (i = 1; i < SIZE; i++) { if (a[i] > max) { max = a[i]; } } } printf("max = %d\n", max); 93

94 Asignando Iteraciones La cláusula schedule permite dividir las iteraciones de los ciclos entre los hilos, indica como las iteraciones se asignan a los hilos. 94

95 Clausula schedule schedule(static,[chunk]) Bloques de iteraciones de tamaño chunk a los hilos Distribución Round robin schedule (dynamic,[chunk]) Los hilos toman un numero chunk de iteraciones, cuando estan sin trabajo. schedule(guided,[chunck]) Cada thread toma iteraciones dinámicamente y progresivamente va tomando menos iteraciones. 95

96 96

97 Ejemplo #pragma omp parallel for schedule (static, 8) for( int i = start; i <= end; i += 2 ) { if ( TestForPrime(i) ) gprimesfound++; } 97

98 Referencias Introduction to parallel programming, Intel Software College, junio 2007 Multicore programming practices guide, The Multicore Association R. Chandra.Parallel Programming in OpenMP,Morgan Kaufmann, B. Chapman,Using OpenMP, The MIT Press,

99 Programación Paralela en OpenMp Parte 2 Proyecto PAPIME PE Facultad de Ingeniería UNAM 99

100 Clausula reduction Las operaciones de reducción son comunes en muchas aplicaciones paralelas. Utilizan variables a las que acceden todos los procesos/hilos y sobre las que se efectúa alguna operación de acumulación en modo atómico. 100

101 Cláusula reduction #pragma omp reduction(operator:variable) #pragma omp parallel private(x) reduction(+:sum) { } X = sum = sum + X; La operador de reducción a utilizar. OJO: no se sabe en qué orden se va a ejecutar la operación --> debe ser conmutativa (cuidado con el redondeo). 101

102 Operaciones utilizados en reducciones (C/C++) Operator Initial Value Operator Initial Value + 0 & 0 * && 1 ^

103 Actividad Realizar un programa que realice el producto punto de dos vectores de dimensión n. Paralelizar el programa. 103

104 Cálculo del número Pi π= 0 1 4/(1+x2 ) dx La Regla de rectángulo consiste de estimar el área debajo de la curva y=4/(1+x2) entre x=0 y x=1 mediante áreas de rectángulos 104

105 Código Serial #include <stdio.h> #include <time.h> long long num_steps = ; double step; int main(int argc, char* argv[]) { clock_t start, stop; double x, pi, sum=0.0; int i; start = clock(); } x = (i +.5)*step; sum = sum + 4.0/(1.+ x*x); pi = sum*step; stop = clock(); printf( El valor de Pi es %15.12f\n",pi); printf( El tiempo para calcular PI fue %f segundos\n",((double)(stop - start)/1000.0)); { for (i=0; i<num_steps; i++) } return 0; 105

106 Para medir tiempo en OpenMP double empezar,terminar; empezar=omp_get_wtime( ); código terminar=omp_get_wtime(); printf( TIEMPO=%lf\n,empezar-terminar) El resultado es en segundos. 106

107 Una Solución #include <omp.h> static long num_steps = ; double step; #define NUM_THREADS 2 void main () { int i; double x, pi, sum[num_threads]; step = 1.0/(double) num_steps; omp_set_num_threads(num _THREADS) Elba Karen Sáenz García-} Oscar René Valdez #pragma omp parallel { double x; int id; id = omp_get_thread_num(); sum[id] = 0; #pragma omp for for (i=id;i< num_steps; i++){ x = (i+0.5)*step; sum[id] += 4.0/(1.0+x*x); } } for(i=0, pi=0.0;i<num_threads;i++) pi += sum[i] * step; 107

108 Otra Solución #include <omp.h> static long num_steps = ; double step; #define NUM_THREADS 2 void main () { int i; double x, pi, sum = 0.0; step = 1.0/(double) num_steps; omp_set_num_threads(num_threads); #pragma omp parallel for reduction(+:sum) private(x) for (i=1;i<= num_steps; i++){ x = (i-0.5)*step; sum = sum + 4.0/(1.0+x*x); } pi = step * sum; } 108

109 Clausula firstprivate Las variables privadas no se inicializan y al terminar la región paralela tienen un valor indefinido. Para inicializar una variable privada se utiliza firstprivate. 109

110 Ejemplo X = Y = Z = 0; #pragma omp parallel private(y) firstprivate(z) {... X = Y = Z = 1; }... valores dentro de la región paralela? X = 0 Y =? Z = 0 valores fuera de la región paralela? X = 1 Y =? (0) Z =? (0) 110

111 Cómo se puede paralelizar el siguiente código? x[0] = complex_function(); for (i=0;j<n;i++) { for (j=1;j<4;j++) x[j]=g(i,x[j-1]); sol[i] = x[1] x[3];} Se pueden dividir las itereciones del ciclo exterior si j y x son privadas. Sin embargo, x[0] se necesita en la primera iteración del bucle interior. 111

112 Una solución x[0] = complex_function(); #pragma omp parallel for private[j] firstprivate(x) for (i-0;j<n;i++) { for (j=1;j<4;j++) x[j]=g(i,x[j-1]); sol[i] = x[1] x[3];} 112

113 Descomposicion Funcional v = alpha(); w = beta(); x = gamma(v, w); y = delta(); printf ("%6.2f\n", epsilon(x,y)); alpha beta gamma delta epsilon 113

114 Cómo se paraleliza? alpha beta gamma delta epsilon 114

115 Paralelismo funcional Secciones Paralelas Secciones independientes de código, se pueden ejecutar de forma concurrente #pragma omp parallel sections { #pragma omp section phase1(); #pragma omp section phase2(); #pragma omp section phase3(); } Serial Parallel 115

116 Rep. de tareas: funciones Constructor section Permite usar paralelismo de funcional (descomposición funcional). Reparte secciones de código independiente a hilos diferentes. Cada sección paralela es ejecutada por un sólo hilo, y cada hilo ejecuta ninguna o alguna sección. Una barrera implícita sincroniza el final de las secciones o 116

117 Posible solución #pragma omp parallel sections { #pragma omp section /* Opcional */ v = alpha(); #pragma omp section w = beta(); #pragma omp section y = delta(); } x = gamma(v, w); printf ("%6.2f\n", epsilon(x,y)); } 117

118 Otra Posibilidad alpha gamma beta delta Ejecutar alpha y beta en paralelo. Ejecutar gama y delta en paralelo. epsilon 118

119 Otra posibilidad #pragma omp parallel sections { #pragma omp section v=alpha(); #pragama omp section w=beta(); } #pragma omp parallel sections { #pragma omp section y=delta(); #pragma omp section x=gamma(v,w); } printf( %6.2f\n,epsilon(x,y); 119

120 Con dos secciones #pragma omp parallel { #pragma omp sections { #pragma omp section v = alpha(); #pragma omp section w = beta(); } #pragma omp sections { #pragma omp section x = gamma(v, w); #pragma omp section y = delta(); } } printf ("%6.2f\n", epsilon(x,y)); 120

121 Ejemplo de secciones #pragma omp parallel sections { #pragma omp section for(i=0;i<n;i++) c[i]=a[i]+b[i]; #pragma omp section for(j=0;j<n;j++) d[j]=e[j]+f[j]; } 121

122 Una posibilidad mejor #pragma omp parallel { #pragma omp for for(i=0;i<n;i++) c[i]=a[i]+b[i]; #pragma omp for for(j=0;j<n;j++) d[j]=e[j]+f[j]; } 122

123 o simplemente #pragma parallel for for(i=0;i<n;i++) { c[i]=a[i]+b[i]; d[i]=e[i]+f[i]; } 123

124 Barreras Implícitas Algunos constructores tiene barreras implícitas Parallel For Single Barreras no necesarias perjudican el desempeño 124

125 Ejercicio Paralelizar los dos códigos proporcionados, utilizando los constructores y clausulas vistos. 125

126 Referencias OpenMP 2.5 Specifications Rohit Chandra, Parallel Programming in OpenMP. Morgan Kaufmann Publishers. Comunidad The community of OpenMP researchers and developers in academia and industry Articulos conferencias: WOMPAT, EWOMP, WOMPEI, IWOMP 126

127 Programación Paralela en OpenMp Parte 3 Proyecto PAPIME PE Facultad de Ingeniería UNAM 127

128 Constructor Barrier Barrera Explicita Cada hilo espera hasta que todos lleguen a la barrera #pragma omp parallel shared (A, B, C) { DoSomeWork(A,B); printf( Processed A into B\n ); #pragma omp barrier DoSomeWork(B,C); printf( Processed B into C\n ); } 128

129 Constructor single Define un bloque básico de código, dentro de una región paralela, que debe ser ejecutado por un único hilo. Ejemplo, una operación de entrada/salida. No se especifica qué hilo ejecutará la tarea. 129

130 Constructor single #pragma omp single #pragma omp parallel { DoManyThings(); #pragma omp single { ExchangeBoundaries(); } // Hilos esperan } DoManyMoreThings(); 130

131 #pragma omp parallel {... ; #pragma omp single inicializar(a); #pragma omp for for(i=0; i<n; i++) A[i] = A[i] * A[i] + 1; parallel for single... ; } #pragma omp single copiar(b,a); single 131

132 Constructor maestro #pragma omp master { } #pragma omp parallel { DoManyThings(); #pragma omp master { // si no es el maestro,salta ExchangeBoundaries(); } DoManyMoreThings(); } 132

133 #include <omp.h> #include <stdio.h> int main( ) { int a[5], i; #pragma omp parallel { #pragma omp for for (i = 0; i < 5; i++) a[i] = i * i; #pragma omp master for (i = 0; i < 5; i++) printf_s("a[%d] = %d\n", i, a[i]); #pragma omp barrier #pragma omp for for (i = 0; i < 5; i++) a[i] += i; } } 133

134 Barreras Implícitas Algunos constructores tiene barreras implícitas Parallel For Single Barreras no necesarias perjudican el desempeño 134

135 Clausula nowait Permite ignorar barreras implicitas #pragma omp for nowait for(...) {...}; #pragma single nowait { [...] } #pragma omp for schedule(dynamic,1) nowait for(int i=0; i<n; i++) a[i] = bigfunc1(i); #pragma omp for schedule(dynamic,1) for(int j=0; j<m; j++) b[j] = bigfunc2(j); 135

136 Constructor atomic Asegura que una posición específica de memoria debe ser modificada de forma atómica, sin permitir que múltiples hilos intenten escribir en ella de forma simultánea. (sección critica). La sentencia debe tener una de las siguientes formas: x <operacion-binaria> = <expr> x++ ++x x x 136

137 Ejemplo atomic #include <stdio.h> #include <omp.h> #define MAX 10 int main() { int count = 0; #pragma omp parallel num_threads(max) { #pragma omp atomic count++; } printf("number of threads: %d\n", count); } 137

138 Paralelismo anidado Por defecto no es posible anidar regiones paralelas, hay que indicarlo explícitamente mediante: una llamada a una función omp_set_nested(true); una variable de entorno > export OMP_NESTED=TRUE Una función devuelve el estado de dicha opción: omp_get_nested(); (true o false) 138

139 Paralelismo anidado Master Región paralela externa Región paralela anidada Región paralela externa 139

140 Paralelismo anidado OpenMP 3.0 mejora el soporte al paralelismo anidado: -La función omp_set_num_threads() puede ser invocada dentro de una región paralela para controlar el grado del siguiente nivel de paralelismo. Permite conocer el nivel de anidamiento mediante omp_get_level() y omp_get_active_level(). Se puede tener acceso al identificador del padre de nivel n omp_get_ancestor_thread_num(n)y al número de threads en dicho nivel. 140

141 #include <omp.h> #include <stdio.h> Paralelismo anidado void report_num_threads(int level) { #pragma omp single { printf("level %d: number of threads in the team - %d\n", level, omp_get_num_threads()); } } 141

142 int main() { omp_set_dynamic(0); #pragma omp parallel num_threads(2) { report_num_threads(1); #pragma omp parallel num_threads(2) { report_num_threads(2); #pragma omp parallel num_threads(2) { report_num_threads(3); } } } return(0); } 142

143 Variable de ambiente SUNW_MP_MAX_POOL_THREADS Máximo numero de hilos esclavos en una región paralela Valor por defecto

144 Referencias R. Chandra et al,parallel Programming in OpenMP,Morgan Kaufmann, B. Chapman et al Using OpenMP, The MIT Press, Introduction to parallel programming, Intel Software College, junio

2º 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. 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 detalles

Cómputo en paralelo con OpenMP 1

Cómputo en paralelo con OpenMP 1 Cómputo en paralelo con OpenMP 1 Miguel Vargas-Félix [email protected] http://www.cimat.mx/~miguelvargas CIMAT, September 2, 2015 1/34 Velocidad de los procesadores de escritorio Recientemente, la

Más detalles

Laboratorio de Paralelismo OpenMP: ejemplos y ejercicios

Laboratorio 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 detalles

Arquitectura de Computadores: Exámenes y Controles

Arquitectura 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 detalles

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

Lusitania. Pensando en Paralelo. César Gómez Martín Lusitania Pensando en Paralelo César Gómez Martín [email protected] www.cenits.es Esquema Introducción a la programación paralela Por qué paralelizar? Tipos de computadoras paralelas Paradigmas de

Más detalles

Sistemas Operativos Práctica 3

Sistemas Operativos Práctica 3 Sistemas Operativos Práctica 3 Ing. Andrés Bustamante [email protected] Ingeniería de Sistemas Facultad de Ingeniería Universidad de la Amazonia 2009 1. Objetivo El objetivo de la práctica es que

Más detalles

Adolfo J. Banchio. FaMAF, IFEG-CONICET, Universidad Nacional de Córdoba. 27 04 10 Seminario de grupo 1

Adolfo 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 detalles

Programación Híbrida e Introducción a la Programación de GPUs

Programación Híbrida e Introducción a la Programación de GPUs Programación Híbrida e Introducción a la Programación de GPUs Fernando Robles Morales Instituto Nacional de Medicina Genómica Enrique Cruz Martínez Universidad Autónoma de la ciudad de México CONTENIDO

Más detalles

Primeros pasos con CUDA. Clase 1

Primeros 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 detalles

Preliminares. Tipos de variables y Expresiones

Preliminares. Tipos de variables y Expresiones Preliminares. Tipos de variables y Expresiones Felipe Osorio Instituto de Estadística Pontificia Universidad Católica de Valparaíso Marzo 5, 2015 1 / 20 Preliminares Computadoras desarrollan tareas a un

Más detalles

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C Algoritmo y Estructura de Datos Ing. M. Laura López 1 Estructura de un programa en C 2 Estructura de un programa en C #include Archivos de cabecera # define Definición de constantes Declaraciones Globales

Más detalles

Sistemas Operativos Practica 1: procesos y concurrencia.

Sistemas Operativos Practica 1: procesos y concurrencia. Sistemas Operativos Practica 1: procesos y concurrencia. Objetivos: Introducir al alumno a los conceptos de programa, concurrencia, paralelismo y proceso o tarea. Manejo del concepto de concurrencia haciendo

Más detalles

Threads, SMP y Microkernels. Proceso

Threads, SMP y Microkernels. Proceso Threads, SMP y Microkernels Proceso Propiedad de los recursos a un proceso se le asigna un espacio de dirección virtual para guardar su imagen Calendarización/ejecución sigue una ruta de ejecución la cual

Más detalles

Fundamentos de Programación 2017-I

Fundamentos de Programación 2017-I Fundamentos de Programación 2017-I Fundamentos para la construcción de código a partir del algoritmo Objetivo: El alumno construirá programas utilizando el lenguaje de programación C a través de un análisis

Más detalles

Fundamentos de programación

Fundamentos de programación Fundamentos de programación Estructuras de Control Estructuras de control Estructuras de control Estructura secuencial Estructura alternativa Sentencias if, if else Sentencias if else anidadas El operador

Más detalles

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introduccion al Lenguaje C Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introducción C es un lenguaje de programación creado en 1972 por

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo 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 detalles

Procesos e Hilos en C

Procesos e Hilos en C Procesos e Hilos en C 6 de febrero de 2012 En esta sesión vamos a escribir programas en lenguaje C que utilicen hilos y procesos para comparar el rendimiento del sistema ante la gestión de unos y otros.

Más detalles

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA APUNTES DE JAVA FUNCIONAMIENTO DE UN PROGRAMA Assembler Ensamblador Ejecuta Programador Programa fuente BASIC Interprete Ejecuta C, C++, Pascal Compilador Compila Ejecuta Programa fuente Programa Objeto

Más detalles

Módulo: Modelos de programación para Big Data

Módulo: Modelos de programación para Big Data Program. paralela/distribuida Módulo: Modelos de programación para Big Data (título original: Entornos de programación paralela basados en modelos/paradigmas) Fernando Pérez Costoya Introducción Big Data

Más detalles

El lenguaje C. 1. Identificadores, constantes y variables

El lenguaje C. 1. Identificadores, constantes y variables Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria

Más detalles

Tema 2. El lenguaje JAVA

Tema 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 detalles

4. Programación Paralela

4. Programación Paralela 4. Programación Paralela La necesidad que surge para resolver problemas que requieren tiempo elevado de cómputo origina lo que hoy se conoce como computación paralela. Mediante el uso concurrente de varios

Más detalles

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía Tema 3 SUBRUTINAS ÍNDICE Definición e instrucciones básicas Soporte para el tratamiento de subrutinas (ejecución de la subrutina y gestión del bloque de activación) Interrupciones vs llamadas a procedimiento

Más detalles

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática Fundamentos de la informática 2. Algoritmos, diagramas de flujo y pseudocódigo Contenido Algoritmos Diagramas de flujo

Más detalles

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

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria 1.2. Jerarquía de niveles de un computador Qué es un computador? Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria Es un sistema tan complejo

Más detalles

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A. SISTEMAS INFORMÁTICOS I Junio 2003 INGENIERÍA EN INFORMÁTICA - Código Carrera 55 - Código Asignatura 077 Tipo de Examen: A NO SE PERMITE EL USO DE NINGÚN MATERIAL Tiempo: 2 horas Apellidos: Nombre: DNI:

Más detalles

Multiplicación de Matrices en Sistemas cc-numa Multicore. Autor: Jesús Cámara Moreno Director: Domingo Giménez Cánovas

Multiplicación de Matrices en Sistemas cc-numa Multicore. Autor: Jesús Cámara Moreno Director: Domingo Giménez Cánovas Multiplicación de Matrices en Sistemas cc-numa Multicore Autor: Jesús Cámara Moreno Director: Domingo Giménez Cánovas Índice de Contenido 1. Introducción 2. Línea de Investigación 3. Sistemas Empleados

Más detalles

Tema 2 Introducción a la Programación en C.

Tema 2 Introducción a la Programación en C. Tema 2 Introducción a la Programación en C. Contenidos 1. Conceptos Básicos 1.1 Definiciones. 1.2 El Proceso de Desarrollo de Software. 2. Lenguajes de Programación. 2.1 Definición y Tipos de Lenguajes

Más detalles

Lenguajes de programación

Lenguajes de programación Lenguajes de programación Un computador solo entiende lenguaje binario Un procesador tiene un conjunto finito de operaciones binarias Un programa de computador es una secuencia de estas instrucciones Etapas

Más detalles

Programación Estructurada

Programación Estructurada Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 2 Nombre: El lenguaje de programación C Contextualización Una constante en todos los lenguajes de programación (viejos y nuevos) es la implementación

Más detalles

T5-multithreading. Indice

T5-multithreading. Indice T5-multithreading 1.1 Indice Proceso vs. Flujos Librerías de flujos Comunicación mediante memoria compartida Condición de carrera Sección Crítica Acceso en exclusión mutua Problemas Abrazos mortales 1.2

Más detalles

Nociones básicas de computación paralela

Nociones básicas de computación paralela Nociones básicas de computación paralela Javier Cuenca 1, Domingo Giménez 2 1 Departamento de Ingeniería y Tecnología de Computadores Universidad de Murcia 2 Departamento de Informática y Sistemas Universidad

Más detalles

Estructuras en LabVIEW.

Estructuras en LabVIEW. Estructuras en LabVIEW. Sumario: 1. Ejecución según el flujo de datos. 2. Estructuras básicas disponibles en LabVIEW. a) Estructura Sequence. b) Estructura Case. c) Estructura For Loop. d) Estructura While

Más detalles

Programación. Test Autoevaluación Tema 3

Programación. Test Autoevaluación Tema 3 Programación Test Autoevaluación Tema 3 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 detalles

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC. Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC. Variables Conceptos de Memoria Una variable es un espacio en la memoria del PC Cada variable tiene un nombre, un tipo, un tamaño y un valor

Más detalles

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria. Punteros Definición Un puntero es un dato que contiene una dirección de memoria. NOTA: Existe una dirección especial que se representa por medio de la constante NULL (definida en ) y se emplea

Más detalles

Middlewar Middlew es par ar a es par Sistemas de Alto Re R ndimiento José M. Peña

Middlewar Middlew es par ar a es par Sistemas de Alto Re R ndimiento José M. Peña Middlewares para Sistemas de Alto Rendimiento José M. Peña Contenidos Middlewares: Ejemplo lenguajes/entornos de programación: Lenguaje de programación paralela: OpenMP Ejemplos de servicios HPC: Sistemas

Más detalles

2.2 Nombres, Ligado y Ámbito

2.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 detalles

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

Tema: Clases y Objetos en C#. Parte II. Programación II. Guía No. 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Clases y Objetos en C#. Parte II. Objetivos Implementar clases, objetos, propiedades, métodos y

Más detalles

Lenguaje de programación C. Introducción

Lenguaje de programación C. Introducción Lenguaje de programación C Introducción 1 Elementos del lenguaje C Colección de funciones Estas funciones contienen declaraciones, sentencias, expresiones y otros elementos que en conjunto indican a la

Más detalles

Programación estructurada (Introducción a lenguaje C)

Programación estructurada (Introducción a lenguaje C) Programación estructurada (Introducción a lenguaje C) M. en C. Sergio Luis Pérez Pérez UAM CUAJIMALPA, MÉXICO, D. F. Trimestre 15-I Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada

Más detalles

IMPLEMENTACIÓN DE COMPUTACIÓN DE ALTO RENDIMIENTO Y PROGRAMACIÓN PARALELA EN CÓDIGOS COMPUTACIONALES CARLOS ANDRÉS ACOSTA BERLINGHIERI

IMPLEMENTACIÓN DE COMPUTACIÓN DE ALTO RENDIMIENTO Y PROGRAMACIÓN PARALELA EN CÓDIGOS COMPUTACIONALES CARLOS ANDRÉS ACOSTA BERLINGHIERI IMPLEMENTACIÓN DE COMPUTACIÓN DE ALTO RENDIMIENTO Y PROGRAMACIÓN PARALELA EN CÓDIGOS COMPUTACIONALES CARLOS ANDRÉS ACOSTA BERLINGHIERI UNIVERSIDAD EAFIT ESCUELA DE INGENIERÍAS ÁREA DE DISEÑO MEDELLÍN 2009

Más detalles

HP - UX. Qué es HP UX?

HP - UX. Qué es HP UX? HP - UX Integrantes: Cisneros Pedraza Christian. Jiménez Nieves José Manuel. Villanueva Armenta Fernando. Qué es HP UX? Hp UX es una variante de Unix creada por los desarrolladores de software de HP. Provee

Más detalles

Introducción al Lenguaje de Programación C

Introducción al Lenguaje de Programación C Introducción al Lenguaje de Programación C Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes Lenguaje de Programación C Fue diseñado

Más detalles

Estructuras de control

Estructuras 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 detalles

TIPOS DE DATOS BASICOS EN LENGUAJE C

TIPOS DE DATOS BASICOS EN LENGUAJE C TIPOS DE DATOS BASICOS EN LENGUAJE C TIPO char int float double void ANCHO EN BIT 64 0 TIPOS DE DATOS RANGO EN PC -12 a 127 3.4E-3 a 3.4E+3 1.7E-30 a 1.7E+30 sin valores TIPO ANCHO EN BIT RANGO EN PC char

Más detalles

Computación Matricial y Paralela

Computación Matricial y Paralela Computación Matricial y Paralela Programación híbrida Javier Cuenca Dpto. de Ingeniería y Tecnología de Computadores Domingo Giménez Dpto. de Informática y Sistemas Universidad de Murcia http://dis.um.es/~domingo

Más detalles

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

Las optimizaciones pueden realizarse de diferentes formas. Las optimizaciones se realizan en base al alcance ofrecido por el compilador. Unidad III: Optimización Las optimizaciones pueden realizarse de diferentes formas. Las optimizaciones se realizan en base al alcance ofrecido por el compilador. La optimización va a depender del lenguaje

Más detalles

Estructuras de Control

Estructuras 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 detalles

TEMA 4. ESTRUCTURAS DE CONTROL

TEMA 4. ESTRUCTURAS DE CONTROL M.P. Sesmero, P. de Toledo, F.J. Ordoñez, J. Gómez-Romero, J.A. Iglesias, J.L. Mira Programación TEMA 4. ESTRUCTURAS DE CONTROL Grado en Ingeniería en Tecnologías Industriales Programación CONTENIDOS 4.1.

Más detalles

Estructuras de Repetición (Hacer-Mientras)

Estructuras de Repetición (Hacer-Mientras) Estructuras de Repetición (Hacer-Mientras) Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería

Más detalles

Guía práctica de estudio 04: Clases y objetos

Guía práctica de estudio 04: Clases y objetos Guía práctica de estudio 04: Clases y objetos Elaborado por: M.C. M. Angélica Nakayama C. Ing. Jorge A. Solano Gálvez Autorizado por: M.C. Alejandro Velázquez Mena Guía práctica de estudio 04: Clases y

Más detalles

Arquitecturas vectoriales, SIMD y extensiones multimedia

Arquitecturas vectoriales, SIMD y extensiones multimedia Arquitecturas vectoriales, SIMD y extensiones multimedia William Stallings, Organización y Arquitectura de Computadores, 5ta. ed., Capítulo 16: Procesamiento Paralelo. Andrew S. Tanenbaum, Organización

Más detalles

Lenguaje de programación con JAVA

Lenguaje de programación con JAVA Pág. N. 1 Lenguaje de programación con JAVA Familia: Editorial: Autor: Tecnología de la información y computación Macro Eric Gustavo Coronel Castillo ISBN: 978-612-304-288-2 N. de páginas: 360 Edición:

Más detalles

SISTEMAS OPERATIVOS Arquitectura de computadores

SISTEMAS OPERATIVOS Arquitectura de computadores SISTEMAS OPERATIVOS Arquitectura de computadores Erwin Meza Vega [email protected] Esta presentación tiene por objetivo mostrar los conceptos generales de la arquitectura de los computadores, necesarios

Más detalles

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

Guía práctica de estudio 05: Diagramas de flujo Guía práctica de estudio 05: Diagramas de flujo Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Revisado por: Ing. Laura Sandoval Montaño Guía práctica de estudio 05: Diagramas de

Más detalles

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC. Programación n Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño o Vargas MsC. Variables y expresiones aritméticas Variables Conceptos de Memoria Una variable es un espacio en la memoria

Más detalles

Principios de Computadoras II

Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Ing. Ricardo Coppo [email protected] Qué es un Objeto? Un objeto es una instancia de una clase Las clases actuán como modelos que permiten la creación

Más detalles

Aspectos de los LP. Diseño de compiladores. Estático vs. Dinámico. Estático vs. Dinámico. Scope. Scope 24/03/2015

Aspectos de los LP. Diseño de compiladores. Estático vs. Dinámico. Estático vs. Dinámico. Scope. Scope 24/03/2015 Aspectos de los LP Diseño de compiladores Lenguajes de Programación Antes de comenzar con la construcción de un compilador, debemos comprender los conceptos basicos del lenguaje de programación con el

Más detalles

Estructuras de Repetición (Repita para)

Estructuras de Repetición (Repita para) Estructuras de Repetición (Repita para) Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes Programación Digital I 1 REPITA PARA Fijar

Más detalles

Introducción a C++ y Code::Blocks

Introducción a C++ y Code::Blocks Introducción a C++ y Práctica Imperativo Clase 1 Luis Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 28 de mayo de 2010 Menu de esta Tarde Funcional Vs. Imperativo (Intérprete

Más detalles

Ejercicios de jerarquía de memoria

Ejercicios de jerarquía de memoria Ejercicios de jerarquía de memoria 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 Grupo ARCOS Departamento

Más detalles

Modelo de aplicaciones CUDA

Modelo de aplicaciones CUDA Modelo de aplicaciones CUDA Utilización de GPGPUs: las placas gráficas se utilizan en el contexto de una CPU: host (CPU) + uno o varios device o GPUs Procesadores masivamente paralelos equipados con muchas

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

Diseño de algoritmos paralelos

Diseño de algoritmos paralelos PROGRAMACIÓN CONCURRENTE TEMA 7 Diseño de algoritmos paralelos ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN DISEÑO DE ALGORITMOS PARALELOS - TEMA 7.2 Algoritmos

Más detalles

Programación Estructurada

Programación Estructurada Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 7 Nombre: Estructuras de datos Contextualización Cuando un programa suele ser muy extenso, un problema clásico de los programadores es la

Más detalles

Contenido. Capítulo 1. Introducción a lenguaje C 1

Contenido. Capítulo 1. Introducción a lenguaje C 1 Contenido Capítulo 1. Introducción a lenguaje C 1 Introducción... 2 Qué es un lenguaje de programación?... 2 Tipos de lenguajes de programación... 2 Introducción a lenguaje C... 2 Historia de lenguaje

Más detalles

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Introducció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 detalles

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS Caso 1: 1.- Necesitamos un cd o Dvd para grabar alguna de las versiones de livecd de Linux. 2.- Liga de una

Más detalles

Programación en Paralelo con MPI en Clusters Linux

Programación en Paralelo con MPI en Clusters Linux Programación en Paralelo con MPI en Clusters Linux Francisco Javier Rodríguez Arias 13 de marzo de 2006 Problema y Motivación En física se requiere hacer muchos cálculos. Para eso se hacen programas de

Más detalles

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

Sistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria Sistemas operativos UPCO ICAI Departamento de Electrónica y Automática 1 Hasta ahora hemos visto Relación programa-sistema operativo Gestión de memoria Reserva para la ejecución Pilas, heap, memoria de

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final Trabajo Final 1 Objetivo Comprender (en gran parte) un programa desarrollado en: C++ (Core ) Generador de código / Ejecución de comandos Flex (Lex) Lexer Genera un Analizador Léxico en C http://en.wikipedia.org/wiki/lex_(software)

Más detalles

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten

Más detalles

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES. APUNTADORES. La memoria de una máquina esta ordenada en forma de celdas numeradas consecutivamente y que se pueden manipular individualmente o en grupos contiguos. La siguiente figura muestra una representación

Más detalles

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación 1 Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera Fundamentos de programación Agenda Caracteres y Cadenas Conversión de Datos Introducción a las funciones y procedimientos

Más detalles

El lenguaje de Programación C. Fernando J. Pereda <[email protected]>

El lenguaje de Programación C. Fernando J. Pereda <ferdy@gentoo.org> El lenguaje de Programación C Fernando J. Pereda Por qué aprender C? Portable y muy extendido Estándar (C89, C99) El lenguaje de los sistemas Un lenguaje fácil (no, no es broma) Por

Más detalles

Heterogénea y Jerárquica

Heterogénea y Jerárquica Metodología de la Programación Paralela 2015-2016 Facultad Informática, Universidad de Murcia Computación Híbrida, Heterogénea y Jerárquica Contenidos 1 Sistemas 2 Paralelismo anidado 3 Programación híbrida

Más detalles

Intel lanza su procesador Caballero Medieval habilitado para Inteligencia Artificial

Intel lanza su procesador Caballero Medieval habilitado para Inteligencia Artificial Intel lanza su procesador Caballero Medieval habilitado para Inteligencia Artificial Intel ha lanzado su procesador Xeon Phi en la Conferencia Internacional de Supercomputación de Alemania. El procesador

Más detalles

CLUSTER FING: PARALELISMO de MEMORIA DISTRIBUIDA

CLUSTER FING: PARALELISMO de MEMORIA DISTRIBUIDA CLUSTER FING: PARALELISMO de MEMORIA DISTRIBUIDA SERGIO NESMACHNOW Centro de Cálculo, Instituto de Computación FACULTAD DE INGENIERÍA, UNIVERSIDAD DE LA REPÚBLICA, URUGUAY CONTENIDO Introducción: arquitecturas

Más detalles

C1 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 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 detalles

Taller de Programación I. Introducción a Java

Taller de Programación I. Introducción a Java INACAP Universidad Tecnológica de Chile Sede Santiago Centro Taller de Programación I Curso Java J2SE Introducción a Java Ing. Manuel López Ramos Parte I Qué es Java? Qué es Java? Java normalmente es considerado

Más detalles

Herramientas Informáticas I Software: Sistemas Operativos

Herramientas Informáticas I Software: Sistemas Operativos Herramientas Informáticas I Software: Sistemas Operativos Facultad de Ciencias Económicas y Jurídicas Universidad Nacional de La Pampa Sistemas Operativos. Es el software base que permite trabajar como

Más detalles

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 1 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 2 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo

Más detalles

Aplicaciones Concurrentes

Aplicaciones Concurrentes PROGRAMACIÓN CONCURRENTE TEMA 6 Aplicaciones Concurrentes ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN PROGRAMACIÓN CONCURRENTE Aplicaciones Concurrentes

Más detalles

Programación de SM de Memoria Compartida

Programación de SM de Memoria Compartida 1 Programación de SM de Memoria Compartida Noelia Díaz Gracia UO188772 Lucas Díaz Sanzo UO189670 Aida Fernández Méndez UO16559 Arquitectura y Tecnología de Computadores Escuela de Ingeniería Informática

Más detalles

Definición de Memoria

Definición de Memoria Arquitectura de Ordenadores Representación de Datos en Memoria Abelardo Pardo [email protected] Universidad Carlos III de Madrid Departamento de Ingeniería Telemática Definición de Memoria DRM-1 La memoria

Más detalles

Lenguaje C [Apuntadores y arreglos]

Lenguaje C [Apuntadores y arreglos] Lenguaje C [Apuntadores y arreglos] M. en C. Sergio Luis Pérez Pérez UAM CUAJIMALPA, MÉXICO, D. F. Trimestre 14-O Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Lenguaje C 1 / 20 Apuntadores y direcciones

Más detalles

Unidad II: Administración de Procesos y del procesador

Unidad II: Administración de Procesos y del procesador Unidad II: Administración de Procesos y del procesador 2.1 Concepto de proceso Un proceso no es más que un programa en ejecución, e incluye los valores actuales del contador de programa, los registros

Más detalles

Introducción al lenguaje C. Procesadores Digitales de Señal

Introducción al lenguaje C. Procesadores Digitales de Señal Introducción al lenguaje C Procesadores Digitales de Señal Conceptos básicos Conceptos avanzados Índice Lenguaje C Procesadores Digitales de Señal 2 Índice (primera parte) Conceptos básicos Estructura

Más detalles

Fundamentos de Programación 2017-I

Fundamentos de Programación 2017-I Fundamentos de Programación 2017-I Fundamentos para la construcción de código a partir del algoritmo Objetivo: El alumno construirá programas utilizando el lenguaje de programación C a través de un análisis

Más detalles

Fundamentos de Informática E.U.P. Universidad de Sevilla

Fundamentos de Informática E.U.P. Universidad de Sevilla Fundamentos de Informática E.U.P. Universidad de Sevilla Capítulo 3: FUNDAMENTOS DE PROGRAMACIÓN ÍNDICE (1) INTRODUCCIÓN A LA PROGRAMACIÓN IMPERATIVA Programación en lenguaje C INSTRUCCIÓN DE ASIGNACIÓN

Más detalles

4. Operadores Operador asignación

4. Operadores Operador asignación Programación orientada a objetos con Java 43 4. Operadores Objetivos: a) Describir los operadores (aritméticos, incrementales, de relación, lógicos y de asignación) y los tipos de dato primitivos sobre

Más detalles