Lenguajes Modernos en Computación de Altas Prestaciones

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

Download "Lenguajes Modernos en Computación de Altas Prestaciones"

Transcripción

1 ESCUELA UNIVERSIDAD DE LA LAGUNA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA PROYECTO FINAL DE CARRERA Lenguajes Modernos en Computación de Altas Prestaciones Rafael Rodríguez Martín LA LAGUNA, a 13 de octubre de 2008

2

3 Preliminares D. Francisco de Sande González, profesor de la Escuela Técnica Superior de Ingeniería Informática, adscrito al Departamento de E. I. O. y Computación Certifica Que la presente memoria titulada Lenguajes Modernos en Computación de Altas Prestaciones Ha sido realizada bajo su dirección por D. Rafael Rodríguez Martín, y constituye su Proyecto para optar al grado de Ingeniero en Informática por la Universidad de La Laguna. Y para que así conste, en cumplimiento de la legislación vigente y a los efectos que haya lugar, firman la presente en La Laguna a 13 de octubre de Fdo: Francisco de Sande González

4

5 A mis padres

6

7 Agradecimientos Quiero dar las gracias en primer lugar a mi familia, motivo principal para estar donde estoy. También a mis amigos, a esos que, a pesar de que pasen los años, se pueden seguir considerando parte fundamental de mi vida. Agradezco también a Francisco de Sande la paciencia, el tesón y el empuje con los que me ha ayudado a superar el reto con más obstáculos que me he encontrado hasta el día de hoy: mil gracias por la confianza y el tiempo dedicado. Por último, quiero hacer una mención especial a la vital labor que desarrollan tanto Ruymán Reyes como Carlos Segura, así como de Antonio Dorta (padre de llcomp), sin cuyo trabajo y ayuda este proyecto seguiría aún entre bambalinas.

8

9 Índice general Prólogo 5 1. Estado del arte en lenguajes de programación paralela OpenMP MPI UPC: Unified Parallel C X Chapel Fortress Otros Cluster OpenMP Cilk Cilk OpenMPD OpenWP Otros sistemas SDSM El problema de la falsa compartición SDSMs basados en páginas SDSMs basados en objetos SDSMs basados en t-uplas o variables llc El modelo de computación OTOSP Introducción a llc a través de un ejemplo Paralelismo de datos en llc Pipelines en llc

10 2 ÍNDICE GENERAL 2.5. Colas de tareas en llc Comparativa con el constructo task de OpenMP Intel Threading Building Blocks (TBB) Contenidos de la librería Sistemas multi-core Algunas herramientas para la programación de sistemas multicore POSIX threads (Pthreads) QtConcurrent Implementación de algoritmos TBB parallel for parallel reduce parallel scan parallel while y parallel do pipeline parallel sort Ejemplos Cálculo de π Quicksort Molecular Dynamics Algoritmos y resultados computacionales Plataformas utilizadas en los experimentos SGI Origin Bull Novascale Server Cluster ULL Intel Quad-Core Algoritmo del conjunto de Mandelbrot Cálculo de π Molecular Dynamics El problema de asignación de un único recurso QuickSort

11 ÍNDICE GENERAL 3 5. Conclusiones y trabajos futuros Conclusiones Trabajos futuros Bibliografía 106 Índice de figuras 116 Índice de tablas 119 Índice de listados 120

12 4 Prólogo

13 Prólogo Bienvenidos al más esperado avance de los procesadores desde que cruzamos la barrera del Gigaherzio! Debido a problemas de disipación de calor, los procesadores ya no pueden ofrecer mejoras sustanciales en su velocidad de reloj. Esto ha provocado una estabilización de su rendimiento durante muchos meses. Finalmente, Intel ha dado un paso adelante con su nuevo concepto para incrementar los niveles de rendimiento, integrando dos o más núcleos en un solo chip. Con este desarrollo, quedan de nuevo a nuestro alcance mejoras significativas de rendimiento. Como muchos ya sabéis de las máquinas con dos procesadores, la mera presencia de dos CPUs no duplica el rendimiento automáticamente. Tras disponer en un sistema los componentes adecuados, el sistema operativo necesita distribuir las tareas entre todos los recursos de los procesadores disponibles. Para aprovechar las múltiples CPUs, el software moderno necesita un diseño que permita utilizar múltiples hilos de ejecución, que encapsulen fragmentos del programa que puedan ejecutarse independientemente. Así presentaba el portal web Tom s Hardware [83] el lanzamiento del Pentium D en abril de Con el desarrollo del primer procesador de doble núcleo orientado a equipo de escritorio, Intel destapó la caja de Pandora. Se abrían nuevos objetivos: ya no bastaba con tener una aplicación MPI que predijera el clima dos horas antes o un programa OpenMP que calculara una secuencia de ADN de la manera más eficiente. La nueva masa de clientes necesita que su procesador de textos cargue los documentos el doble de rápido, que su navegador web no se quede congelado y poder reproducir películas en alta definición a pantalla completa.

14 6 Prólogo El primer paso para que todas estas aspiraciones se cumplan consistía en que los programadores cambiaran radicalmente su forma de pensar. Tras décadas en un mundo donde los sistemas tenían normalmente un procesador, el panorama había mutado completamente. Cuando un programador se habitúa a pensar en términos de descomposición de problemas, escalabilidad, hilos, concurrencia y toda la problemática asociada, le llegará el momento de pensar qué herramienta debe utilizar para resolver un problema concreto. Las herramientas maduras que provienen del mundo de la supercomputación (MPI, OpenMP, etc.) tienen ahora en el terreno de los SMP nuevos adversarios, diseñados teniendo en cuenta desde el principio los sistemas multi-core: TBB, QtConcurrent, X10, Fortress, Chapel, etc. En otro ámbito, la supercomputación sigue en auge, y la carrera por entrar en la lista Top500 tiene cada vez más contendientes, que ya no proceden solo de Estados Unidos, Europa y Japón, sino también de las potencias emergentes: India, Taiwan, Rusia, etc. En este contexto observamos, además, otro frente abierto: la investigación para desarrollar herramientas con el nivel de abstracción suficiente para permitir a los expertos en las diferentes ramas de la ciencia resolver problemas sin necesidad de tener conocimientos avanzados de informática o programación. La explosión de los sistemas multi-core requiere más que nunca el establecimiento de un estándar que soporte un modelo de computación híbrido, que aproveche tanto las capacidades de las máquinas SMP como las bondades de los clusters en cuanto a coste y facilidad de diseño. Mientras se anuncia la llegada de sistemas con decenas y cientos de núcleos en los próximos años, no hay acuerdo aún en el modelo que debemos seguir para la Computación de Altas Prestaciones de nueva generación. Este Proyecto de Final de Carrera ha tenido como objetivo realizar un análisis de la situación de los lenguajes de Computación de Altas Prestaciones, repasando desde los modelos ya establecidos como estándares de facto hasta las últimas innovaciones aportadas tanto por las comunidades académica y científica como por intereses del sector privado. Las principales aportaciones que incorpora este Proyecto son el estudio de los nuevos mecanismos que intentan explotar la próxima ubicuidad de los sistemas multi-core y la revisión del estado del arte de lenguajes para supercomputación, intentando averiguar cuán convergentes son ambas líneas

15 Prólogo 7 de investigación. Para ello hemos tenido que desarrollar algunos códigos de los cuales no disponíamos, especialmente en sus versiones TBB, y establecer comparativas de rendimiento en diferentes sistemas, que incluyen tanto superordenadores como equipos de usuario. La memoria está estructurada en cinco capítulos. En el primero, revisamos el estado del arte de los lenguajes de programación paralela. En nuestro estudio, hemos considerado tanto modelos ya establecidos y con gran cuota de mercado, hasta nuevos proyectos considerados aún en fase de experimentación. En esta tormenta de ideas participa la Universidad de La Laguna con su lenguaje llc, que propone un modelo para llevar las bondades de OpenMP al mundo de la memoria distribuida. En el segundo capítulo hacemos una introducción de sus principales características, ilustrando los conceptos más avanzados con códigos a modo de ejemplo. El tercer capítulo está dedicado a TBB, la apuesta de futuro de Intel para sistemas multi-core. Se presentan las bases para desarrollar algoritmos con esta librería, pensada para que la curva de aprendizaje de un desarrollador procedente del mundo de la programación secuencial tenga la menor pendiente posible. En el cuarto capítulo mostramos las implementaciones de varios algoritmos clásicos en paralelismo en diferentes lenguajes, realizando comparaciones de rendimiento en diversos sistemas que abarcan tanto supercomputadoras destinadas al cálculo como equipos de los que cualquier usuario puede disponer hoy en día. Por último, en el quinto capítulo se presentan brevemente conclusiones y líneas de investigación interesantes en el futuro a corto y medio plazo.

16 Capítulo 1 Estado del arte en lenguajes de programación paralela Como se describe en [30], los modelos de programación paralelos pueden clasificarse en fragmentados y no fragmentados. En los modelos de programación fragmentados, los algoritmos deben expresarse tarea a tarea, descomponiendo las estructuras de datos y el flujo de control en conjuntos. El ejemplo claro de este modelo es MPI, en el que se debe tener en cuenta en todo momento el número de procesadores que ejecutarán el algoritmo para dividir los datos consecuentemente e implementar las comunicaciones entre procesadores de forma explícita. Por otro lado, en los modelos no fragmentados, los algoritmos se desarrollan de forma global, asumiendo que un único procesador ejecuta todo el código salvo en aquellas secciones para las que se explicita ejecución paralela. OpenMP es el lenguaje más ampliamente utilizado basado en este modelo, introduciendo el paralelismo en constructos concretos mediante directivas como for o sections. A continuación, se recogen los lenguajes de programación paralela actuales que, por su amplitud de uso o por mostrar características prometedoras para las líneas de investigación futuras, hemos considerado los más relevantes.

