Programación Paralela y Computación de Altas Prestaciones Programación con OpenMP

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

Download "Programación Paralela y Computación de Altas Prestaciones Programación con OpenMP"

Transcripción

1 Programación Paralela y Computación de Altas Prestaciones Programación con OpenMP Javier Cuenca UniversidaddeMurcia

2 Nociones básicas Modelo de programación fork-join, con generación de múltiples threads. Inicialmente se ejecuta un thread hasta que aparece el primer constructor paralelo, se crean threads esclavos y el que los pone en marcha es el maestro. Al final del constructor se sincronizan los threads y continúa la ejecución el maestro. Facultad de Informática. Universidad de Murcia 2

3 Ejemplo inicial: ejemplo_hello.c #include <omp.h> int main() int iam =0, np = 1; #pragma omp parallel private(iam, np) #if defined (_OPENMP) np = omp_get_num_threads(); iam = omp_get_thread_num(); #endif printf( Hello from thread %d out of %d \n,iam,np); Facultad de Informática. Universidad de Murcia 3

4 Directivas #pragma omp nombre-directiva [cláusulas] Facultad de Informática. Universidad de Murcia 4

5 Constructores: Constructor parallel #pragma omp parallel [cláusulas] bloque Se crea un grupo de threads El que los pone en marcha actúa de maestro. Con cláusula if se evalúa su expresión si da valor distinto de cero se crean los threads si es cero se hace en secuencial. Número de threads a crear se obtiene por variables de entorno o llamadas a librería. Hay barrera implícita al final de la región. Cuando dentro de una región hay otro constructor paralelo: anidamiento cada esclavo crearía otro grupo de threads esclavos de los que sería el maestro. Cláusulas (private, firstprivate, default, shared, copyin y reduction) forma en que se accede a las variables. Facultad de Informática. Universidad de Murcia 5

6 Constructores: Constructor for #pragma omp for [cláusulas] bucle for Las iteraciones se ejecutan en paralelo por threads que ya existen La parte de inicialización del for debe ser una asignación La parte de incremento debe ser una suma o resta La parte de evaluación es la comparación de una variable entera sin signo con un valor, utilizando un comparador mayor o menor (puede incluir igual). Los valores que aparecen en las tres partes del for deben ser enteros. Hay barrera al final a no ser que se utilice la cláusula nowait. Hay una serie de cláusulas (private, firstprivate, lastprivate y reduction) para indicar la forma en que se accede a las variables. Facultad de Informática. Universidad de Murcia 6

7 Constructores: Constructor for: : ejemplo_for.c #include <omp.h> int main() int iam =0, np = 1, i=0; #pragma omp parallel private(iam, np,i) #if defined (_OPENMP) np = omp_get_num_threads(); iam = omp_get_thread_num(); #endif printf("hello from thread %d out of %d\n",iam,np); #pragma omp for for(i=0;i<(np*2);i++) printf("thread %d, contador %d \n",iam,i); Facultad de Informática. Universidad de Murcia 7

8 Constructores: Constructor for Una cláusula schedule indica la forma como se dividen las iteraciones del for entre los threads: schedule(static,tamaño) las iteraciones se dividen según el tamaño, y la asignación se hace estáticamente a los threads. Si no se indica el tamaño se divide por igual entre los threads. schedule(dynamic,tamaño) las iteraciones se dividen según el tamaño y se asignan a los threads dinámicamente cuando van acabando su trabajo. schedule(guided,tamaño) las iteraciones se asignan dinámicamente a los threads pero con tamaños decrecientes, empezando en tamaño numiter/np y acabando en tamaño. schedule(runtime) deja la decisión para el tiempo de ejecución, y se obtienen de la variable de entorno OMP_SCHEDULE. ver modificaciones ejemplo_for.c Facultad de Informática. Universidad de Murcia 8

9 Constructores: Constructor sections #pragma omp sections [cláusulas] [#pragma omp section] bloque [#pragma omp section bloque... Cada sección se ejecuta por un thread. Hay barrera al final de sections a no ser que se utilice la cláusula nowait. Hay una serie de cláusulas (private, firstprivate, lastprivate y reduction) para indicar la forma en que se accede a las variables. Facultad de Informática. Universidad de Murcia 9

10 Constructores: Constructor sections: : ejemplo_sections.c #pragma omp parallel private(iam, np,i) #pragma omp sections #pragma omp section printf("soy el thread %d, en solitario en la seccion 1ª \n",iam); #pragma omp section printf("soy el thread %d, en solitario en la sección 2ª \n",iam); #pragma omp section printf("soy el thread %d, en solitario en la seccion 3ª \n",iam); //sections //parallel Facultad de Informática. Universidad de Murcia 10

11 Constructores: Constructores combinados #pragma omp parallel for [cláusulas] bucle for Es forma abreviada de directiva parallel que tiene una única directiva for, y admite sus cláusulas menos la nowait. #pragma omp parallel sections [cláusulas] Es forma abreviada de directiva parallel que tiene una única directiva sections, y admite sus cláusulas menos la nowait. Facultad de Informática. Universidad de Murcia 11

12 Constructores: Constructores de ejecución secuencial #pragma omp single [cláusulas] bloque El bloque se ejecuta por un único thread. No tiene por qué ser el maestro. Hay barrera al final a no ser que se utilice la cláusula nowait. #pragma omp master bloque El bloque lo ejecuta el thread maestro. No hay sincronización al entrar ni salir. #pragma omp ordered bloque Todo dentro de un for, el bloque se ejecuta en el orden en que se ejecutaría en secuencial. Facultad de Informática. Universidad de Murcia 12

13 Constructores: Constructores de ejecución secuencial: ejemplos ejemplo_single.c Barreras al final de cada single ejemplo_master.c Ejecución solamente por thread maestro (el 0) No hay barreras ejemplo_ordered.c Se ordena la ejecución por iteraciones del bucle Facultad de Informática. Universidad de Murcia 13

14 Constructores: Constructores de ejecución secuencial: ejemplo_single.c #pragma omp parallel private(iam, np,i) #pragma omp single printf("soy el thread %d, actuando en solitario dentro del primer bloque\n",iam); sleep(1); #pragma omp single printf("soy el thread %d, actuando en solitario dentro ddel segundo bloque \n",iam); sleep(1); #pragma omp single printf("soy el thread %d, actuando en solitario dentro ddel tercer bloque \n",iam); sleep(1); printf("soy el thread %d, fuera de los singles\n",iam); //parallel Facultad de Informática. Universidad de Murcia 14

15 Constructores: Constructores de ejecución secuencial: ejemplo_master.c #pragma omp parallel private(iam, np,i) #pragma omp master printf("soy el thread %d, actuando en solitario dentro del primer bloque\n",iam); sleep(1); #pragma omp master printf("soy el thread %d, actuando en solitario dentro ddel segundo bloque \n",iam); sleep(1); #pragma omp master printf("soy el thread %d, actuando en solitario dentro ddel tercer bloque \n",iam); sleep(1); printf("soy el thread %d, fuera de los singles\n",iam); //parallel Facultad de Informática. Universidad de Murcia 15

