Programación Paralela en OpenMp
|
|
|
- Domingo Escobar San Segundo
- hace 7 años
- Vistas:
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. 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
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
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
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
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
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
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?
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
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
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
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
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
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
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
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
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
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
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
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.
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ó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
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
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
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
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
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
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
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:
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
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:
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
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
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
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
El lenguaje de Programación C. Fernando J. Pereda <[email protected]>
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