17 2 Estado del arte en lenguajes de programación paralela 1.1. OpenMP OpenMP es un lenguaje basado en directivas de compilador, funciones de librería y variables de entorno empleado para especificar paralelismo (en entornos de memoria compartida) en C, C++ y Fortran. Es el fruto del desarrollo conjunto de varios fabricantes, entre los que se incluyen Intel, HP, IBM, Cray o Sun Microsystems. OpenMP es diferente de la mayoría de lenguajes paralelos utilizados en la práctica, puesto que es uno de los pocos clasificado dentro del modelo de los no fragmentados [30], al igual que Chapel (ver Apartado 1.5) y TBB (ver Capítulo 3). La manera típica de desarrollar aplicaciones con OpenMP es anotar secciones de paralelismo dentro de un código secuencial, principalmente bucles de código que podrían realizarse en paralelo (es decir, con iteraciones independientes entre sí). Esto deriva en ventajas a la hora de desarrollar el código, puesto que, si se descartan las directivas añadidas, el código secuencial conserva su forma original. Los compiladores de OpenMP y los entornos de ejecución implementan paralelismo utilizando conjuntos de hilos de ejecución. Los programas desarrollados bajo este modelo (denominado modelo fork-join) comienzan con un único hilo de ejecución (hilo maestro o master thread), y cuando se encuentra una directiva parallel, la ejecución se divide para que la región paralela sea ejecutada por un equipo de hilos. Cuando esta región termina, los hilos se unen de nuevo y el hilo maestro continúa la ejecución (ver Figura 1.1). OpenMP se puede también utilizar de forma fragmentada, puesto que dispone de llamadas a funciones de librería para identificar hilos, conocer cual es el número máximo de hilos disponibles, etc. Sin embargo, se utiliza más frecuentemente bajo el modelo no fragmentado, identificando las oportunidades de paralelismo y dejando las operaciones de bajo nivel al compilador y las librerías de ejecución. Esta habilidad de inyectar paralelismo incrementalmente en un programa secuencial se considera la mayor ventaja de OpenMP, puesto que redunda en una ganancia de productividad importante para los programadores. Si bien el estándar OpenMP soporta paralelismo anidado, la mayoría de

18 1.1 OpenMP 3 Figura 1.1: Modelo fork-join

19 4 Estado del arte en lenguajes de programación paralela implementaciones sólo manejan un nivel de paralelismo. Además, salvo casos concretos (como la implementación realizada por Intel en su compilador ICC[90]), OpenMP no estaba, hasta su especificación 2.5, preparado para implementar paralelismo orientado a tareas, aunque siempre había existido interés por investigar este campo [85, 87]. La situación cambiará cuando las implementaciones adopten masivamente el estándar 3.0, aprobado en su versión final en mayo de 2008 [1]. La nueva especificación aporta, además de otras novedades, mejoras en el soporte para paralelismo anidado y nuevas herramientas en el control de la planificación de los bucles. La mayor desventaja de OpenMP es su dependencia de máquinas de memoria compartida, que por lo general no escalan para un número grande de procesadores. Por este motivo, OpenMP suele emplearse en porciones de memoria compartida de una máquina mayor de memoria distribuida. Puede implementar, por ejemplo, paralelismo a nivel de hilo en un nodo de memoria compartida que forme parte de un cluster mayor, comunicado mediante MPI. 1 #pragma omp parallel private(i, local) 2 { 3 #pragma omp single 4 pi_omp = 0.0; 5 #pragma omp for reduction (+: pi_omp) 6 for (i = 0; i < N; i++) { 7 local = (i + 0.5)*w; 8 pi_omp = pi_omp + 4.0/(1.0 + local*local); 9 } 10 } 11 pi_omp *= w; Listado 1.1: Algoritmo de cálculo de π con OpenMP En el Listado 1.1 se muestra el bucle principal de un algoritmo de cálculo de π en OpenMP, analizado en profundidad en 2.2. El código se anota con #pragma omp parallel (línea 1) para que el bucle anotado con #pragma omp for (línea 5) sea paralelizado por el compilador y la librería, y se destaca que i y local serán variables privadas de cada hilo (línea 1), mientras que pi omp será compartida (como lo son por defecto todas aquellas cuyo ámbito no se especifica en el pragma).