16 Constructores: Constructores de ejecución secuencial: ejemplo_ordered.c #pragma omp parallel private(iam, np,i) #pragma omp for ordered for(i=0;i<5;i++) printf("\t\tsoy el thread %d, antes del ordered en la iteracion %d\n",iam,i); #pragma omp ordered printf("soy el thread %d, actuando en la iteracion %d\n",iam,i); //parallel sleep(1); Facultad de Informática. Universidad de Murcia 16

17 Constructores: Constructores de sincronización #pragma omp critical [nombre] bloque Asegura exclusión mutua en la ejecución del bloque. El nombre se puede usar para identificar secciones críticas distintas. #pragma omp barrier Sincroniza todos los threads en el equipo. #pragma omp atomic expresión La expresión debe ser x binop=exp, x++, ++x, x-- o --x, donde x es una expresión con valor escalar, y binop es un operador binario. Asegura la ejecución de la expresión de forma atómica. Facultad de Informática. Universidad de Murcia 17

18 Constructores: Constructores de sincronización: ejemplo_critical.c #pragma omp parallel private(iam, np,i) #pragma omp critical printf("soy el thread %d, al inicio de la seccion critica \n",iam); sleep(1); printf("\t\tsoy el thread %d, al final de la seccion critica \n",iam); //parallel Facultad de Informática. Universidad de Murcia 18

19 Constructores: Constructores de sincronización: ejemplo_barrier.c #pragma omp parallel private(iam, np,i) printf("soy el thread %d, antes del barrier \n",iam); #pragma omp barrier printf("\t\tsoy el thread %d, despues del barrier \n",iam); //parallel Facultad de Informática. Universidad de Murcia 19

20 Constructores: Constructores de manejo de variables #pragma omp flush [lista] Asegura que las variables que aparecen en la lista quedan actualizadas para todos los threads. Si no hay lista se actualizan todos los objetos compartidos. Se hace flush implícito al acabar barrier, al entrar o salir de critical u ordered, al salir de parallel, for, sections o single. ejemplo_flush.c #pragma omp threadprivate (lista) Usado para declarar variables privadas a los threads. Facultad de Informática. Universidad de Murcia 20

21 Constructores: Constructores de manejo de variables: ejemplo_flush.c #pragma omp parallel private(iam, np,i) #pragma omp master x=999; #pragma omp flush(x) printf("soy el thread %d, actualizando x=999 \n\n",iam); printf("soy el thread %d, antes del flush, con x=%d \n",iam,x); while (x==0) #pragma omp flush(x) printf("\t\tsoy el thread %d, despues del flush, con x=%d \n",iam,x); //parallel Facultad de Informática. Universidad de Murcia 21

22 Claúsulas de alcance de datos private(lista) privadas a los threads, no se inicializan antes de entrar y no se guarda su valor al salir. firstprivate(lista) privadas a los threads, se inicializan al entrar con el valor que tuviera la variable correspondiente. lastprivate(lista) privadas a los threads, al salir quedan con el valor de la última iteración o sección. shared(lista) compartidas por todos los threads. default(shared none) indica cómo serán las variables por defecto. reduction(operador:lista) se obtienen por la aplicación del operador. copyin(lista) para asignar el valor de la variable en el master a variables locales privadas a los threads al empezar la región paralela. Facultad de Informática. Universidad de Murcia 22

23 Claúsulas de alcance de datos: Ejemplos: ejemplo_private.c int x=1234; #pragma omp parallel private(iam, np,i,x) printf("soy el thread %d, antes de actualizar, con x=%d \n",iam,x); x=iam*1111; printf("\t\tsoy el thread %d, despues de actualizar, con x=%d \n",iam,x); printf("\n Despues de pragma parallel x=%d \n\n",x); Facultad de Informática. Universidad de Murcia 23

24 Claúsulas de alcance de datos: Ejemplos: ejemplo_firstprivate.c int x=1234; #pragma omp parallel firstprivate(iam, np,i,x) printf("soy el thread %d, antes de actualizar, con x=%d \n",iam,x); x=iam*1111; printf("\t\tsoy el thread %d, despues de actualizar, con x=%d \n",iam,x); printf("\n Despues de pragma parallel x=%d \n\n",x); Facultad de Informática. Universidad de Murcia 24

25 Claúsulas de alcance de datos: Ejemplos: ejemplo_lastprivate.c int x=1234; #pragma omp parallel private(iam, np,i,x) printf("soy el thread %d, antes de actualizar, con x=%d \n",iam,x); #pragma omp for lastprivate(x) schedule(dynamic) for(i=0;i<11;i++) x=iam*i; printf("\tsoy el thread %d, actualizando en for, i=%d x=%d\n",iam,i,x); printf("\t\tsoy el thread %d, despues de actualizar, con x=%d \n",iam,x); printf("\n Despues de pragma parallel x=%d \n\n",x); Facultad de Informática. Universidad de Murcia 25

26 Claúsulas de alcance de datos: Ejemplos: ejemplo_reduction.c int x=1000; int iam =0, np = 1, i=0,j=0; printf("\n Antes de pragma parallel x=%d \n\n",x); #pragma omp parallel private(iam, np,i) reduction(+:x) printf("soy el thread %d, antes de actualizar, con x=%d \n",iam,x); x=iam*10; printf("\t\tsoy el thread %d, despues de actualizar, con x=%d \n",iam,x); //parallel printf("\n Despues de pragma parallel x=%d \n\n",x); Facultad de Informática. Universidad de Murcia 26

27 Claúsulas de alcance de datos: Ejemplos: ejemplo_copyin.c int x; #pragma omp threadprivate(x) int main() int iam =0, np = 1, i=0,j=0; x=9999; // lo ponemos en el master #pragma omp parallel private(iam, np,i) copyin(x) printf("soy el thread %d, antes de actualizar, con x=%d \n",iam,x); x=1000+iam; printf("\t\tsoy el thread %d, despues de que actualice, con x=%d \n",iam,x); //parallel printf("\n Despues de pragma parallel x=%d \n\n",x); //main Facultad de Informática. Universidad de Murcia 27

28 Funciones de librería Poner al principio: #include <omp.h> void omp_set_num_threads(int num_threads); Pone el número de threads a usar en la siguiente región paralela. int omp_get_num_threads(void); Obtiene el número de threads que se están usando en una región paralela. int omp_get_max_threads(void); Obtiene la máxima cantidad posible de threads. int omp_get_thread_num(void); Devuelve el número del thread. int omp_get_num_procs(void); Devuelve el máximo número de procesadores que se pueden asignar al programa. int omp_in_parallel(void); Devuelve valor distinto de cero si se ejecuta dentro de una región paralela. Facultad de Informática. Universidad de Murcia 28

29 Funciones de librería int omp_set_dynamic(void); Permite poner o quitar el que el número de threads se pueda ajustar dinámicamente en las regiones paralelas. int omp_get_dynamic(void); Devuelve un valor distinto de cero si está permitido el ajuste dinámico del número de threads. int omp_set_nested(int); Para permitir o desautorizar el paralelismo anidado. ejemplo_nested.c int omp_get_nested(void); Devuelve un valor distinto de cero si está permitido el paralelismo anidado. Facultad de Informática. Universidad de Murcia 29

30 Funciones de librería ejemplo_nested.c #pragma omp parallel private(iam, np,i) #if defined (_OPENMP) np = omp_get_num_threads(); iam = omp_get_thread_num(); #endif printf("hello from thread %d out of %d \n",iam,np); omp_set_nested(1); #pragma omp parallel private(iam, np,i) #if defined (_OPENMP) np = omp_get_num_threads(); iam = omp_get_thread_num(); #endif printf("\t\thello from thread %d out of %d \n",iam,np); //parallel //parallel Facultad de Informática. Universidad de Murcia 30

31 Funciones de librería void omp_init_lock(omp_lock_t *lock); Para inicializar una llave. Una llave se inicializa como no bloqueada. void omp_init_destroy(omp_lock_t *lock); Para destruir una llave. void omp_set_lock(omp_lock_t *lock); Para pedir una llave. void omp_unset_lock(omp_lock_t *lock); Para soltar una llave. int omp_test_lock(omp_lock_t *lock); Intenta pedir una llave pero no se bloquea. ejemplo_lock.c Facultad de Informática. Universidad de Murcia 31

32 Funciones de librería: ejemplo_lock.c omp_init_lock(&lck); #pragma omp parallel shared(lck) private(id) id=omp_get_thread_num(); omp_set_lock(&lck); printf("my thread id is %d.\n",id); omp_unset_lock(&lck); while (! omp_test_lock(&lck)) skip(id); //while work(id); //ahora tengo el lock, entonces hago el trabajo omp_unset_lock(&lck); //parallel omp_destroy_lock(&lck); Facultad de Informática. Universidad de Murcia 32

33 Variables de entorno OMP_SCHEDULE indica el tipo de scheduling para for y parallel for. OMP_NUM_THREADS Pone el número de threads a usar, aunque se puede cambiar con la función de librería. OMP_DYNAMIC Autoriza o desautoriza el ajuste dinámico del número de threads. OMP_NESTED Autoriza o desautoriza el anidamiento. Por defecto no está autorizado. Facultad de Informática. Universidad de Murcia 33

34 Ejemplos: Busqueda en array #pragma omp parallel private(i, id, p, load, begin, end) p = omp_get_num_threads(); id = omp_get_thread_num(); load = N/p; begin = id*load; end = begin+load; for (i = begin; ((i<end) && keepon); i++) if (a[i] == x) keepon = 0; position = i; #pragma omp flush(keepon) Facultad de Informática. Universidad de Murcia 34

35 Ejemplos: Multiplicación matriz-vector void mv(double *a, int fa,int ca,int lda,double *b,int fb,double *c,int fc) int i, j; double s; #pragma omp parallel #pragma omp for private(i,j,s) schedule(static,bloque) for (i = 0; i < fa; i++) s=0.; for(j=0;j<ca;j++) s+=a[i*lda+j]*b[j]; c[i]=s; Facultad de Informática. Universidad de Murcia 35

36 Tareas en OpenMP 3.0 Cambiar OpenMP de thread-centric a task-centric. Para expresar paralelismo irregular y no estructurado Para hacer paralelismo anidado de tareas sin que conlleve un estricto paralelismo anidado de threads con sus consecuentes barriers implicitos que puedan ser innecesarios. Para paralelizar bucles while. Por ejemplo recorrido de una lista de punteros de longitud no conocida Tied task: ligada a un thread fijo que la ejecutará. Puede tener pausas o hacer otra cosa, pero ese thread acabará la tarea Untied task: cualquier thread del team el scheduler le puede asignar una untied task que esté suspendida en ese momento Facultad de Informática. Universidad de Murcia 36

37 Tareas en OpenMP 3.0: Constructor task #pragma omp task [clause [[,]clause]...] structured-block Clauses: if (scalar expression) untied default (shared none) private (list) firstprivate (list) shared (list) Facultad de Informática. Universidad de Murcia 37

38 Tareas en OpenMP 3.0: Sincronización y Finalización de tareas #pragma omp taskwait Tarea actual se suspende hasta finalización de sus tareas hijas Util para sincronización de tareas de grano fino Un conjunto de tareas será forzada a completarse en alguno de estos casos: En una barrier implícita de threads En una barrier explícita de threads (#pragma omp barrier) En una barrier de tareas (#pragma omp taskwait) Facultad de Informática. Universidad de Murcia 38

39 Tareas en OpenMP 3.0: Ejemplo: recorrido de lista (secuencial)... while(my_pointer) (void) do_independent_work (my_pointer); my_pointer = my_pointer->next ; // End of while loop... Facultad de Informática. Universidad de Murcia 39

40 Tareas en OpenMP 3.0: Ejemplo: recorrido de lista (paralelo) my_pointer = listhead; #pragma omp parallel #pragma omp single nowait while(my_pointer) #pragma omp task firstprivate(my_pointer) (void) do_independent_work (my_pointer); my_pointer = my_pointer->next ; // End of single - no implied barrier (nowait) // End of parallel region - implied barrier Facultad de Informática. Universidad de Murcia 40

41 Tareas en OpenMP 3.0: Ejemplo: Fibonacci F(0) = 1 F(1) = 1 F(n) = F(n-1) + F(n-2) (para n=2,3, ) Secuencia valores resultado: 1, 1, 2, 3, 5, 8, 13, Facultad de Informática. Universidad de Murcia 41

42 Tareas en OpenMP 3.0: Ejemplo: Fibonacci (secuencial recursivo) long comp_fib_numbers(int n) // Basic algorithm: f(n) = f(n-1) + f(n-2) long fnm1, fnm2, fn; if ( n == 0 n == 1 ) return(n); fnm1 = comp_fib_numbers(n-1); fnm2 = comp_fib_numbers(n-2); fn = fnm1 + fnm2; return(fn); Facultad de Informática. Universidad de Murcia 42

43 Tareas en OpenMP 3.0: Ejemplo: Fibonacci (paralelo) long comp_fib_numbers(int n) long fnm1, fnm2, fn; if ( n == 0 n == 1 ) return(1); #pragma omp task shared(fnm1) fnm1 = comp_fib_numbers(n-1); #pragma omp task shared(fnm2) fnm2 = comp_fib_numbers(n-2); #pragma omp taskwait fn = fnm1 + fnm2; return(fn); Facultad de Informática. Universidad de Murcia 43