20 1.2 MPI 5 La inicialización de la variable pi omp la realiza un único hilo (#pragma omp single en la línea 3) y el resto del bucle lo ejecutan todos los hilos. Tras la finalización del bucle, se suman los valores de pi omp y se actualiza la variable fuera del bucle paralelo (reduction (+: pi omp) en la línea 5) MPI MPI (Message Passing Interface) [62] es posiblemente la herramienta de programación más empleada en supercomputación. Se basa en el modelo fragmentado, en el que varias instancias del programa se ejecutan simultáneamente, comunicándose entre ellas mediante llamadas a la librería MPI. Estas rutinas soportan varios paradigmas de comunicación, incluyendo comunicación bidireccional, comunicación uno a muchos (broadcast), reducciones, y comunicaciones todos a todos (all-to-all). MPI-2 es una extensión del estándar original que introduce creación dinámica de tareas, permitiendo la creación de hilos en cualquier punto del programa en lugar de sólo en el inicio de la ejecución. Si bien MPI-1 carece de manejo de memoria compartida, MPI-2 introduce de forma limitada soporte para estas arquitecturas. Además, MPI-2 es capaz de ejecutar las aplicaciones desarrolladas bajo MPI-1, aunque algunas funciones han sido marcadas como obsoletas. Si bien la adopción de MPI-1 ha sido prácticamente universal en el mundo de la supercomputación, la aceptación de MPI-2 ha sido más limitada. Entre las razones, se suelen citar [2]: Si bien MPI-1 se apoya en paso de mensajes y un entorno de ejecución minimalista y estático, las implementaciones completas de MPI-2 incluyen funciones de entrada y salida y gestión dinámica de procesos, por lo que el tamaño del entorno crece considerablemente. Además, la mayoría de sistemas de planificación de trabajos no pueden soportar gestión dinámica de procesos. La mayoría de aplicaciones desarrolladas para MPI-1 tienen un buen rendimiento con MPI-2, por lo que muchos programadores prefieren no correr el riesgo de perder portabilidad adoptando MPI-2. MPI ha tenido un gran éxito en la comunidad científica debido a que es un

21 6 Estado del arte en lenguajes de programación paralela estándar bien definido, con implementaciones de libre distribución y un alto grado de portabilidad y rendimiento entre diferentes arquitecturas. Como resultado, MPI se ha convertido en el estándar de facto para la programación en paralelo. La interfaz de MPI soporta C y Fortran, y MPI-2 añade C++ a ese conjunto. Además, han aparecido implementaciones libres para Python, Java, OCaml,.NET, etc. [2] La mayoría de críticas que recibe de la comunidad se deben a la complejidad que acarrea su limitada abstracción, requiriendo al programador emplear mucho tiempo en funciones de bajo nivel. En el Listado 1.2 se muestra el código MPI que implementa el mismo algoritmo de cálculo de π que el Listado pi_mpi = 0.0; 2 for(i = MPI_NAME; i < N; i += MPI_NUMPROCESSORS) { 3 local = (i + 0.5) * w; 4 pi_mpi += 4.0/(1.0 + local*local); 5 } 6 MPI_Allreduce(&pi_mpi, &gpi_mpi, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); Listado 1.2: Algoritmo de cálculo de π con MPI Para dividir el trabajo entre los procesadores, cada uno realiza el cálculo de las iteraciones mi identificador + número de procesadores. Para ello, utilizamos en la línea 2 las variables MPI NAME (que contiene el identificador correspondiente al procesador actual) y MPI NUMPROCESSORS, que corresponde al número total de procesadores que maneja el entorno de ejecución. Así, para 32 procesadores, el procesador 0 realizaría las iteraciones 0, 32, 64, etc. Al final, MPI Allreduce (línea 6) suma los valores obtenidos por cada uno de los procesadores individuales.

22 1.3 UPC: Unified Parallel C UPC: Unified Parallel C Unified Parallel C (UPC)[34, 43] pertenece a un grupo de lenguajes de programación paralelos conocidos como lenguajes de espacio de direcciones global particionado (Partitioned Global Address Space, PGAS). Estos lenguajes están basados en un modelo de memoria en el cual un espacio de direcciones global se particiona de manera que una porción del mismo se asigna a cada procesador, y se implementan típicamente en máquinas de memoria distribuida. Precisamente, la mayor limitación de UPC que los arrays compartidos, al estar basados en C, heredan muchos de sus problemas. Los lenguajes PGAS [94] suponen una mejora a las librerías de paso de mensajes en cuanto que proveen abstracciones para crear estructuras de datos distribuidas y proveer comunicación entre diferentes instancias de un programa. Además, al estar cada parte del espacio de direcciones asignado físicamente a un procesador, se puede optimizar la localidad de los datos. En este contexto, UPC es una extensión del lenguaje ANSI C, que presenta al programador un espacio de direcciones único, compartido y particionado, en el que las variables se pueden leer y escribir por cualquier hilo de ejecución, aunque físicamente cada variable tiene asociado un único procesador. UPC también soporta una visión de control más cercana al modelo no fragmentado, introduciendo una nueva estructura de bucle: upc forall. En ella, las iteraciones globales de un bucle for típico de C se asignan a los diferentes hilos de ejecución mediante una expresión de afinidad. Si bien el soporte para crear un espacio de iteraciones global puede resultar útil, puede también derivar en un contraste en el modelo de programación. UPC utiliza el modelo SPMD (Single Program Multiple Data), en el que el nivel de paralelismo está fijado cuando se arranca el programa, típicamente con un único hilo de ejecución por procesador. Sin embargo, este modelo se rompe cuando llegamos a un bucle upc forall. La característica diferencial de este lenguaje es la posibilidad de disponer de punteros al espacio de direcciones compartido. Los punteros se pueden declarar privados (locales a un hilo de ejecución) o compartidos, y pueden además apuntar a datos que también pueden ser privados o compartidos. Esta abstracción para la programación con espacio de

23 8 Estado del arte en lenguajes de programación paralela direcciones compartidos provee una noción de afinidad, puesto que la diferenciación privado/compartido de un símbolo es parte del sistema, y visible tanto para el programador como para el compilador. En el Listado 1.3 se muestra un extracto de una implementación del algoritmo clásico de cálculo de π. En este ejemplo, los hilos llaman colectivamente a la función upc all lock alloc() (línea 5) para crear el bloqueo l. Cada hilo realiza una suma parcial en su variable privada local pi, tras lo que se realiza una reducción en la línea 11, estableciendo un bloqueo en la variable l inicializada anteriormente para evitar condiciones de carrera en la variable pi. Por último, en la línea 13 se ejecuta una barrera para sincronizar los diferentes hilos. 1 void main ( void ) 2 { 3 float local_pi = 0.0 ; 4 int i ; 5 l = upc_all_lock_alloc(); 6 upc_forall (i=0;i<n ; i++; i) 7 local_pi += (float) f ((. 5 + i) / (N)) ; 8 local_pi *= (float) (4.0 / N) ; 9 10 upc_lock(l) ; 11 pi += local_pi ; 12 upc_unlock(l) ; 13 upc_barrier; 14 if (MYTHREAD==0) printf ( "PI= %f\n", pi ) ; 15 if (MYTHREAD==0) upc_lock_free ( l ) ; 16 } Listado 1.3: Código de ejemplo de UPC 1.4. X10 El lenguaje X10 [93] está siendo desarrollado por IBM, en colaboración con algunas alianzas del ámbito académico. El objetivo es crear un nuevo modelo de programación que aumente la productividad de la programación paralela mediante una reducción de la curva de aprendizaje. Para ello, el nuevo

24 1.4 X10 9 lenguaje es muy similar a Java, e intenta adoptar los conceptos habituales en los lenguajes de programación paralela: Paralelismo de datos Paralelismo de control Paso de mensajes Productor-consumidor Además, para intentar abarcar el mayor número de máquinas objetivo, intenta que las implementaciones algorítmicas sean independientes de las arquitecturas, para poder así llegar al caso general de clusters compuestos de varios nodos SMP con jerarquías de memoria no uniformes interconectados mediante tecnologías heterogéneas. 1 do { 2 now(c) { 3 ateach (n: nodes) { //Cluster-level parallelism 4 foreach (s: Sweeps) { // SMP parallelism 5 // receive inputs 6 flows = new Flux[R](k) { // SMT parallelism 7 async (...) inputs[s][k].receive(); 8 } 9 // Choice of using clock or force to synchronize 10 // on flows 11 // Thread-local with vector & co-processor 12 // parallelism 13 flux = compute(s, flows); 14 // send outputs } // foreach 17 } // ateach 18 } // now 19 // use clock c to wait for al sweeps to complete 20 next c; } while (err > MAX_ERROR); Listado 1.4: Código de ejemplo de X10

25 10 Estado del arte en lenguajes de programación paralela Dichas jerarquías de paralelismo se intentan aprovechar, como se muestra en el Listado 1.4, extraído de [82], que representa parte de un código que resuelve el problema del transporte mallado no estructurado (UMT: Unstructured Mesh Transport) [32]. En el mismo, se observa que en el bucle más interno se aprovecha el paralelismo a nivel de multi-hilo (línea 6); en el bucle que lo envuelve, paralelismo a nivel SMP (línea 4); y en el bucle más externo, paralelismo a nivel de cluster (línea 3). Existe un compilador de IBM basado en la especificación 0.41, y un compilador libre basado en lo que se cree tendrá la especificación 0.5 (sobrecarga de operadores, tipos genéricos, etc.). Se denomina XTC-X10 y está disponible para descarga en [17] Chapel Chapel (Cascade High Productivity Language) [51, 30] es un lenguaje de programación paralela impulsado por Cray Inc. como parte del proyecto Cray Cascade. El objetivo del proyecto es aumentar la abstracción de los lenguajes actuales y mejorar la separación entre la expresión de los algoritmos y los detalles de implementación de las estructuras de datos. Chapel es un lenguaje no fragmentado cuya sintaxis se diferencia de otros lenguajes paralelos basados en C o Fortran, si bien no carece de similitudes con ellos. Soporta un modelo de programación paralela de alto nivel mediante abstracciones que soportan paralelismo de datos, de tareas y paralelismo anidado. Permite optimizaciones para la localidad de datos y cálculos en el programa, mediante abstracciones para la distribución de los datos y reparto de cálculos según la misma. Además, dispone de características de programación orientada a objetos para permitir la reutilización de código. Una de las nuevas abstracciones que aporta es el concepto de locale. Una locale es una unidad de una arquitectura paralela, capaz de ejecutar código y tener acceso a la memoria de la máquina. En un cluster, por ejemplo, cada nodo y su memoria local asociada sería considerado una locale. El diseño se basa en un modelo de ejecución multi-hilo en el que no se ofrecen al programador funciones de bajo nivel para manejo de hilos, sino que éste emplea abstracciones de alto nivel para que el compilador y el entorno de

26 1.5 Chapel 11 ejecución sean quienes realizan las tareas de bajo nivel mediante un conjunto de hilos anónimos. Para el paralelismo de datos, Chapel introduce el concepto de dominio, que consiste en un conjunto de índices utilizados para definir el tamaño y la forma de un vector y para soportar iteración en paralelo. Existen diferentes tipos de dominio según el tipo de datos empleado para el indexado. Esto proporciona una gran flexibilidad, pudiendo por ejemplo crearse una tabla hash fácilmente (teniendo un dominio indexado mediante cadenas). Sobre estos tipos dominio (o también arrays u otras expresiones) se puede iterar mediante bucles forall. De esta forma se pueden recorrer total o parcialmente las diferentes estructuras de datos de forma paralela. Chapel soporta también paralelismo de tareas (sentencia cobegin) y paralelismo anidado. Si bien Chapel toma conceptos de muchos lenguajes anteriores, está más claramente basado en High-Performance Fortran (HPF) [44], ZPL [31] y las extensiones MTA de Cray para Fortran y C [26]. Aunque los planes apuntan a una liberación de Chapel cuando alcance una madurez adecuada, actualmente no es posible su descarga para realizar pruebas. 1 def main ( } { 2 const ProblemSpace = [ 1..n,1..n],BigDomain = [ 0..n+1,0..n+1]; 3 var X,XNew : [BigDomain] real = 0.0; 4 X[n+1, 1..n] = 1.0 ; 5 var iteration = 0, delta : real; 6 const north = (-1,0), south = (1,0), 7 east = (0,1), west = (0,-1); 8 do { 9 forall ij in ProblemSpace do 10 XNew (ij) = (X(ij+north) + X(ij+south) + 11 X(ij+east) + X(ij+west)) / 4.0; 12 delta = max reduce abs(xnew[problem5pace] -X[Problem5pace]); 13 X[ProblemSpace] = XNew[ProblemSpace]; 14 iteration += 1 ; 15 } while ( delta > epsilon ); 16 } Listado 1.5: Algoritmo de Jacobi implementado con Chapel

27 12 Estado del arte en lenguajes de programación paralela El Listado 1.5 muestra parte de una implementación del algoritmo de Jacobi realizada en Chapel. El tamaño de la cuadrícula para los cálculos se define usando dos dominios (línea 2), y el espacio del problema se declara a través de estos dominios. Las direcciones en la cuadrícula se representan usando t-uplas de dos valores (líneas 6 y 7), que se añaden a cualquier coordenada de la cuadrícula (líneas 10 y 11) para indicar los puntos correctos que rodean la coordenada actual. En la línea 9 se muestra el bucle paralelo forall, que realiza los principales cálculos para todas las coordenadas i,j dentro del espacio del problema de forma concurrente. Finalmente, se realiza una operación de reducción (línea 12) para calcular la diferencia entre el espacio anterior del problema y el nuevo Fortress Fortress [63, 23] es la apuesta de Sun Microsystems para el proyecto de investigación HPCS [36] de DARPA, en los que también están incluidos X10 y Chapel. La mayor diferencia respecto a estos dos reside en que Fortress, a pesar de que toma conceptos de lenguajes ya existentes, ha desarrollado una sintaxis novedosa que no se parece a ningún lenguaje actual en concreto, como se comprobará en el análisis del Listado 1.6. El motivo de esta ruptura con los lenguajes actuales es el intento explorar nuevas maneras de mejorar la programabilidad de los lenguajes, por lo que se ha diseñado Fortress partiendo de cero. De esta forma, se ha podido dotar al lenguaje de soporte para transacciones, localidad de datos y computación paralela implícita. La sintaxis y el sistema de tipado se han creado teniendo en cuenta el uso científico que se les iba a dar, por lo que contemplan notación matemática, chequeo de tipos de matrices multidimensionales, etc. El lenguaje está pensado para crear programas modulares de forma natural. El propio lenguaje sigue esta máxima, estando preparado para implementar nuevas características en un futuro de forma transparente. De hecho, la mayor parte del propio Fortress está implementado en librerías que se ejecutan sobre un pequeño núcleo subyacente.

28 1.6 Fortress 13 Los bloques básicos de Fortress son objetos (objects) y traits. Los objetos definen campos y métodos, mientras que los traits declaran conjuntos de métodos. Los traits pueden declarar métodos abstractos (es decir, únicamente para cabeceras) o concretos (cabeceras y definiciones). 1 component buffons 2 3 export Executable 4 5 run(args:string...):()=do 6 needlelength = 20 7 numrows = 10 8 tableheight = needlelength numrows 9 var hits : RR64 := var n : RR64 := println("starting parallel Buffons") 13 recordtime(6.0) 14 for i <- 1#3000 do 15 delta_x = random(2.0) delta_y = random(2.0) rsq = delta_x^2 + delta_y^2 18 if 0 < rsq < 1 then 19 y1 = tableheight random(1.0) 20 y2 = y1 + needlelength (delta_y / SQRT rsq) 21 (y_l, y_h) = (y1 MIN y2, y1 MAX y2) 22 if ceiling(y_l/needlelength) = floor(y_h/needlelength) then 23 atomic do hits += 1.0 end 24 end 25 atomic do n += 1.0 end 26 end 27 end 28 probability = hits/n 29 pi_est = 2.0/probability 30 printtime(6.0) 31 println("") 32 print("estimated Pi = ") 33 println(pi_est) 34 end 35 end Listado 1.6: Cálculo de π mediante el algoritmo de la aguja de Buffon en Fortress

29 14 Estado del arte en lenguajes de programación paralela El Listado 1.6 es una implementación en Fortress del algoritmo de cálculo de π denominado La aguja de Buffon [84]. La estimación se realiza dividiendo el número de veces que la aguja que se deja caer toca una línea entre el número total de caídas. Cuanto mayor sea el número de experimentos o iteraciones, más precisa será la estimación. Los cálculos entre iteraciones son independientes entre sí, por lo que el bucle puede ser ejecutado en paralelo. Para conseguir este paralelismo se utiliza el bucle implícitamente paralelo de la línea 14. El ejemplo ilustra varias características del lenguaje: en la línea 9 (así como en la 20 y en la 21) se muestra que la yuxtaposición de variables representa multiplicación, tomando la notación del lenguaje matemático. El Listado 1.6 también muestra las diferentes declaraciones de variables que se pueden realizar, con variables mutables de tipos especificados y otras variables inmutables o constantes. Las expresiones atómicas (líneas 23 y 25) se utilizan para control de concurrencia, y aseguran que sólo un hilo puede leer o escribir simultáneamente las variables dentro de la expresión. Fortress es un lenguaje interpretado. El intérprete actualmente se ejecuta sobre la máquina virtual de Java. La versión 1.0 del intérprete se puede descargar libremente en la página web del proyecto [63] Otros En este apartado nos centraremos en describir algunos otros lenguajes, que si bien no tienen la relevancia de los estudiados hasta este punto, también pensamos que merecen nuestra atención por su relación tanto con llc como con la programación de sistemas multi-core que estudiaremos respectivamente en los Capítulos 2 y Cluster OpenMP El avance de OpenMP tiene como principal factor limitante la dependencia de sistemas de memoria compartida. A medida que se necesita un mayor número de procesadores, las máquinas de memoria compartida necesitan interconexiones cada vez más costosas. Cuando este número crece lo

30 1.7 Otros 15 suficiente, ya ni siquiera hay máquinas de memoria compartida de ese tamaño [22]. Los clusters de memoria distribuida, sin embargo, cuentan con conexiones mucho más asequibles (Ethernet, Infiniband, etc.) y pueden desarrollarse con hardware mucho más barato. Sin embargo, el estándar de facto para este tipo de sistemas (MPI) tiene una curva de aprendizaje mayor que la de OpenMP, y cuenta con otras problemáticas de implementación a medida que los algoritmos paralelos se complican y sus estructuras de datos se hacen más irregulares. Principalmente por estos motivos, muchos proyectos han intentado acercar el mundo OpenMP al de los sistemas de memoria distribuida. Cluster OpenMP y llc son buenos ejemplos de ello. Intel ha desarrollado Cluster OpenMP[48] como una extensión de OpenMP capaz de ejecutarse en múltiples sistemas SMP simultáneamente sin necesidad de utilizar MPI. Este sistema DSM (Distributed Shared Memory) está basado en el sistema TreadMarks [70], desarrollado por la Universidad de Rice como un proyecto de investigación académica. Cluster OpenMP extiende OpenMP con una nueva directiva (sharable) para identificar aquellas variables que pueden ser referenciadas por más de un hilo, y que, por lo tanto, deben ser gestionadas por el sistema DSM. Algunas variables son automáticamente identificadas como sharable por el compilador (variables creadas en la pila de una subrutina, variables declaradas como shared en una región paralela, etc.), mientras que otras deben declararse explícitamente (principalmente las variables globales de la aplicación). El mecanismo DSM actúa agrupando las variables compartidas en las mismas páginas de memoria, y aplicando protecciones de lectura o escritura según el estado de esas páginas en el resto de nodos. Por ejemplo, si se quiere leer una variable que ha sido modificada por otro nodo pero el sistema emite una señal SIGSEGV por estar protegida contra lectura, significa que otro nodo ha modificado alguna variable compartida, y se ha de sincronizar esa página, tras lo cual se vuelve a ejecutar la instrucción que provocó la señal. Por tanto, la protección en Cluster OpenMP es a nivel de página, y realizar una operación de sincronización sobre una variable compartida equivale a sincronizarlas todas.

31 16 Estado del arte en lenguajes de programación paralela Para que este modelo escale adecuadamente, es necesario evitar la sincronización en la medida de lo posible, puesto que un acceso a una página contenida en otro nodo es mucho más costoso que un acceso a caché o a memoria local. En la tabla 1.1 se muestra una comparativa del coste de los diferentes accesos soportados por el DSM (extraída de [48]), en la cual se observa que los accesos mediante red tienen una latencia de dos órdenes de magnitud mayor. Tipo de acceso Ciclos de CPU Caché L1 1-2 Caché L2 5-7 Caché L Memoria Nodo remoto (Gigabit Ethernet) Nodo remoto (Infiniband) Tabla 1.1: Latencia de los diferentes tipos de acceso a memoria del procesador Itanium Así pues, como cabe esperar, los problemas ideales para sacar el máximo rendimiento de Cluster OpenMP son aquellos con mucho grano (es decir, mucha computación entre sincronizaciones). El Listado 1.7, extraído de [73], implementa parte de un algoritmo para calcular la energía potencial de un conjunto de partículas que interactúan mediante el potencial de cada par. Observamos en el mismo cómo tres variables se declaran sharable (xdim, ydim y n), puesto que son variables globales y compartidas entre todos los hilos. Además, la zona de memoria a la que apuntan se aloja con la rutina kmp sharable malloc, en lugar del malloc convencional. 1 int n; 2 int niter; 3 double *xdim, *ydim; 4 #pragma intel omp sharable(xdim,ydim,n) 5 6 double computepot(); 7 void power(double *x, double*y, int i, int j); 8 void allocpositions(); 9 void initpositions(); 10 void updatepositions(); 11

32 1.7 Otros int main() { 13 int i; 14 double pot; n = 2000; 17 niter = 10; allocpositions(); 20 initpositions(); 21 updatepositions(); for( i=0; i<niter; i++ ) { 24 pot = computepot(); 25 printf("potential: %f\n", pot); 26 updatepositions(); 27 } 28 } void allocpositions() 31 { 32 double * r_tmp2; 33 int i; r_tmp2 = (double *)kmp_sharable_malloc(sizeof(double)*2*n); 36 if (!r_tmp2) 37 { 38 printf("error allocating memory\n"); 39 exit(-1); 40 } xdim = r_tmp2; 43 r_tmp2 += n; 44 ydim = r_tmp2; 45 } double computepot() { 48 int i, j; 49 double pot = 0.0; 50 double distx, disty, dist; #pragma omp parallel private(distx, disty, dist, i, j) 53 { 54 #pragma omp for schedule(static) reduction(+: pot)

33 18 Estado del arte en lenguajes de programación paralela 55 for( i=0; i<n; i++ ) { 56 for( j=0; j<i; j++ ) { 57 power(&distx, &disty, i, j); 58 dist = sqrt( distx + disty ); 59 pot += 1.0 / dist; 60 } 61 } 62 } 63 return pot; 64 } void updatepositions() { 67 int i, j; for( j=0; j<n; j++ ) 70 { 71 xdim[j] -= ( (double) rand() / (double) RAND_MAX ); 72 ydim[j] -= ( (double) rand() / (double) RAND_MAX ); 73 } 74 } Listado 1.7: Algoritmo para calcular energía potencial en partículas con Cluster OpenMP Cilk El Proyecto Cilk [56, 3] surgió en el Instituto Tecnológico de Massachusetts (MIT) en 1994, siendo presentado al gran público por primera vez entre los años 1995 y 1996 [25]. Está basado en el lenguaje Cilk, un superconjunto de C. Dispone de un compilador/preprocesador para convertir el código en C y un entorno de ejecución. Se distribuye mediante licencia GPL. El principio básico de diseño del lenguaje es que el programador debería ser responsable de expresar el paralelismo, identificando las tareas que pueden ser ejecutadas en paralelo, y dejar el resto de detalles al entorno de ejecución. Concretamente, el planificador será quien se encargue de dividir el trabajo entre los procesadores disponibles. Por lo tanto, podemos situar este lenguaje dentro del conjunto de los no fragmentados.

34 1.7 Otros 19 Para expresar el paralelismo, Cilk extiende el lenguaje C con algunas palabras reservadas. Si se eliminan dichas palabras reservadas de una aplicación Cilk, el resultado es un programa secuencial C válido, por lo que permite introducir paralelismo de forma secuencial. 1 cilk int fib (int n) 2 { 3 if (n<2) { 4 return n; 5 } else { 6 int x, y; 7 x = spawn fib (n-1); 8 y = spawn fib (n-2); 9 sync; 10 return (x+y); 11 } 12 } cilk int main (int argc, char *argv[]) 15 { 16 int n, result; 17 n = atoi(argv[1]); 18 result = spawn fib(n); 19 sync; 20 printf ("Result: %d\n", result); 21 return 0; 22 } Listado 1.8: Algoritmo para calcular el enésimo número de Fibonacci con Cilk Las palabras reservadas actualmente implementadas son: cilk: necesaria para distinguir código Cilk de código C, puesto que las funciones Cilk pueden hacer llamadas a funciones C, pero no al contrario. spawn: indica que la llamada a procedimiento que acompaña puede ser ejecutada en paralelo si el planificador así lo determina. sync: detiene la ejecución hasta que finalicen todos los procesos spawn que se estén ejecutando. Actúa como una llamada de sincronización.

35 20 Estado del arte en lenguajes de programación paralela inlet y abort se utilizan para implementar operaciones avanzadas (como secuencias atómicas) dentro de procesos spawn. El Listado 1.8, extraído del manual de Cilk [74] y que calcula el enésimo número de la secuencia de Fibonacci, muestra la similitud de un algoritmo implementado mediante Cilk respecto a su versión secuencial. Para paralelizar esta implementación del algoritmo, tan sólo es necesario introducir las 3 palabras clave fundamentales de Cilk: cilk para indicar que ambas rutinas pertenecen al lenguaje, spawn para indicar qué procedimientos pueden ser ejecutados en paralelo, y sync para forzar la sincronización al final de la ejecución de los mismos Cilk++ Cilk++ [7] surgió como respuesta al crecimiento del mercado de los sistemas multi-core. En 2006, un profesor que había estado trabajando en el proyecto creó la empresa Cilk Arts Inc. para llevar al mercado una versión comercial de Cilk que respondiera a las necesidades y oportunidades que se estaban generando. El nuevo software, reescrito por completo, fue denominado Cilk++, e incluye soporte para C++, tanto con compiladores Microsoft como GCC, soporte para bucles, y el concepto de hiperobjetos Cilk, que consiste en un nuevo constructo diseñado para resolver condiciones de carrera generadas por acceso paralelo a variables globales OpenMPD OpenMPD [27] es un modelo de programación basado en directivas para sistemas de memoria distribuida, desarrollado por la Universidad de Tsukuba. El proyecto surge como una evolución de Omni/SCASH (analizado dentro del Apartado ). Al igual que llcomp, toma como entrada código C (o Fortran) anotado con dichas directivas (similares a OpenMP) y lo traduce a MPI. Por tanto, aunque no es compatible de ningún modo con OpenMP, guarda similitudes en

36 1.7 Otros 21 las ventajas que aporta: paralelización incremental sobre el código secuencial y modelo no fragmentado que mejora la productividad del programador. En el Listado 1.9 (extraído de [27]) podemos observar que las directivas han de incluir cláusulas para indicar al compilador cómo se distribuyen las variables y cómo sincronizarlas (línea 5). De esta manera se puede inducir, por ejemplo, que un array se replique en todos los procesadores, o bien que cada procesador almacene tan sólo aquella porción que necesita para realizar los cálculos que le corresponden. Por tanto, la sincronización en este modelo es explícita y se implementa mediante diferentes patrones (comunicación entre vecinos, reducciones, etc.). En un futuro, se planea añadir a este modelo paralelismo anidado, integración con OpenMP para implementar modelos de programación híbridos y nuevos patrones de comunicación y distribuciones de datos. 1 #pragma ompd distvar(var = array;dim = 2) 2 3 main(){ 4 int i, j, res; 5 res = 0; 6 7 #pragma ompd for affinity(array) reduction(+:res) 8 for(i = 0; i < 10; i++) 9 for(j = 0; j < 10; j++){ 10 array[i][j] = func(i, j); 11 res += array[i][j]; 12 } 13 } Listado 1.9: Código de ejemplo de OpenMPD OpenWP El INRIA [9] (Instituto Nacional Francés para la Investigación en Informática y Control) ha desarrollado un modelo de programación denominado OpenWP [16], compatible con OpenMP y utilizable en aplicaciones híbridas con éste o con MPI. Actualmente soporta C, Fortran y Java, y es compatible con códigos existentes en estos lenguajes. El objetivo es ejecutar (de manera transparente a los programadores) los códigos existentes en

37 22 Estado del arte en lenguajes de programación paralela OpenMP sobre arquitecturas distribuidas, así como facilitar el desarrollo de nuevas aplicaciones gracias a que mantiene la compatibilidad con lenguajes ampliamente establecidos. El sistema, que consta de un compilador y un entorno de ejecución, trata de modelar el paralelismo de una aplicación mediante flujos, expresando así dependencias entre tareas y permitiendo al entorno de ejecución determinar cuáles puede ejecutar concurrentemente en un momento dado. El compilador ofrece como salida una librería con los bloques funcionales (que se distribuyen a todos los nodos), un archivo que describe el flujo de trabajo, y operaciones de acceso a datos que, añadidas a las funciones de la aplicación, permiten implementar las dependencias entre las tareas identificadas. El entorno de ejecución sincroniza los nodos con llamadas RPC no bloqueantes basadas en las directivas introducidas por el programador Otros sistemas SDSM Durante la fase de recopilación de información realizada en este proyecto para estudiar el estado del arte de los lenguajes modernos aplicados a la supercomputación, hemos incidido con especial énfasis en el estudio de las diferentes opciones desarrolladas en los últimos años para implementar sistemas de memoria compartida por software en máquinas de memoria distribuida (Software Distributed Shared Memory o SDSM ). En su gran mayoría no han llegado a tener gran difusión fuera del ámbito puramente académico, pero otros han sido la base para desarrollos posteriores que han dado lugar a algunos de los sistemas comentados anteriormente. Es precisamente su relación con entornos académicos lo que, en algunos casos, impide recopilar información amplia acerca de los sistemas, dada la carencia de código publicado o información en general. El apartado se divide en diferentes secciones, correspondientes a los diseños más habituales seguidos según la manera de distribuir la memoria entre los diferentes nodos. La principal fuente de información ha sido un estudio [50] llevado a cabo

38 1.7 Otros 23 por Javid Huseynov, profesor de la Universidad de California Irvine, a partir de la cual se han obtenido diversas líneas de investigación, mientras que hemos recabado otros a través de un estudio bibliográfico [49, 52] El problema de la falsa compartición Como veremos más adelante, algunas de las aproximaciones estudiadas están lastradas por un mismo problema, denominado falsa compartición (false sharing en el término inglés). La falsa compartición se produce cuando las variables utilizadas por diferentes hilos comparten las mismas posiciones en memoria caché [79]. Si se produce esta situación, los accesos sobre las mismas líneas de caché por diferentes hilos provocarán una contención innecesaria, y la memoria caché deberá refrescar su contenido continuamente, llegando a ser incluso más lenta que la memoria principal SDSMs basados en páginas Este tipo de software distribuye entre los diferentes nodos páginas de memoria virtual de tamaño fijo. Tiene varias desventajas: El tamaño de las zonas de memoria compartida no siempre se acercará al óptimo. Da lugar a problemas de falsa compartición. Aun así, son los de mayor proliferación debido a la mayor complejidad de otras aproximaciones que analizaremos posteriormente. CASHMERE (Coherence Algorithms for SHared MEmory architectures) [71] Trata de implementar coherencia de cachés por sofware en máquinas NCC-NUMA, desarrollado por la Universidad de Rochester, que llegó a establecer una patente sobre el sistema.

39 24 Estado del arte en lenguajes de programación paralela CVM (Coherent Virtual Machine) [55] Es una librería en espacio de usuario que provee memoria compartida por software en máquinas NCC-NUMA (Non-Cache-Coherent Non-Uniform Memory Access). Fue desarrollado por la Universidad de Maryland, pero el proyecto quedó discontinuado años atrás, quedando el código disponible en [20]. HAMSTER (Hybrid-DSM based Adaptive and Modular Shared memory architecture) [68] Este SDSM desarrollado por la Universidad de Munich forma parte de un proyecto más complejo (Smile Project, ver Figura 1.2) cuyo objetivo es soportar clusters de PCs consiguiendo un alto rendimiento gracias a una tecnología de interconexión denominada SCI (Scalable Coherent Interface) sobre la cual se soportan varios paradigmas de programación paralela (PVM, MPI, etc.). Entre estos, todos los que se basen en memoria distribuida estarán soportados por el SDSM denominado HAMSTER (ver Figura 1.3). Figura 1.2: Organización en capas del proyecto Smile PM2 [53] PM2 (Parallel Multithreaded Machine) es un entorno multihilo distribuido diseñado para soportar de manera eficiente aplicaciones con paralelismo irregular sobre arquitecturas distribuidas de nodos SMP. Está diseñado en una arquitectura de tres capas independientes: librerías de comunicación, de ejecución y de manejo de hilos.

40 1.7 Otros 25 Figura 1.3: Organización en capas de Hamster Actualmente, PM2 se desarrolla en el LaBRI (Laboratoire Bordelais de Recherche en Informatique) [13], un centro de investigación en Burdeos, financiado por INRIA [9], el CNRS (Centre National de la Recherche Scientifique) [12] y la Universidad de Burdeos. Dispone de licencia GPL, y está disponible para descarga en [21]. ctdsm [64] Es un módulo dentro de unas librerías de propósito general denominadas CORAL, que tratan de proporcionar un conjunto de servicios y funcionalidades independientes del sistema. Aunque el proyecto ya no está activo, disponía de operaciones de consistencia estricta y relajada, así como tolerancia a fallos. Estaba desarrollado por una empresa privada: Infinite Monkeys Incorporated [8]. PCOMP: Compiler from a high level parallel programming language with nested parallel constructs to DSM systems [67] El objetivo del proyecto PCOMP, desarrollado por la Universidad de Haifa y ya finalizado, era aplicar tecnología de compiladores para acelerar la ejecución de programas paralelos de alto nivel ejecutados por un sistema DSM que acepte sólo un estilo de programación de bajo nivel. Esto quiere decir que el compilador optimiza el código de un programa dado para que la simulación de la memoria compartida mejore mediante movimiento de páginas del sistema DSM que la soporta.

4. Programación Paralela

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

Más detalles

Introducción a las redes de computadores

Introducción a las redes de computadores Introducción a las redes de computadores Contenido Descripción general 1 Beneficios de las redes 2 Papel de los equipos en una red 3 Tipos de redes 5 Sistemas operativos de red 7 Introducción a las redes

Más detalles

Preliminares. Tipos de variables y Expresiones

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

Más detalles

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA Autor: Carlos Javier Martín González. Licenciado en Física Teórica por la Universidad Autónoma de Madrid. Analista programador y funcional. Desarrollador

Más detalles

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos 2.1. Principios básicos del Modelado de Objetos UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos Hoy en día muchos de los procesos que intervienen en un negocio o empresa y que resuelven

Más detalles

Nicolás Zarco Arquitectura Avanzada 2 Cuatrimestre 2011

Nicolás Zarco Arquitectura Avanzada 2 Cuatrimestre 2011 Clusters Nicolás Zarco Arquitectura Avanzada 2 Cuatrimestre 2011 Introducción Aplicaciones que requieren: Grandes capacidades de cómputo: Física de partículas, aerodinámica, genómica, etc. Tradicionalmente

Más detalles

Modelo de aplicaciones CUDA

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

Más detalles

K2BIM Plan de Investigación - Comparación de herramientas para la parametrización asistida de ERP Versión 1.2

K2BIM Plan de Investigación - Comparación de herramientas para la parametrización asistida de ERP Versión 1.2 K2BIM Plan de Investigación - Comparación de herramientas para la parametrización asistida de ERP Versión 1.2 Historia de revisiones Fecha VersiónDescripción Autor 08/10/2009 1.0 Creación del documento.

Más detalles

Introducción a la Firma Electrónica en MIDAS

Introducción a la Firma Electrónica en MIDAS Introducción a la Firma Electrónica en MIDAS Firma Digital Introducción. El Módulo para la Integración de Documentos y Acceso a los Sistemas(MIDAS) emplea la firma digital como método de aseguramiento

Más detalles

Creación y administración de grupos de dominio

Creación y administración de grupos de dominio Creación y administración de grupos de dominio Contenido Descripción general 1 a los grupos de Windows 2000 2 Tipos y ámbitos de los grupos 5 Grupos integrados y predefinidos en un dominio 7 Estrategia

Más detalles

Introducción a la programación orientada a objetos

Introducción a la programación orientada a objetos Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación

Más detalles

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Documento de trabajo elaborado para la Red Temática DocenWeb: Red Temática de Docencia en Control mediante Web (DPI2002-11505-E)

Más detalles

Parámetros con la ventana de selección de usuario, reglas, texto y descomposición (IVE)

Parámetros con la ventana de selección de usuario, reglas, texto y descomposición (IVE) QUÉ SON CONCEPTOS PARAMÉTRICOS? Los conceptos paramétricos de Presto permiten definir de una sola vez una colección de conceptos similares a partir de los cuales se generan variantes o conceptos derivados

Más detalles

Ingº CIP Fabian Guerrero Medina Master Web Developer-MWD

Ingº CIP Fabian Guerrero Medina Master Web Developer-MWD 1 Java es un lenguaje de programación de Sun Microsystems originalmente llamado "Oak. James Gosling Bill Joy 2 Oak nació para programar pequeños dispositivos electrodomésticos, como los asistentes personales

Más detalles

Elementos requeridos para crearlos (ejemplo: el compilador)

Elementos requeridos para crearlos (ejemplo: el compilador) Generalidades A lo largo del ciclo de vida del proceso de software, los productos de software evolucionan. Desde la concepción del producto y la captura de requisitos inicial hasta la puesta en producción

Más detalles

CAPÍTUL07 SISTEMAS DE FILOSOFÍA HÍBRIDA EN BIOMEDICINA. Alejandro Pazos, Nieves Pedreira, Ana B. Porto, María D. López-Seijo

CAPÍTUL07 SISTEMAS DE FILOSOFÍA HÍBRIDA EN BIOMEDICINA. Alejandro Pazos, Nieves Pedreira, Ana B. Porto, María D. López-Seijo CAPÍTUL07 SISTEMAS DE FILOSOFÍA HÍBRIDA EN BIOMEDICINA Alejandro Pazos, Nieves Pedreira, Ana B. Porto, María D. López-Seijo Laboratorio de Redes de Neuronas Artificiales y Sistemas Adaptativos Universidade

Más detalles

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

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

Más detalles

Introducción En los años 60 s y 70 s cuando se comenzaron a utilizar recursos de tecnología de información, no existía la computación personal, sino que en grandes centros de cómputo se realizaban todas

Más detalles

MANUAL DE USUARIO DE LA APLICACIÓN DE ACREDITACION DE ACTIVIDADES DE FORMACION CONTINUADA. Perfil Entidad Proveedora

MANUAL DE USUARIO DE LA APLICACIÓN DE ACREDITACION DE ACTIVIDADES DE FORMACION CONTINUADA. Perfil Entidad Proveedora MANUAL DE USUARIO DE LA APLICACIÓN DE ACREDITACION DE ACTIVIDADES DE FORMACION CONTINUADA Perfil Entidad Proveedora El objetivo del módulo de Gestión de Solicitudes vía Internet es facilitar el trabajo

Más detalles

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS 4 ARQUITECTURA DE DISTRIBUCIÓN DE DATOS Contenido: Arquitectura de Distribución de Datos 4.1. Transparencia 4.1.1 Transparencia de Localización 4.1.2 Transparencia de Fragmentación 4.1.3 Transparencia

Más detalles

Arquitectura de sistema de alta disponibilidad

Arquitectura de sistema de alta disponibilidad Mysql Introducción MySQL Cluster esta diseñado para tener una arquitectura distribuida de nodos sin punto único de fallo. MySQL Cluster consiste en 3 tipos de nodos: 1. Nodos de almacenamiento, son los

Más detalles

GENERACIÓN DE CÓDIGO

GENERACIÓN DE CÓDIGO GENERACIÓN DE CÓDIGO INTRODUCCION La generación de código es la fase más compleja de un compilador, puesto que no sólo depende de las características del lenguaje fuente sino también de contar con información

Más detalles

Tema 4. Gestión de entrada/salida

Tema 4. Gestión de entrada/salida Tema 4. Gestión de entrada/salida 1. Principios de la gestión de E/S. 1.Problemática de los dispositivos de E/S. 2.Objetivos generales del software de E/S. 3.Principios hardware de E/S. 1. E/S controlada

Más detalles

Capítulo 5. Cliente-Servidor.

Capítulo 5. Cliente-Servidor. Capítulo 5. Cliente-Servidor. 5.1 Introducción En este capítulo hablaremos acerca de la arquitectura Cliente-Servidor, ya que para nuestra aplicación utilizamos ésta arquitectura al convertir en un servidor

Más detalles

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática Tema 1 Introducción. Arquitectura básica y Sistemas Operativos Fundamentos de Informática Índice Descripción de un ordenador Concepto básico de Sistema Operativo Codificación de la información 2 1 Descripción

Más detalles

Práctica del paso de generación de Leads

Práctica del paso de generación de Leads Práctica del paso de generación de Leads La parte práctica de este módulo consiste en poner en marcha y tener en funcionamiento los mecanismos mediante los cuales vamos a generar un flujo de interesados

Más detalles

Instalación y mantenimiento de servicios de Internet. U.T.3.- Servicio DNS

Instalación y mantenimiento de servicios de Internet. U.T.3.- Servicio DNS Instalación y mantenimiento de servicios de Internet U.T.3.- Servicio DNS 1 Qué es el servicio DNS? A los usuarios de Internet les resulta complicado trabajar con direcciones IP, sobre todo porque son

Más detalles

Base de datos en Excel

Base de datos en Excel Base de datos en Excel Una base datos es un conjunto de información que ha sido organizado bajo un mismo contexto y se encuentra almacenada y lista para ser utilizada en cualquier momento. Las bases de

Más detalles

CURSO: APACHE SPARK CAPÍTULO 2: INTRODUCCIÓN A APACHE SPARK. www.formacionhadoop.com

CURSO: APACHE SPARK CAPÍTULO 2: INTRODUCCIÓN A APACHE SPARK. www.formacionhadoop.com CURSO: APACHE SPARK CAPÍTULO 2: INTRODUCCIÓN A APACHE SPARK www.formacionhadoop.com Índice 1 Qué es Big Data? 2 Problemas con los sistemas tradicionales 3 Qué es Spark? 3.1 Procesamiento de datos distribuido

Más detalles

comunidades de práctica

comunidades de práctica 1. Introducción CoSpace es una plataforma web diseñada para proporcionar un espacio virtual de interacción y colaboración entre formadores en comunidades virtuales. Se originó como resultado de las necesidades

Más detalles

Servicios avanzados de supercomputación para la ciència y la ingeniería

Servicios avanzados de supercomputación para la ciència y la ingeniería Servicios avanzados de supercomputación para la ciència y la ingeniería Servicios avanzados de supercomputación para la ciència y la ingeniería HPCNow! provee a sus clientes de la tecnología y soluciones

Más detalles

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

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

Más detalles

CAPÍTULO 1 Instrumentación Virtual

CAPÍTULO 1 Instrumentación Virtual CAPÍTULO 1 Instrumentación Virtual 1.1 Qué es Instrumentación Virtual? En las últimas décadas se han incrementado de manera considerable las aplicaciones que corren a través de redes debido al surgimiento

Más detalles

Diseño orientado a los objetos

Diseño orientado a los objetos Diseño orientado a los objetos El Diseño Orientado a los Objetos (DOO) crea una representación del problema del mundo real y la hace corresponder con el ámbito de la solución, que es el software. A diferencia

Más detalles

Los distintos navegadores para movernos por Internet

Los distintos navegadores para movernos por Internet www.solucionesenlaweb.com Los distintos navegadores para movernos por Internet Para que los usuarios puedan navegar por Internet y ver la información que más les interesa en cada momento, utilizamos los

Más detalles

Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El Hardware y el Software.

Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El Hardware y el Software. ARQUITECTURA DE LAS COMPUTADORAS QUE ES UNA COMPUTADORA (UN ORDENADOR)? Existen numerosas definiciones de una computadora, entre ellas las siguientes: 1) Una computadora es un dispositivo capaz de realizar

Más detalles

Grupo de Computación de Altas Prestaciones GCAPULL, Univers. GCAPULL, Universidad de La Laguna, Tenerife

Grupo de Computación de Altas Prestaciones GCAPULL, Univers. GCAPULL, Universidad de La Laguna, Tenerife Grupo de Computación de Altas Prestaciones GCAPULL, Universidad de La Laguna, Tenerife Febrero 2010, Alicante Contents El grupo 1 El grupo 2 3 4 Composición 6 doctores 7 alumnos en fase de tesis Información

Más detalles

LA LOGÍSTICA COMO FUENTE DE VENTAJAS COMPETITIVAS

LA LOGÍSTICA COMO FUENTE DE VENTAJAS COMPETITIVAS LA LOGÍSTICA COMO FUENTE DE VENTAJAS COMPETITIVAS Los clientes compran un servicio basandose en el valor que reciben en comparacion con el coste en el que incurren. Por, lo tanto, el objetivo a largo plazo

Más detalles

Arquitectura de Aplicaciones

Arquitectura de Aplicaciones 1 Capítulo 13: Arquitectura de aplicaciones. - Sommerville Contenidos del capítulo 13.1 Sistemas de procesamiento de datos 13.2 Sistemas de procesamiento de transacciones 13.3 Sistemas de procesamiento

Más detalles

CLUSTER FING: PARALELISMO de MEMORIA DISTRIBUIDA

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

Más detalles

Metodología y Framework para el Desarrollo de Aplicaciones Científicas con Computación de Alto Rendimiento a través de Servicios Web

Metodología y Framework para el Desarrollo de Aplicaciones Científicas con Computación de Alto Rendimiento a través de Servicios Web Metodología y Framework para el Desarrollo de Aplicaciones Científicas con Computación de Alto Rendimiento a través de Servicios Web J.Corral-García, D.Cortés-Polo, C.Gómez-Martín, J.L.González-Sánchez

Más detalles

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET 1 EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET La familia de protocolos TCP/IP fue diseñada para permitir la interconexión entre distintas redes. El mejor ejemplo es Internet: se trata

Más detalles

Algoritmos y Diagramas de Flujo 2

Algoritmos y Diagramas de Flujo 2 Algoritmos y Diagramas de Flujo 2 Programación Java NetBeans 7.0 RPC Contenido 2.1 Algoritmo...1 Fase de creación de un algoritmo...1 Herramientas de un algoritmo...2 2.2 Diagrama de Flujo...2 Símbolos

Más detalles

Componentes de Integración entre Plataformas Información Detallada

Componentes de Integración entre Plataformas Información Detallada Componentes de Integración entre Plataformas Información Detallada Active Directory Integration Integración con el Directorio Activo Active Directory es el servicio de directorio para Windows 2000 Server.

Más detalles

pymegnu v2.0 PRESENTACIÓN DE PRODUCTOS

pymegnu v2.0 PRESENTACIÓN DE PRODUCTOS PRESENTACIÓN DE PRODUCTOS pymegnu v2.0 1 INTRODUCCIÓN Nuestros sistemas 100% web le permitirán poder obtener todas las ventajas competitivas que ofrece Internet, como la disponibilidad de tener sus sistemas

Más detalles

Análisis de aplicación: Virtual Machine Manager

Análisis de aplicación: Virtual Machine Manager Análisis de aplicación: Virtual Machine Manager Este documento ha sido elaborado por el Centro de Apoyo Tecnológico a Emprendedores bilib, www.bilib.es Copyright 2011, Junta de Comunidades de Castilla

Más detalles

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3 UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3 INTRODUCCIÓN El elemento hardware de un sistema básico de proceso de datos se puede estructurar en tres partes claramente diferenciadas en cuanto a sus funciones:

Más detalles

forma de entrenar a la nuerona en su aprendizaje.

forma de entrenar a la nuerona en su aprendizaje. Sistemas expertos e Inteligencia Artificial,Guía5 1 Facultad : Ingeniería Escuela : Computación Asignatura: Sistemas expertos e Inteligencia Artificial Tema: SISTEMAS BASADOS EN CONOCIMIENTO. Objetivo

Más detalles

Capítulo 12: Indexación y asociación

Capítulo 12: Indexación y asociación Capítulo 12: Indexación y asociación Conceptos básicos Índices ordenados Archivos de índice de árbol B+ Archivos de índice de árbol B Asociación estática Asociación dinámica Comparación entre indexación

Más detalles

Novedades en Q-flow 3.02

Novedades en Q-flow 3.02 Novedades en Q-flow 3.02 Introducción Uno de los objetivos principales de Q-flow 3.02 es adecuarse a las necesidades de grandes organizaciones. Por eso Q-flow 3.02 tiene una versión Enterprise que incluye

Más detalles

Proceso Unificado de Rational PROCESO UNIFICADO DE RATIONAL (RUP) El proceso de desarrollo de software tiene cuatro roles importantes:

Proceso Unificado de Rational PROCESO UNIFICADO DE RATIONAL (RUP) El proceso de desarrollo de software tiene cuatro roles importantes: PROCESO UNIFICADO DE RATIONAL (RUP) El proceso de desarrollo de software tiene cuatro roles importantes: 1. Proporcionar una guía de actividades para el trabajo en equipo. (Guía detallada para el desarrollo

Más detalles

Gestión de la Configuración

Gestión de la Configuración Gestión de la ÍNDICE DESCRIPCIÓN Y OBJETIVOS... 1 ESTUDIO DE VIABILIDAD DEL SISTEMA... 2 ACTIVIDAD EVS-GC 1: DEFINICIÓN DE LOS REQUISITOS DE GESTIÓN DE CONFIGURACIÓN... 2 Tarea EVS-GC 1.1: Definición de

Más detalles

DISCOS RAID. Se considera que todos los discos físicos tienen la misma capacidad, y de no ser así, en el que sea mayor se desperdicia la diferencia.

DISCOS RAID. Se considera que todos los discos físicos tienen la misma capacidad, y de no ser así, en el que sea mayor se desperdicia la diferencia. DISCOS RAID Raid: redundant array of independent disks, quiere decir conjunto redundante de discos independientes. Es un sistema de almacenamiento de datos que utiliza varias unidades físicas para guardar

Más detalles

Utilidades de la base de datos

Utilidades de la base de datos Utilidades de la base de datos Desde esta opcion del menú de Access, podemos realizar las siguientes operaciones: Convertir Base de datos Compactar y reparar base de datos Administrador de tablas vinculadas

Más detalles

Capítulo 4. Requisitos del modelo para la mejora de la calidad de código fuente

Capítulo 4. Requisitos del modelo para la mejora de la calidad de código fuente Capítulo 4. Requisitos del modelo para la mejora de la calidad de código fuente En este capítulo definimos los requisitos del modelo para un sistema centrado en la mejora de la calidad del código fuente.

Más detalles

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología La metodología para el desarrollo de software es un modo sistemático de realizar, gestionar y administrar un proyecto

Más detalles

Capítulo 1 Introducción a la Computación

Capítulo 1 Introducción a la Computación Capítulo 1 Introducción a la Computación 1 MEMORIA PRINCIPAL (RAM) DISPOSITIVOS DE ENTRADA (Teclado, Ratón, etc) C P U DISPOSITIVOS DE SALIDA (Monitor, Impresora, etc.) ALMACENAMIENTO (Memoria Secundaria:

Más detalles

Capítulo 4. Vectores y matrices. 4.1 Declaración de tablas. 4.2 Declaración estática de tablas

Capítulo 4. Vectores y matrices. 4.1 Declaración de tablas. 4.2 Declaración estática de tablas Capítulo 4 Vectores y matrices En FORTRAN se puede utilizar un tipo especial de variable que sirve, en particular, para almacenar vectores y matrices. De esta forma, se utiliza un sólo nombre para referirse

Más detalles

Resumen del trabajo sobre DNSSEC

Resumen del trabajo sobre DNSSEC Resumen del trabajo sobre Contenido 1. -...2 1.1. - Definición...2 1.2. - Seguridad basada en cifrado...2 1.3. - Cadenas de confianza...3 1.4. - Confianzas...4 1.5. - Islas de confianza...4 2. - Conclusiones...5

Más detalles

Unidad didáctica: Funcionamiento de un parking. Actividad: Funcionamiento de un parking de vehículos con entrada y salida automática con:

Unidad didáctica: Funcionamiento de un parking. Actividad: Funcionamiento de un parking de vehículos con entrada y salida automática con: Unidad didáctica: Funcionamiento de un parking Descripción: Actividad: Funcionamiento de un parking de vehículos con entrada y salida automática con: Detección del vehiculo entrante Recogida de ticket

Más detalles

App para realizar consultas al Sistema de Información Estadística de Castilla y León

App para realizar consultas al Sistema de Información Estadística de Castilla y León App para realizar consultas al Sistema de Información Estadística de Castilla y León Jesús M. Rodríguez Rodríguez rodrodje@jcyl.es Dirección General de Presupuestos y Estadística Consejería de Hacienda

Más detalles

Figura 4.1 Clasificación de los lenguajes de bases de datos

Figura 4.1 Clasificación de los lenguajes de bases de datos 1 Colección de Tesis Digitales Universidad de las Américas Puebla Romero Martínez, Modesto Este capítulo describen los distintos lenguajes para bases de datos, la forma en que se puede escribir un lenguaje

Más detalles

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante Modulo 2. Inicio con Java Muchas veces encontramos en nuestro entorno referencias sobre Java, bien sea como lenguaje de programación o como plataforma, pero, que es en realidad Java?, cual es su historia?,

Más detalles

CAPÍTULO 2 Sistemas De Base De Datos Multiusuarios

CAPÍTULO 2 Sistemas De Base De Datos Multiusuarios CAPÍTULO 2 Sistemas De De Multiusuarios Un sistema multiusuario es un sistema informático que da servicio, manera concurrente, a diferentes usuarios mediante la utilización compartida sus recursos. Con

Más detalles

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

En cualquier caso, tampoco es demasiado importante el significado de la B, si es que lo tiene, lo interesante realmente es el algoritmo. Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa

Más detalles

UN ENTORNO A MEDIDA PARA EL DISEÑO Y LA SIMULACIÓN DE MAQUINARIA POR COMPUTADOR

UN ENTORNO A MEDIDA PARA EL DISEÑO Y LA SIMULACIÓN DE MAQUINARIA POR COMPUTADOR UN ENTORNO A MEDIDA PARA EL DISEÑO Y LA SIMULACIÓN DE MAQUINARIA POR COMPUTADOR Manuel González y Javier Cuadrado Departamento de Ingeniería Industrial II, Campus de Esteiro, 15403 Ferrol Universidad de

Más detalles

General Parallel File System

General Parallel File System General Parallel File System Introducción GPFS fue desarrollado por IBM, es un sistema que permite a los usuarios compartir el acceso a datos que están dispersos en múltiples nodos; permite interacción

Más detalles

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere.

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere. UNIVERSIDAD DE CARABOBO FACULTAD DE CIENCIA Y TECNOLOGÍA DIRECCION DE EXTENSION COORDINACION DE PASANTIAS Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere. Pasante:

Más detalles

Conclusiones. Particionado Consciente de los Datos

Conclusiones. Particionado Consciente de los Datos Capítulo 6 Conclusiones Una de las principales conclusiones que se extraen de esta tesis es que para que un algoritmo de ordenación sea el más rápido para cualquier conjunto de datos a ordenar, debe ser

Más detalles

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas Departamento de Informática PROGRAMACIÓN DIDÁCTICA Curso 11-12 1 CONSEJERÍA DE EDUCACIÓN I.E.S. NERVIÓN Departamento de Informática CICLO FORMATIVO: TÉCNICO SUPERIOR EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA.

Más detalles

1 GLOSARIO. Actor: Es un consumidor (usa) del servicio (persona, sistema o servicio).

1 GLOSARIO. Actor: Es un consumidor (usa) del servicio (persona, sistema o servicio). 1 GLOSARIO A continuación se definen, en orden alfabético, los conceptos básicos que se han abordado a lo largo del desarrollo de la metodología para la gestión de requisitos bajo la Arquitectura Orientada

Más detalles

LiLa Portal Guía para profesores

LiLa Portal Guía para profesores Library of Labs Lecturer s Guide LiLa Portal Guía para profesores Se espera que los profesores se encarguen de gestionar el aprendizaje de los alumnos, por lo que su objetivo es seleccionar de la lista

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación II MODELOS y HERRAMIENTAS UML 1 1 Modelado de casos de uso (I) Un caso de uso es una técnica de modelado usada para describir lo que debería hacer

Más detalles

ISO 9001:2000 DOCUMENTO INFORMATIVO DOCUMENTO ELABORADO POR CHRISTIAN NARBARTE PARA EL IVECE

ISO 9001:2000 DOCUMENTO INFORMATIVO DOCUMENTO ELABORADO POR CHRISTIAN NARBARTE PARA EL IVECE ISO 9001:2000 DOCUMENTO INFORMATIVO DOCUMENTO ELABORADO POR CHRISTIAN NARBARTE PARA EL IVECE MARZO 2007 Este documento contesta las preguntas más frecuentes que se plantean las organizaciones que quieren

Más detalles

Adelacu Ltda. www.adelacu.com Fono +562-218-4749. Graballo+ Agosto de 2007. Graballo+ - Descripción funcional - 1 -

Adelacu Ltda. www.adelacu.com Fono +562-218-4749. Graballo+ Agosto de 2007. Graballo+ - Descripción funcional - 1 - Graballo+ Agosto de 2007-1 - Índice Índice...2 Introducción...3 Características...4 DESCRIPCIÓN GENERAL...4 COMPONENTES Y CARACTERÍSTICAS DE LA SOLUCIÓN...5 Recepción de requerimientos...5 Atención de

Más detalles

Fundamentos del diseño 3ª edición (2002)

Fundamentos del diseño 3ª edición (2002) Unidades temáticas de Ingeniería del Software Fundamentos del diseño 3ª edición (2002) Facultad de Informática necesidad del diseño Las actividades de diseño afectan al éxito de la realización del software

Más detalles

Concurrencia. Primitivas IPC con bloqueo

Concurrencia. Primitivas IPC con bloqueo Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región

Más detalles

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas: SISTEMAS DISTRIBUIDOS DE REDES 1. SISTEMAS DISTRIBUIDOS Introducción y generalidades La computación desde sus inicios ha sufrido muchos cambios, desde los grandes equipos que permitían realizar tareas

Más detalles

8. Sentencia return y métodos

8. Sentencia return y métodos 92 A. García-Beltrán y J.M. Arranz 8. Sentencia return y métodos Objetivos: a) Describir el funcionamiento de la sentencia return b) Interpretar el resultado de una sentencia return en el código fuente

Más detalles

No se requiere que los discos sean del mismo tamaño ya que el objetivo es solamente adjuntar discos.

No se requiere que los discos sean del mismo tamaño ya que el objetivo es solamente adjuntar discos. RAIDS MODO LINEAL Es un tipo de raid que muestra lógicamente un disco pero se compone de 2 o más discos. Solamente llena el disco 0 y cuando este está lleno sigue con el disco 1 y así sucesivamente. Este

Más detalles

6. DESCRIPCIÓN DEL SOFTWARE

6. DESCRIPCIÓN DEL SOFTWARE Capítulo 2. Equipo 6. DESCRIPCIÓN DEL SOFTWARE 6.1 Introducción El equipo de medida descrito en el capítulo anterior lleva asociado un software que hace de sistema de control del proceso de medición. Este

Más detalles

Capítulo 1 Documentos HTML5

Capítulo 1 Documentos HTML5 Capítulo 1 Documentos HTML5 1.1 Componentes básicos HTML5 provee básicamente tres características: estructura, estilo y funcionalidad. Nunca fue declarado oficialmente pero, incluso cuando algunas APIs

Más detalles

Anexo A Diagramas de Navegación

Anexo A Diagramas de Navegación Anexo A Diagramas de Navegación Figura D.1: Diagrama de navegación de la pantalla principal. 43 Figura D.2: Diagrama de navegación del apartado Crear Encuesta. 44 Figura D.3: Diagrama de navegación del

Más detalles

AHORRACOM SOLUCIONES AVANZADAS S.L. Avda. de la Industria 13, Oficina 25. 28108 Alcobendas, Madrid. www.ahorracom.com

AHORRACOM SOLUCIONES AVANZADAS S.L. Avda. de la Industria 13, Oficina 25. 28108 Alcobendas, Madrid. www.ahorracom.com PAGTE Plan de Ahorro y Gestión de Telecomunicaciones para Empresas En Ahorracom nos ponemos de su parte. Por eso nos interesa que usted, nuestro cliente, esté al tanto de todos los procesos que llevamos

Más detalles

PROPÓSITO... 2 DETERMINANTES PARA UNA BUENA EXPERIENCIA DE USO...

PROPÓSITO... 2 DETERMINANTES PARA UNA BUENA EXPERIENCIA DE USO... Tabla de Contenido PROPÓSITO... 2 DETERMINANTES PARA UNA BUENA EXPERIENCIA DE USO... 2 1. LA PRESENCIA DE INFORMACIÓN Y AYUDA ÚTIL PARA COMPLETAR LOS TRÁMITES EN LÍNEA.... 2 2. LA DISPONIBILIDAD DE DIVERSOS

Más detalles

REDES INFORMATICAS: Protocolo IP

REDES INFORMATICAS: Protocolo IP REDES INFORMATICAS: Protocolo IP 1. PRINCIPIOS BÁSICOS DE IP El protocolo IP se basa en tres principios básicos: Un direccionamiento de los ordenadores. Un tipo de dato: el datragrama IP. Un algoritmo

Más detalles

Procesos. Bibliografía. Threads y procesos. Definiciones

Procesos. Bibliografía. Threads y procesos. Definiciones Procesos Prof. Mariela Curiel Bibliografía A. Tanembaum & M. Van Steen. Sistemas Distribuidos. Principios y Paradigmas. 2da. Edición. Smith & Nair. The Architecture of Virtual Machines. IEEE Computer.

Más detalles

Sistemas Operativos Windows 2000

Sistemas Operativos Windows 2000 Sistemas Operativos Contenido Descripción general 1 Funciones del sistema operativo 2 Características de 3 Versiones de 6 Sistemas Operativos i Notas para el instructor Este módulo proporciona a los estudiantes

Más detalles

Actividades para mejoras. Actividades donde se evalúa constantemente todo el proceso del proyecto para evitar errores y eficientar los procesos.

Actividades para mejoras. Actividades donde se evalúa constantemente todo el proceso del proyecto para evitar errores y eficientar los procesos. Apéndice C. Glosario A Actividades de coordinación entre grupos. Son dinámicas y canales de comunicación cuyo objetivo es facilitar el trabajo entre los distintos equipos del proyecto. Actividades integradas

Más detalles

Día 5-6-2012 17:00h Lugar: Obra Social Ibercaja, Sala De actos, Rambla Ferran 38, 3º, Lleida

Día 5-6-2012 17:00h Lugar: Obra Social Ibercaja, Sala De actos, Rambla Ferran 38, 3º, Lleida Resumen de la conferencia Día 5-6-2012 17:00h Lugar: Obra Social Ibercaja, Sala De actos, Rambla Ferran 38, 3º, Lleida Ponente: Luis Muñiz Socio Director de Sisconges & Estrategia y experto en Sistemas

Más detalles

SÍNTESIS Y PERSPECTIVAS

SÍNTESIS Y PERSPECTIVAS SÍNTESIS Y PERSPECTIVAS Los invitamos a observar, a identificar problemas, pero al mismo tiempo a buscar oportunidades de mejoras en sus empresas. REVISIÓN DE CONCEPTOS. Esta es la última clase del curso.

Más detalles

Bechtle Solutions Servicios Profesionales

Bechtle Solutions Servicios Profesionales Soluciones Tecnología Bechtle Solutions Servicios Profesionales Fin del servicio de soporte técnico de Windows Server 2003 No hacer nada puede ser un riesgo BECHTLE Su especialista en informática Ahora

Más detalles

Java Inicial (20 horas)

Java Inicial (20 horas) Java Inicial (20 horas) 1 Temario 1. Programación Orientada a Objetos 2. Introducción y Sintaxis Java 3. Sentencias Control Flujo 4. POO en Java 5. Relaciones entre Objetos 6. Polimorfismo, abstracción

Más detalles

Maquinas virtuales Conceptos Básicos

Maquinas virtuales Conceptos Básicos Jimenez Zamudio Eduardo Aplicaciones de redes de computadoras 13 de septiembre de 2014 Maquinas virtuales Conceptos Básicos Concepto Básicamente, es un equipo dentro de un equipo, implementado en el software.

Más detalles

Curso Online de Microsoft Project

Curso Online de Microsoft Project Curso Online de Microsoft Project Presentación El curso a distancia estudia conceptos generales sobre las tecnologías relacionadas con Internet. Conceptos que cualquier usuario de ordenadores debe conocer

Más detalles

Estas visiones de la información, denominadas vistas, se pueden identificar de varias formas.

Estas visiones de la información, denominadas vistas, se pueden identificar de varias formas. El primer paso en el diseño de una base de datos es la producción del esquema conceptual. Normalmente, se construyen varios esquemas conceptuales, cada uno para representar las distintas visiones que los

Más detalles

LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN

LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN Tabla de Contenidos LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN... 1 Tabla de Contenidos... 1 General... 2 Uso de los Lineamientos Estándares...

Más detalles

Resolución de problemas en paralelo

Resolución de problemas en paralelo Resolución de problemas en paralelo Algoritmos Paralelos Tema 1. Introducción a la computación paralela (segunda parte) Vicente Cerverón Universitat de València Resolución de problemas en paralelo Descomposición

Más detalles

Oficina Online. Manual del administrador

Oficina Online. Manual del administrador Oficina Online Manual del administrador 2/31 ÍNDICE El administrador 3 Consola de Administración 3 Administración 6 Usuarios 6 Ordenar listado de usuarios 6 Cambio de clave del Administrador Principal

Más detalles

Correspondencias entre taxonomías XBRL y ontologías en OWL Unai Aguilera, Joseba Abaitua Universidad de Deusto, EmergiaTech

Correspondencias entre taxonomías XBRL y ontologías en OWL Unai Aguilera, Joseba Abaitua Universidad de Deusto, EmergiaTech Correspondencias entre taxonomías XBRL y ontologías en OWL Unai Aguilera, Joseba Abaitua Universidad de Deusto, EmergiaTech Resumen Todo documento XBRL contiene cierta información semántica que se representa

Más detalles