44 Tareas en OpenMP 3.0: Ejemplo: Fibonacci (paralelo) long comp_fib_numbers(int n) long fnm1, fnm2, #pragma fn; #pragma omp omp parallel parallel shared(nthreads) if ( n == 0 n == 1 ) return(1); #pragma #pragma omp omp single single nowait nowait #pragma omp task shared(fnm1) fnm1 = comp_fib_numbers(n-1); result result = comp_fib_numbers(n); #pragma omp task shared(fnm2) // // End End of of single single fnm2 = // comp_fib_numbers(n-2); // End End of of parallel parallel region region #pragma omp taskwait fn = fnm1 + fnm2; return(fn); Facultad de Informática. Universidad de Murcia 44

45 Tareas en OpenMP 3.0: Ejemplo: Fibonacci (paralelo, versión 2) long comp_fib_numbers(int n) long fnm1, fnm2, fn; if ( n == 0 n == 1 ) return(1); if ( n<20 ) return(comp_fib_numbers(n-1) +comp_fib_numbers(n- 2)); #pragma omp task shared(fnm1) fnm1 = comp_fib_numbers(n-1); #pragma omp task shared(fnm2) fnm2 = comp_fib_numbers(n-2); #pragma omp taskwait fn = fnm1 + fnm2; return(fn); Facultad de Informática. Universidad de Murcia 45

46 Tareas en OpenMP 3.0: Ejemplo: Fibonacci. Probando. iccstart icc_compilar ejemplo_fibo ejemplo_fibo Facultad de Informática. Universidad de Murcia 46

47 Tareas en OpenMP 3.0: Ejemplo: Recorrido de árbol en preorden void traverse(bynarytree *p) process(p); if (p->left) #pragma omp task traverse(p->left); if (p->right) #pragma omp task traverse(p->right); Facultad de Informática. Universidad de Murcia 47

48 Tareas en OpenMP 3.0: Ejemplo: Recorrido de árbol en postorden void traverse(bynarytree *p) if (p->left) #pragma omp task traverse(p->left); if (p->right) #pragma omp task traverse(p->right); #pragma omp taskwait process(p); Facultad de Informática. Universidad de Murcia 48

49 Tareas en OpenMP 3.0: threads y tareas Por defecto: tarea t está ligada a un thread h (tied task): El thread h ejecuta código de t desde principio al final La ejecución puede no ser contigua: En los task scheduling points el thread h puede dedicarse a realizar otra tarea Task scheduling points: Pragma task tareas anidadas Pragma taskwait Barreras explícitas o implícitas Finalización de tarea Valor de threadprivate variables pueden cambiar (por obra de otra tarea ejecutada por el thread h) Facultad de Informática. Universidad de Murcia 49

50 Tareas en OpenMP 3.0: threads y tareas int tp; #pragma omp threadprivate(tp) int var; void work() #pragma omp task // tarea 1 /* do work here */ #pragma omp task //tarea 1.1. Tarea 1 puede ser suspendida 1 tp = 1; /* do work here */ #pragma omp task //tarea > posible cambio a tarea /* no modification of tp */ var = tp; //value of tp can be 1 or 2 tp = 2; Facultad de Informática. Universidad de Murcia 50

51 Tareas en OpenMP 3.0: threads y tareas Si la tarea t no está ligada a un thread h (untied task): El thread h inicia la ejecución código de t Otro thread distinto puede continuar la ejecución de t en cualquier momento Mismas restricciones con variables threadprivates que en tied task Evitar cualquier referencia ligada al identificador del thread Facultad de Informática. Universidad de Murcia 51

52 Ejercicios 0.- Probar los distintos ejemplos de programas. Razonar su comportamiento. Conectarse a luna.inf.um.es ssh luna.inf.um.es usuario XXXX clave YYYY PATH=$PATH:. Para obtener los programas de ejemplo: cp /home/javiercm/ejemplos_openmp/*.c. Para compilar en luna.inf.um.es el programa ejemplo_hello.c: gcc-4.3 o ejemplo_hello ejemplo_hello.c -O3 lm fopenmp Para ejecutarlo con 4 threads: export OMP_NUM_THREADS=4 ejemplo_hello Facultad de Informática. Universidad de Murcia 52

53 Ejercicios 1.- En ejemplo_for.c: probar distintos schedules: estático vs. dinámico, sin tamaño vs. con tamaño=2. Ejecutar y razonar comportamientos. 2.- En ejemplo_sections.c: Agrupar las directivas parallel y sections en una única. 3.- Compara y razona el comportamiento de ejemplo_sections.c vs. ejemplo_single.c. 4.- Compara y razona el comportamiento de ejemplo_sections.c vs. ejemplo_critical.c. 5.- A partir del ejemplo de multiplicación matriz-vector ejemplo_mv.c: diseña un programa para multiplicar dos matrices AxB=C, donde cada thread se encargue de calcular un bloque de filas consecutivas de elementos de C. Facultad de Informática. Universidad de Murcia 53

54 Ejercicios 6.- Diseñar, programar y probar un programa de recorrido recursivo de un árbol, usando tareas de OpenMP 3.0. Mostrar qué thread se encarga de procesar cada nodo.. iccstart icc_compilar ejemplo_recorrido_arbol ejemplo_recorrido_arbol Facultad de Informática. Universidad de Murcia 54

Programación en Memoria Compartida: OpenMP

Programación en Memoria Compartida: OpenMP Programación en Memoria Compartida: OpenMP Domingo Giménez Departamento de Informática y Sistemas Universidad de Murcia, Spain dis.um.es/~domingo Universidad de Murcia 1 Nociones básicas Modelo de programación

Más detalles

Programación con OpenMP

Programación con OpenMP Curso de Promoción Educativa Programación en el Supercomputador Ben Arabi Programación con OpenMP Javier Cuenca Universidad de Murcia Indice de la sesión Introducción. Nociones básicas Ejemplo inicial

Más detalles

Programación en Memoria Compartida: OpenMP

Programación en Memoria Compartida: OpenMP Programación en Memoria Compartida: OpenMP Javier Cuenca Departamento de Ingeniería y Tecnología de Computadores Domingo Giménez Departamento de Informática y Sistemas Universidad de Murcia, Spain dis.um.es/~domingo

Más detalles

Computación Matricial y Paralela

Computación Matricial y Paralela Computación Matricial y Paralela Programación en Memoria Compartida Javier Cuenca Dpto. de Ingeniería y Tecnología de Computadores Domingo Giménez Dpto. de Informática y Sistemas Universidad de Murcia

Más detalles

Programación de Memoria Compartida - OpenMP

Programación de Memoria Compartida - OpenMP Metodología de la Programación Paralela 2015-2016 Facultad Informática, Universidad de Murcia Programación de Memoria Compartida - OpenMP Contenido 1 Tipos de paralelismo 2 OpenMP Ejemplo básico Directivas

Más detalles

Índice. 1. Introducción. 1. Introducción. Regiones Paralelas. Ejemplo

Índice. 1. Introducción. 1. Introducción. Regiones Paralelas. Ejemplo Arquitectura de Computadores: Práctica de Multiprocesadores Introducción a OpenMP Índice 2. Regiones Paralelas: a) For b) Sections 3. Distribución del trabajo 4. Gestión de datos 5. Sincronización 6. Tareas

Más detalles

Programación Multihilo

Programación Multihilo Proyecto Universidad-Secundaria Incorporación de contenidos de programación paralela en la rama de tecnologías informáticas Facultad Informática, Universidad de Murcia e Instituto de Enseñanza Secundaria

Más detalles

2. Regiones Paralelas: 3. Distribución del trabajo 4. Gestión de datos 5. Sincronización. 7. Variables del entorno 8. Ejemplo Π

2. Regiones Paralelas: 3. Distribución del trabajo 4. Gestión de datos 5. Sincronización. 7. Variables del entorno 8. Ejemplo Π Arquitectura de Computadores: Práctica de Multiprocesadores Introducción a OpenMP 1. Introducción 2. Regiones Paralelas: Índice 3. Distribución del trabajo 4. Gestión de datos 5. Sincronización 6. Funciones

Más detalles

1. Introducción. 1. Introducción. Ejemplo. Regiones Paralelas. Modelo de paralelismo: Fork-Join Un maestro crea y gestiona threads según necesidad:

1. Introducción. 1. Introducción. Ejemplo. Regiones Paralelas. Modelo de paralelismo: Fork-Join Un maestro crea y gestiona threads según necesidad: Programación Paralela y Distribuida OpenMP Índice 1. Introducción 2. Regiones Paralelas: a) For b) Sections 3. Distribución del trabajo 4. Gestión de datos 5. Sincronización 6. Afinidad 7. Tareas 8. Funciones

Más detalles

Programación Multihebra con OpenMP. José Miguel Mantas Ruiz Depto. de Lenguajes y Sistemas Informáticos Universidad de Granada

Programación Multihebra con OpenMP. José Miguel Mantas Ruiz Depto. de Lenguajes y Sistemas Informáticos Universidad de Granada Programación Multihebra con OpenMP José Miguel Mantas Ruiz Depto. de Lenguajes y Sistemas Informáticos Universidad de Granada Contenidos Modelo de Programación e Introducción Paralelización de bucles Gestión

Más detalles

OpenMP. Qué es OpenMP?

OpenMP. Qué es OpenMP? OpenMP Qué es OpenMP? Modelo de programación paralela Paralelismo de memoria compartida Soporta el paralelismo por datos Escalable Permite paralelización incremental Extensiones a lenguajes de programación

Más detalles

Paralelización de Programas Secuenciales: OpenMP

Paralelización de Programas Secuenciales: OpenMP Paralelización de Programas Secuenciales: OpenMP http://www.openmp.org Manuel Arenaz arenaz@udc.es Índice Introducción a la programación paralela Programación con OpenMP Directivas de compilación Librería

Más detalles

Programación paralela con OpenMP

Programación paralela con OpenMP Programación paralela con OpenMP Arquitectura de Computadores J. Daniel García Sánchez (coordinador) David Expósito Singh Javier García Blas Óscar Pérez Alonso J. Manuel Pérez Lobato Grupo ARCOS Departamento

Más detalles

Multiprocesamiento en lenguaje C Introducción a Open Multiprocessing (OpenMP)

Multiprocesamiento en lenguaje C Introducción a Open Multiprocessing (OpenMP) Multiprocesamiento en lenguaje C Introducción a Open Multiprocessing (OpenMP) Pertinencia de la enseñanza del cómputo paralelo en el currículo de las ingenierías Algunas preguntas Qué es un proceso? Qué

Más detalles

Introducción a la Programación de Memoria Compartida.. con OpenMP

Introducción a la Programación de Memoria Compartida.. con OpenMP Introducción a la Programación de Memoria Compartida.. con OpenMP Carlos Jaime BARRIOS HERNANDEZ, PhD. Escuela de Ingeniería de Sistemas e Informática Universidad Industrial de Santander Las herramientas

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

1 Primitivas básicas de OpenMP

1 Primitivas básicas de OpenMP 1 Primitivas básicas de OpenMP Consultar la página oficial de la plataforma OpenMP http://www.openmp.org/drupal/ Pragmas Es una directiva para el compilador que permite la definición de nuevas directivas

Más detalles

Es una API (Aplication Program Interface) que se usa para paralelismo basado en hilos múltiples en entornos de memoria compartida

Es una API (Aplication Program Interface) que se usa para paralelismo basado en hilos múltiples en entornos de memoria compartida Algo de OPENMP Memoria Compartida Threads O hilos, se definen como flujos de instrucciones independientes, que se ejecutan separadamente del programa principal. Con estos hilos se aprovecha mucho una máquina

Más detalles

Francisco J. Hernández López

Francisco J. Hernández López Francisco J. Hernández López fcoj23@cimat.mx Ejecución de más de un cómputo (cálculo) al mismo tiempo o en paralelo, utilizando más de un procesador. Sistema de Cómputo Paralelo Hardware Parallel programming:

Más detalles

Sistemas Complejos en Máquinas Paralelas

Sistemas Complejos en Máquinas Paralelas Sistemas Complejos en Máquinas Paralelas Clase 1: OpenMP Francisco García Eijó Departamento de Computación - FCEyN UBA 15 de Mayo del 2012 Memoria compartida Las mas conocidas son las máquinas tipo Symmetric

Más detalles

Cómputo paralelo con openmp y C

Cómputo paralelo con openmp y C Cómputo paralelo con openmp y C Sergio Ivvan Valdez Peña Guanajuato, México. 13 de Marzo de 2012 Sergio Ivvan Valdez Peña Cómputo Guanajuato, paralelo conméxico. openmp y () C 13 de Marzo de 2012 1 / 27

Más detalles

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

Guía práctica de estudio 11 Introducción a OpenMP.

Guía práctica de estudio 11 Introducción a OpenMP. Guía práctica de estudio 11 Introducción a OpenMP. Elaborado por: Revisión: Ing. Laura Sandoval Montaño Facultad de Ingeniería U.N.A.M. Guía Práctica 11 Estructura de datos y Algoritmos II Introducción

Más detalles

Javier Ibáñez González

Javier Ibáñez González Javier Ibáñez González Despacho 109 Edificio DSIC (1F) Tutorías bajo demanda e-mail: jjibanez@dsic.upv.es http://personales.upv.es/jjibanez Práctica P2 (OpenMP): sesiones 4 y 5 Práctica P3 (MPI): sesiones

Más detalles

Esquemas algorítmicos paralelos - Particionado y Paralelismo de Datos

Esquemas algorítmicos paralelos - Particionado y Paralelismo de Datos Metodología de la Programación Paralela 2015-2016 Facultad Informática, Universidad de Murcia Esquemas algorítmicos paralelos - Particionado y Paralelismo de Datos Domingo Giménez (Universidad de Murcia)

Más detalles

Esquemas algorítmicos paralelos - Particionado y Paralelismo de Datos

Esquemas algorítmicos paralelos - Particionado y Paralelismo de Datos Metodología de la Programación Paralela Facultad Informática, Universidad de Murcia Esquemas algorítmicos paralelos - Particionado y Paralelismo de Datos Domingo Giménez (Universidad de Murcia) 1 / 31

Más detalles

Tema 3. Estructuras de control

Tema 3. Estructuras de control Tema 3. Estructuras de control 3.1. Secuencial 3.2. Selección 3.3. Repetición 2 Objetivos Objetivos del tema: Conocer y saber la utilidad de las tres estructuras de control (secuencial, alternativa y repetitiva)

Más detalles

Lección 3 Sentencias de control

Lección 3 Sentencias de control 3.1. INTRODUCCIÓN - Hasta aquí: ejecución secuencial de los programas. - Aquí vamos a ver: Lección 3 Sentencias de control Sentencias de control Sentencias condicionales: if- y switch-case Sirven para

Más detalles

Francisco Javier Hernández López

Francisco Javier Hernández López Francisco Javier Hernández López fcoj23@cimat.mx http://www.cimat.mx/~fcoj23 Ejecución de más de un cómputo (cálculo) al mismo tiempo o en paralelo, utilizando más de un procesador. Arquitecturas que hay

Más detalles

TEMA 5: PARALELISMO A NIVEL DE HILOS, TAREAS Y PETICIONES (TLP, RLP) (primera parte).

TEMA 5: PARALELISMO A NIVEL DE HILOS, TAREAS Y PETICIONES (TLP, RLP) (primera parte). TEMA 5: PARALELISMO A NIVEL DE HILOS, TAREAS Y PETICIONES (TLP, RLP) (primera parte). SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC www.atc.us.es Dpto. de Arquitectura y Tecnología de Computadores. Universidad

Más detalles

Paralelización de problemas de recorrido de árboles Trabajadores replicados y esquema maestro esclavo

Paralelización de problemas de recorrido de árboles Trabajadores replicados y esquema maestro esclavo Metodología de la Programación Paralela 2015-2016 Facultad Informática, Universidad de Murcia Esquemas algorítmicos paralelos: Paralelización de problemas de recorrido de árboles Trabajadores replicados

Más detalles

SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GRADO EN ING. INFORMÁTICA. ING. COMPUTADORES PRÁCTICA 8: INTRODUCCIÓN A OPENMP.

SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GRADO EN ING. INFORMÁTICA. ING. COMPUTADORES PRÁCTICA 8: INTRODUCCIÓN A OPENMP. SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GRADO EN ING. INFORMÁTICA. ING. COMPUTADORES PRÁCTICA 8: INTRODUCCIÓN A OPENMP. 1. OBJETIVOS Y PREPARACIÓN. En la actualidad los multiprocesadores en un solo chip

Más detalles

ARQUITECTURA DE SISTEMAS PARALELOS 2. 4º INGENIERÍA INFORMÁTICA. PRÁCTICA 4. PROGRAMACION PARALELA CON openmp.

ARQUITECTURA DE SISTEMAS PARALELOS 2. 4º INGENIERÍA INFORMÁTICA. PRÁCTICA 4. PROGRAMACION PARALELA CON openmp. ARQUITECTURA DE SISTEMAS PARALELOS 2. 4º INGENIERÍA INFORMÁTICA. PRÁCTICA 4. PROGRAMACION PARALELA CON openmp. 1. OBJETIVOS Y PREPARACIÓN. En la actualidad los multiprocesadores en un solo chip (denominados

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

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN - Introducción - Sintaxis - Semántica básica - Tipos de datos - Expresiones y enunciados - Procedimientos y ambientes - Tipos abstractos de datos y módulos

Más detalles

Paralelismo Relajado Paralelismo Síncrono

Paralelismo Relajado Paralelismo Síncrono Metodología de la Programación Paralela Facultad Informática, Universidad de Murcia Esquemas algorítmicos paralelos: Paralelismo Relajado Paralelismo Síncrono Domingo Giménez (Universidad de Murcia) 1

Más detalles

Análisis y escritura de las estructuras de control

Análisis y escritura de las estructuras de control Análisis y escritura de las estructuras de control por Iván Cruz En esta lectura se abordarán las estructuras de control del lenguaje de programación C, estas estructuras. Permiten al programador comunicarse

Más detalles

Programación Paralela y Distribuida

Programación Paralela y Distribuida Capítulo 1 Programación Paralela y Distribuida Domingo Giménez 1, Murilo Boratto 2 y Leandro Coelho 3 Abstract The following text is the material of the class sessions of the Laboratory of Parallel and

Más detalles

Algoritmos en Árbol y Grafo Computación Pipeline

Algoritmos en Árbol y Grafo Computación Pipeline Metodología de la Programación Paralela 2015-2016 Facultad Informática, Universidad de Murcia Esquemas algorítmicos paralelos: Algoritmos en Árbol y Grafo Computación Pipeline Domingo Giménez (Universidad

Más detalles

Master SIA 2012/13. Programación de Sistemas Paralelos. OpenMP: Ejercicios prácticos. Facultad de Informática. Ejercicio 1.A. pi.c

Master SIA 2012/13. Programación de Sistemas Paralelos. OpenMP: Ejercicios prácticos. Facultad de Informática. Ejercicio 1.A. pi.c Master SIA 2012/13 Facultad de Informática Programación de Sistemas Paralelos OpenMP: Ejercicios prácticos En el directorio templates/practica de tu cuenta msiaxx tienes varios programas que hay que procesar

Más detalles

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Unidad II: Fundamentos de la Programación Estructurada Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Estructura General de un Programa Zona de ficheros de cabecera de las librerías Zona

Más detalles

Informática Ingeniería en Electrónica y Automática Industrial

Informática Ingeniería en Electrónica y Automática Industrial Informática Ingeniería en Electrónica y Automática Industrial Sentencias de control en lenguaje Sentencias de control en lenguaje Introducción Sentencia if-else Sentencia switch Sentencia while Sentencia

Más detalles

Soluciones a ejercicios de paralelismo y concurrencia

Soluciones a ejercicios de paralelismo y concurrencia Soluciones a ejercicios de paralelismo y concurrencia J. Daniel García Sánchez (coordinador) David Expósito Singh Javier García Blas Óscar Pérez Alonso J. Manuel Pérez Lobato Arquitectura de Computadores

Más detalles

Multiplicación de matrices dispersas

Multiplicación de matrices dispersas Multiplicación de matrices dispersas Alumno: Irene Sánchez Linares Índice Descripción del problema Representación Algoritmo secuencial Esquemas algorítmicos Elección del esquema OpenMP MPI Estudio experimental

Más detalles

Operadores de comparación

Operadores de comparación Operadores de comparación Los operadores de comparación en C son: Igual (==) Distinto (!=) Mayor (>) y Mayor o igual (>=) Menor (

Más detalles

Programación Paralela en OpenMp

Programación Paralela en OpenMp Programación Paralela en OpenMp Proyecto PAPIME PE104911 Facultad de Ingeniería Universidad Nacional Autónoma de México 1 Utilidad de realizar procesamiento paralelo en computadoras con arquitectura de

Más detalles

Prác%ca 1 Sesión 3 1

Prác%ca 1 Sesión 3 1 Prác%ca 1 Sesión 3 1 Obje%vo Paralelizar códigos mediante los iden%ficadores de hilos Paralelizar dos códigos secuenciales que calculen: 1. El mayor número primo del %po unsigned long long int 2. El número

Más detalles

Algoritmos Matriciales por Bloques

Algoritmos Matriciales por Bloques Master en Nuevas Tecnologías en Informática Programación Paralela y Computación de Altas Prestaciones Algoritmos Matriciales por Bloques Javier Cuenca & Domingo Giménez Grupo de Investigación en Computación

Más detalles

FUNDAMENTOS PARA LA CONSTRUCCIÓN DEL CÓDIGO A PARTIR DEL ALGORITMO

FUNDAMENTOS PARA LA CONSTRUCCIÓN DEL CÓDIGO A PARTIR DEL ALGORITMO FUNDAMENTOS PARA LA CONSTRUCCIÓN DEL CÓDIGO A PARTIR DEL ALGORITMO 3.2 Variables, tipos, expresiones y asignación 3.3 Estructuras de control condicional e iterativo. MODIFICADORES DE ALCANCE CONST Y STATIC

Más detalles

Algoritmos Matriciales por Bloques

Algoritmos Matriciales por Bloques Master en Nuevas Tecnologías en Informática Programación Paralela y Computación de Altas Prestaciones Algoritmos Matriciales por Bloques Javier Cuenca & Domingo Giménez Grupo de Investigación en Computación

Más detalles

PROGRAMACIÓN PARALELA. Modelos de programación paralela Paradigmas de programación paralela

PROGRAMACIÓN PARALELA. Modelos de programación paralela Paradigmas de programación paralela PROGRAMACIÓN PARALELA Modelos de programación paralela Paradigmas de programación paralela Tipos de paralelismo Paso de mensajes Paralelismo de datos Memoria compartida Paradigmas de programación paralela

Más detalles

Laboratorio de Arquitectura de Redes. Sentencias de control en lenguaje C

Laboratorio de Arquitectura de Redes. Sentencias de control en lenguaje C Laboratorio de Arquitectura de Redes Sentencias de control en lenguaje C Sentencias de control en lenguaje C Introducción Sentencia if-else Sentencia switch Sentencia while Sentencia do-while Sentencia

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

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

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

SESIÓN DE EJERCICIOS E1

SESIÓN DE EJERCICIOS E1 SESIÓN DE EJERCICIOS E1 Primera parte: ejercicios test (soluciones al final) A resolver antes de comenzar la sesión en el aula Ejercicio 1 Qué definición de constantes es la correcta en lenguaje C? a)

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

Laboratorio de Paralelismo

Laboratorio de Paralelismo Laboratorio de Paralelismo 2010-2011 Prácticas OpenMP En el directorio de trabajo LPAR de tu cuenta mlapxx tienes cuatro programas que hay que procesar en paralelo utilizando OpenMP. En el caso de los

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java II... 6 Estructuras de control... 7 Estructuras de selección... 8 Sentencia if... 9 Sentencia if - else... 12 Operador condicional...

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

Dobles: Es el caso de la instrucción if-else (punto 1.2).

Dobles: Es el caso de la instrucción if-else (punto 1.2). 1 1.Introducción Las estructuras de control son instrucciones que nos permiten controlar el flujo de ejecución del programa. Las instrucciones de control se pueden agrupar en instrucciones condicionales

Más detalles

Compiladores: Ambientes para Ejecución. Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. María Constanza Pabón

Compiladores: Ambientes para Ejecución. Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. María Constanza Pabón Compiladores: Ambientes para Ejecución Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. María Constanza Pabón Procedimientos Definición de un Procedimiento: es una declaración

Más detalles

LENGUAJE. Tema 2 Elementos de un programa

LENGUAJE. Tema 2 Elementos de un programa LENGUAJE Tema 2 Elementos de un programa ELEMENTOS DE UN PROGRAMA Comentarios. Identificadores. Constantes. Variables. Operadores. Sentencias o instrucciones. COMENTARIOS Los comentarios en C pueden ocupar

Más detalles

Programación Concurrente

Programación Concurrente Master en Computación Programación Concurrente Bloque II: Programación concurrente en POSIX Tema 1. Introducción al estándar POSIX Tema 2. Sistema Operativo MaRTE OS Tema 4. Gestión del Tiempo Tema 5.

Más detalles

Autor: Ing. Nahuel González INTRODUCCIÓN A C. Clase 1

Autor: Ing. Nahuel González INTRODUCCIÓN A C. Clase 1 INTRODUCCIÓN A C Clase 1 Introducción al lenguaje C 1967 1970 1971 1972 1989 BCPL Lenguaje B Pascal 1era versión de C ANSI C Introducción al lenguaje C Librería estandar de C: contiene módulos o funciones

Más detalles

Operadores aritméticos

Operadores aritméticos Bloque 3.2 Operadores aritméticos Suma : x + y Resta : x y Multiplicación : x * y División : x / y Módulo : x % y (resto de la división Si los operandos son enteros tipo del resultado

Más detalles

Introducción general al Lenguaje C (2010/2011)

Introducción general al Lenguaje C (2010/2011) Luis Valencia Cabrera lvalencia@us.es (http://www.cs.us.es/~lvalencia) Ciencias de la Computacion e IA (http://www.cs.us.es/) Introducción general al Lenguaje C (2010/2011) Universidad de Sevilla Índice

Más detalles

Programación sobre sistemas de memoria compartida: programación con OpenMP

Programación sobre sistemas de memoria compartida: programación con OpenMP Programación sobre sistemas de memoria compartida: programación con OpenMP María J. Martín Grupo de Arquitectura de Computadores Universidad de A Coruña España Contenidos del curso Tema 1: Introducción

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

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

TÉCNICAS DE CÁLCULO EN PARALELO: Directivas OpenMP y MPI (Message Passing Interface)

TÉCNICAS DE CÁLCULO EN PARALELO: Directivas OpenMP y MPI (Message Passing Interface) TÉCNICAS DE CÁLCULO EN PARALELO: Directivas OpenMP y MPI (Message Passing Interface) J. París, H. Gómez, X. Nogueira,F. Navarrina, I. Colominas, M. Casteleiro GMNI GRUPO DE MÉTODOS NUMÉRICOS EN INGENIERÍA

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 miguelvargas@cimat.mx http://www.cimat.mx/~miguelvargas CIMAT, September 2, 2015 1/34 Velocidad de los procesadores de escritorio Recientemente, la

Más detalles

Fundamentos de Programación

Fundamentos de Programación Fundamentos de Programación COMENTARIOS Microsoft Visual Basic interpreta que todo lo que está a la derecha del carácter ( ) en una línea cualquiera de programa es un comentario y no ejecuta acción alguna.

Más detalles

FUNDAMENTOS DE INFORMÁTICA

FUNDAMENTOS DE INFORMÁTICA FUNDAMENTOS DE INFORMÁTICA Tema 2 Expresiones, operadores y estructuras de control Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo Fundamentos de Informática. Departamento de Ingeniería

Más detalles

Estructura de datos y de la información Boletín de problemas - Tema 10

Estructura de datos y de la información Boletín de problemas - Tema 10 Estructura de datos y de la información Boletín de problemas - Tema 10 1. En el caso de que sea posible, dar un ejemplo de los siguientes puntos. Si no, explicar por qué no lo es. Considerar un valor genérico

Más detalles

Cilk. Un entorno de programación paralela. Tomás Muñoz Rodríguez < > 17 de noviembre de 2011

Cilk. Un entorno de programación paralela. Tomás Muñoz Rodríguez < > 17 de noviembre de 2011 Un entorno de programación paralela Tomás Muñoz Rodríguez < tomas.munoz@um.es > 17 de noviembre de 2011 Profesor: Domingo Jiménez Cánovas Asignatura: Metodología de la Programación Paralela Facultad de

Más detalles

Cómputo en paralelo con OpenMP 2

Cómputo en paralelo con OpenMP 2 Cómputo en paralelo con OpenMP 2 Miguel Vargas-Félix miguelvargas@cimat.mx http://www.cimat.mx/~miguelvargas CIMAT, September 2, 2015 1/30 Variables private y shared En el ejemplo del producto punto: double

Más detalles

Estructuras de datos: vectores en C. Clase 7 y 8 Introducción a la Computación Patricia Borensztejn

Estructuras de datos: vectores en C. Clase 7 y 8 Introducción a la Computación Patricia Borensztejn Estructuras de datos: vectores en C Clase 7 y 8 Introducción a la Computación Patricia Borensztejn Estructuras de Datos Son agrupaciones de datos si el tamaño de la estructura es conocido en tiempo de

Más detalles

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Contenidos: 1. Definición de clases 2. Implementación de los métodos 3. Constructores y destructores 4. Objetos

Más detalles

Tema 05: Elementos de un programa en C

Tema 05: Elementos de un programa en C Tema 05: Elementos de un programa en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1

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

Estructura de datos y Programación

Estructura de datos y Programación Estructura de datos y Programación Tema: Conceptos Básicos- Estructuras de control - Arreglos Ing. Analia Méndez Ing. Raquel Zarco Año: 2012 ELEMENTOS DE UN PROGRAMA EN JAVA El programa Java consta de

Más detalles

Plataformas de soporte computacional: Sistemas de memoria compartida

Plataformas de soporte computacional: Sistemas de memoria compartida Plataformas de soporte computacional: Sistemas de memoria compartida Diego R. Llanos, Belén Palop Departamento de Informática Universidad de Valladolid {diego,b.palop@infor.uva.es Índice 1. Sistemas paralelos

Más detalles

Divide y Vencerás Programación Dinámica

Divide y Vencerás Programación Dinámica Metodología de la Programación Paralela Facultad Informática, Universidad de Murcia Esquemas algorítmicos paralelos: Divide y Vencerás Programación Dinámica Domingo Giménez (Universidad de Murcia) 1 /

Más detalles

Optimización de Rutinas Multinivel de Álgebra Lineal en Sistemas Multicore

Optimización de Rutinas Multinivel de Álgebra Lineal en Sistemas Multicore Máster en Nuevas Tecnologías en Informática Facultad de Informática Universidad de Murcia Optimización de Rutinas Multinivel de Álgebra Lineal en Sistemas Multicore Autor: Jesús Cámara Moreno Directores:

Más detalles

Fundamentos de programación C++

Fundamentos de programación C++ Pág. N. 1 Fundamentos de programación C++ Familia: Editorial: Autor: Computación e informática Macro Ricardo Walter Marcelo Villalobos ISBN: 978-612-304-235-6 N. de páginas: 280 Edición: 2. a 2014 Medida:

Más detalles

Introducción al lenguaje C

Introducción al lenguaje C Introducción al lenguaje C Ampliación de Informática Belarmino Pulido Junquera Índice 1. Presentación del lenguaje C 2. Estructura de un programa en C 3. Tipos de datos escalares 4. Operadores básicos

Más 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

SESIÓN DE EJERCICIOS E1

SESIÓN DE EJERCICIOS E1 SESIÓN DE EJERCICIOS E1 Primera parte: ejercicios test Ejercicio 1 Qué definición de constantes es la correcta en lenguaje C? a) #define N=25; b) #define N 25 c) int N=25; d) int N 25 Ejercicio 2 La expresión

Más detalles

Estructura de Datos ARREGLOS

Estructura de Datos ARREGLOS Estructura de Datos ARREGLOS ESTRUCTURAS DE INFORMACIÓN Una estructura de datos o de información es una colección de datos que pueden ser caracterizados por su organización y las operaciones que se definen

Más detalles

Programación (PRG) PRACTICA 4. Elementos de programación: estructuras de control.

Programación (PRG) PRACTICA 4. Elementos de programación: estructuras de control. Programación (PRG) PRACTICA 4. Elementos de programación: estructuras de control. Facultad de Informática Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia Curso 2002/2003

Más detalles

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE) Repaso Lenguaje C OBJETOS Variables Constantes Variable: objeto del ambiente cuyo contenido puede cambiar. Constante: objeto cuyo contenido no puede cambiar. Variables: - un nombre que la identifica. Deben

Más detalles

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo Tema 4 Control de flujo Programación 2015-2016 Programación - Tema 4: Control de Flujo 1 Tema 4. Control de flujo Introducción. Estructuras condicionales. Estructuras de repetición. Programación - Tema

Más detalles

TEMA 2: PROGRAMACIÓN PARALELA (I)

TEMA 2: PROGRAMACIÓN PARALELA (I) Grupo de Arquitectura de Computadores, Comunicaciones y Sistemas ARQUITECTURA DE COMPUTADORES II AUTORES: David Expósito Singh Florin Isaila Daniel Higuero Alonso-Mardones Javier García Blas Borja Bergua

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

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++. Operadores Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++. Operadores aritméticos Son operadores binarios (requieren siempre dos operandos) que realizan las operaciones aritméticas

Más detalles

Programación I Teoría I.

Programación I Teoría I. Programación I Teoría I http://proguno.unsl.edu.ar Horarios Teorías: Jueves 8:00 10:00; aula 58 (Bloque 2) Prácticas: Comisión 1: Licenciatura Martes de 10 a 13 en sala 7, bloque 2 jueves de 10 a 13 en

Más detalles