Optimización Software del Rendimiento Caché
|
|
- Carmelo Mora Lozano
- hace 8 años
- Vistas:
Transcripción
1 PRÁCTICAS ESTRUCTURA DE COMPUTADORES II II, ITIS - Curso Optimización Software del Rendimiento Caché -Guía de Actividades Propuestas- 1. Primer día Antes de intentar mejorar la localidad de los códigos deberíamos comprender la influencia que tienen los parámetros de la caché sobre la tasa de fallos. Para ello usamos el simulador dineroiii ubicado en /usr/local/bin y por ejemplo dos de las trazas que se encuentran dentro del archivo r2000.zip en el directorio /usr/local/dineroiii/trazas. Para informarse sobre el manejo de este simulador puede consultarse su manual (man dineroiii) y leer el apéndice I de esta guía de prácticas. En esta clase se harán tres gráficas usando cachés unificadas. En la primera gráfica, fijaremos un tamaño de caché pequeño (p.j. 1KB), un tamaño de línea relativamente pequeño (p.ej. 16 bytes) e iremos trazando la tasa de fallos que obtenemos con distintas asociatividades (1, 2, 4,... ). Debería ponerse de manifiesto que los aumentos iniciales del nivel de asociatividad tienen una influencia sobre la tasa de fallos que van disminuyendo a medida que la asociatividad aumenta, hasta llegar al punto de quedar estancados. En la segunda gráfica seleccionaremos una caché de correspondencia directa y un tamaño de línea pequeño o mediano (32 bytes, 64 bytes,... ) e iremos trazando la tasa de fallos que obtenemos con distintos tamaños de la caché. De forma similar a la gráfica anterior, típicamente los aumentos iniciales del tamaño de la caché son los que más ayudan a reducir la tasa de fallos, y al llegar a cierto tamaño ésta tiende a estancarse. Por último debemos estudiar el efecto del tamaño de la línea sobre la tasa de fallos de una caché unificada de correspondencia directa de pequeño tamaño. Los aumentos iniciales deberían ayudar a reducir la tasa de fallos, pero a partir de cierto tamaño ésta debe empezar a aumentar. Puedes explicar estos efectos? 2. Restantes días Esta guía de actividades está acompañada por una descripción de una serie de técnicas software que pueden ayudar a mejorar la localidad espacial y temporal de los programas y por tanto reducir su tiempo de ejecución, o al menos, como es el caso de la prebúsqueda, ayudar a ocultar la latencia de los accesos a memoria. Estas técnicas también habrán sido explicadas en clase de teoría.
2 Proponemos que los restantes días de prácticas de laboratorio de la asignatura se dediquen a comprender la aplicación de estas técnicas. Para el análisis de cada técnica, cada grupo podrá realizar las siguientes actividades: 1. Escribir códigos en C en los que se aplican las distintas técnicas de optimización y comparar el comportamiento de la versión optimizada y la original. Debe intentarse escoger códigos que resalten la bondad de la optimización, a ser posible a mayores de los proporcionados por los profesores. No obstante también es de interés estudiar códigos en los cuales se suponía que una técnica dada iba a mejorar el rendimiento y no lo hace para comprender el motivo de este comportamiento. Como ejemplos se proporcionan los de las figuras de esta guía de prácticas así como un código de ejemplo sin optimizar y optimizado para cada técnica en que incluye mediciones del tiempo de ejecución de cada versión de los códigos. 2. Hacer simulaciones con dineroiii utilizando las trazas 1 generadas mediante una versión instrumentada de los códigos confeccionada siguiendo lo explicado en el apéndice II empleando varias configuraciones distintas de caché. Se buscarán combinaciones de códigos y cachés donde se pueda observar una mejora al aplicar las técnicas. En concreto deberían compararse las tasas de fallos obtenidas antes y después de aplicar la optimización. 3. Medir el tiempo de ejecución de los códigos (sin instrumentación) en el ordenador torno que se esté usando del laboratorio 0.3, que tiene un Athlon. Deberán compararse los tiempos de ejecución del código antes y después de aplicar la optimización. Sugerimos que en las compilaciones se use el flag -O o -O2 para que el compilador aplique algunas optimizaciones básicas. 4. Medir el rendimiento de ambas versiones del código (sin instrumentación) utilizando la librería PAPI que está instalada en los ordenadores torno del laboratorio 0.3. Esta herramienta permite acceder a contadores hardware que miden diversos tipos de eventos durante la ejecución de aplicaciones. El apéndice III contiene una introducción al uso de esta librería. Lo importante no es simplemente experimentar con las transformaciones de código que proponemos midiendo sus resultados, sino razonar sobre los motivos de los comportamientos observados a fin de comprender cómo y por qué funcionan las diversas técnicas y la interacción entre nuestros códigos, las transformaciones del compilador y la forma en que funciona el hardware del computador. Algunas preguntas pueden ser genéricas e igualmente aplicables a todas las técnicas. Ejemplos de preguntas de este tipo son: Qué condiciones deben verificar un código y la jerarquía de memoria sobre la que se ejecuta para que cada técnica de optimización sea efectiva en ellos? Si para un código dado una optimización mejora la tasa de fallos en cierta configuración de la caché pero no lo hace en otra, cuál puede ser el motivo? 1 Por defecto, dineroiii sólo procesa las primeras referencias que recibe y se detiene. Asegúrate de generar trazas con menos referencias, o bien aumenta el número máximo de referencias a simular mediante la opción -z (mira el manual).
3 Cómo es posible que si se observa una reducción de la tasa real de fallos aplicando cierta técnica a cierto código (por ejemplo usando PAPI) sin embargo aumente el tiempo total de ejecución? Cómo afecta la prebúsqueda hardware que tienen hoy en día muchos procesadores (p.ej. los Pentium 4 y los Athlon) a las distintas técnicas de optimización? Otras preguntas pueden ser específicas de cada técnica. Ejemplos de preguntas de este tipo son: Técnica de rellenado y alineado de estructuras: Por qué si se accede sencuencialmente a un array de estructuras la técnica de rellenado y alineado de estructuras no sólo no nos ayuda sino que empeora el comportamiento del programa? Es útil rellenar las estructuras si no se alinea el array? Y es útil alinear el array si no se rellenan las estructuras? Cuánto debería uno rellenar en la técnica de rellenado y alineado de estructuras? Es decir, hay alguna regla sencilla para estimar la cantidad óptima de relleno que se debe efectuar en cada estructura? Técnica de rellenado de arrays Cuál es efecto de rellenar en las distintas dimensiones de un array? Vale rellenar en cualquier dimensión? Hay alguna regla sencilla para determinar cuánto relleno aplicarle a un array? Técnica de partición en bloques Mejora o empeora el tiempo de ejecución con respecto al código sin bloques cuando se tiene un bloque muy pequeño (por ejemplo de 1, 2, 3 elementos)? Y si el bloque es muy grande (por ejemplo casi del tamaño de la matriz)? Así pues, Cómo influye el tamaño del bloque en la tasa de fallos y en el tiempo de ejecución en la técnicas de partición en bloques? Se podría estimar de forma aproximada un tamaño de bloque óptimo o de los mejores? Cómo? Técnica de prebúsqueda Es beneficioso prebuscar sistemáticamente todos los datos que va a requerir el procesador? Mejora el rendimiento si se prebuscan datos que están a punto de ser usados? Y si se prebuscan datos que no van a usarse hasta dentro de mucho tiempo? Es benificioso prebuscar para cualquier patrón de acceso o sólo para algunos? Por patrón de acceso entendemos el acceso aleatorio (a[1], a[89], a[26],... ), el acceso a datos consecutivos (a[1], a[2], a[3],... ), el acceso a una serie de datos que están separados por una distancia constante (a[1], a[101], a[201], ldots), etc.
4 Técnicas para mejorar el comportamiento caché Una vez localizada la sección de datos y estructuras de datos que pueden causar una degradación del rendimiento, existen varias técnicas para modificar los programas que pueden ayudar a eliminar parte de los fallos caché de los mismos. Las modificaciones que más conviene realizar en un programa dependen del tipo de fallos caché a eliminar. Los fallos de conflicto pueden reducirse mediante la unión de arrays, el rellenado y alineado de estructuras, el rellenado de arrays, el empaquetado de arrays y estructuras, el intercambio de bucles y la partición en bloques. Las cuatro primeras técnicas cambian la localización de las estructuras de datos, mientras que las dos últimas modifican el orden en el que las estructuras de datos son accedidas. Los fallos de capacidad pueden ser eliminados mediante modificaciones en el programa de modo que reutilice los datos antes de que estos sean reemplazados de la caché, como la fusión de bucles, la partición en bloques, el empaquetado de arrays y estructuras, y el intercambio de bucles. Otra posibilidad para aliviar el peso de las latencias de acceso a memoria en el tiempo de ejecución de un código es solaparlas con computaciones aplicando la técnica de prebúsqueda. A continuación se describen estas técnicas: 1. Fusión de arrays. Algunos programas referencian al mismo tiempo dos o más arrays de la misma dimensión usando los mismos índices. En el caso de que las posiciones correspondientes de dichos arrays estuvieran mapeadas a los mismos conjuntos de la caché esto daría lugar una serie de fallos de conflicto sistemáticos. Una situación típica en que da este efecto es en el caso de arrays con un tamaño que es una potencia de dos y se han declarado de forma consecutiva en el programa. La fusión de arrays mezcla múltiples arrays en un único array compuesto. En lenguaje C esto se realiza declarando un array de estructuras en lugar de dos o más arrays. /*Declaracion original de dos arrays */ int val[tama~no]; int key[tama~no]; /* Nueva declaracion con array de estructuras */ struct miregistro { int val; int key; struct miregistro union_array[tama~no] 2. Rellenado y Alineado de estructuras. Las referencias a una estructura de datos que se encuentra situada a caballo de dos bloques caché puede provocar dos fallos caché, aún cuando la estructura en si sea menor que el tamaño de bloque. Así, en el ejemplo mostrado en la izquierda de la figura inferior puede verse un array ar con registros que ocupan 6 bytes que comienza en una posición arbitraria de memoria en un sistema con líneas de caché con una capacidad de 8 bytes, correspondiendo cada cuadrado en la figura a un byte. Puede apreciarse que si por ejemplo se accediese a los componentes ar[0] y ar[2] sería necesario traer las líneas de memoria 1, 2 y 3 a la caché para satisfacer dichos
5 accesos. Rellenando las estructuras de modo que su tamaño sea un múltiplo del tamaño de bloque y alineándolas con los límites de los bloques pueden eliminarse los fallos de desalineación. El rellenado es fácil de realizar en C declarando campos extra de relleno. El alineado es más difícil, dado que la dirección de una estructura debe ser un múltiplo del tamaño de bloque caché. Las estructuras declaradas estáticamente generalmente requieren apoyo del compilador. Las estructuras asignadas dinámicamente pueden ser alineadas por el programador usando aritmética de punteros. Obsérvese que algunas funciones de asignación de memoria (como algunas versiones de malloc( )) devuelven direcciones de memoria alineadas con un bloque caché. Siguiendo con nuestro ejemplo, a la derecha de la figura puede verse que una vez se ha garantizado que el array ar está alineado con el incio de una línea de la caché y que cada registro del mismo tiene 8 bytes, el acceso a los componentes ar[0] y ar[2] ya sólo requiere el acceso a las líneas de memoria 1 y 3. Linea 1 Linea 2 Linea 3... Linea 1 Linea 2 Linea 3... ar[0] ar[1] ar[2] ar[3] ar[0] ar[1] ar[2] /*Declaracion original de una estructura de seis bytes */ struct ex_struct { short int val1, val2, val3; /*Declaracion de estructura alineada a un tama~no de bloque-cache de 8 bytes*/ struct ex_struct { short int val1, val2, val3; char pad[2]; /*Asignacion original que no garantiza alineamiento */ ar = (struct ex_struct *) malloc(sizeof(struct ex_struct) * TAMA~NO); /*Nuevo codigo que garantiza el alineamiento de estructuras para bloques de BLOCK bytes */ ar = (struct ex_struct *) malloc(sizeof(struct ex_struct) * TAMA~NO + BLOCK); ar = (struct ex_struct *) ((( (int) ar + BLOCK -1) / BLOCK ) * BLOCK); 3. Rellenado de arrays. Cuando no es posible acceder de forma secuencial a los contenidos de un array, puede darse el caso de que debido a las dimensiones del mismo los accesos sobre él generen fallos de conflicto de forma sistemática. Un ejemplo típico de esta situación es el acceso por columnas a una matriz bidimensional en C (puesto que en
6 C los arrays bidimensionales se almacenan por filas) que tiene un tamaño de fila que es una potencia de dos. En esta situación muchas o incluso todas las líneas que contienen los elementos de cada columna de la matriz recaen en el mismo conjunto de la caché, haciendo imposible su reuso para cuando se va a acceder a la siguiente columna. La figura inferior ilustra este problema para una caché de correspondencia directa con 4 líneas en la que cada línea puede contener dos de los elementos del array m[4][8]. Como puede verse en la ilustración de la izquierda, en esta situación las líneas de memoria que contienen los datos de una columna dada del array están todas mapeadas a la misma línea de la caché, con lo que cada vez que se va acceder a un nuevo elemento de una columna, la línea asociada al elemento precedente debe ser expulada de la caché para hacerle sitio. De esta forma, cuando se va a acceder a la siguiente columna, es imposible reusar ninguna de las líneas que se trajeron durante el procesamiento de la columna precedente y deben volver a traerse todas de la memoria. Este problema puede resolverse rellenando el array aumentando el tamaño de la fila de la matriz, de forma que las líneas de cada columna se distribuyan entre más conjuntos. En la ilustración de la derecha hemos pasado a declarar m como una matriz m[4][10] aunque realmente sólo sigamos usando sus 8 primeras columnas. El cometido de las dos columnas de relleno es simplemente que, como puede apreciarse, gracias a ellas ahora cada línea de una columna de la matriz va a parar a una línea diferente de la caché. De esta forma es posible reusar todas cuando se va a proceder a procesar la siguiente columna de m. m[0][0] m[1][0] m[2][0] m[3][0] m[4][8] m[0][7] m[4][10] relleno /*Declaracion original de una matriz con una fila con un tama~no multiplo o divisor del de la cache */ float m[4][8]; /*bucle que recorre el array por columnas*/ for(j=0; j<8;j++) for(i=0; i<4; i++) q = q * m[i][j]; /*Declaracion nueva de un array cuyas filas no tienen un tama~no multiplo o divisor del de la cache */ float m[4][10]; 4. Empaquetado. El empaquetado o compactación es lo opuesto al rellenado: empaquetando un array en el menor espacio posible. En el siguiente ejemplo el programador observa que el valor de los elementos del array nunca son mayores que 255, y por tanto puede
7 almacenarlos en un unsigned char, que requiere 8 bits, en lugar de un unsigned int que normalmente ocupa 32 bits. En una máquina con un tamaño de bloque de 16 bytes, el código del ejemplo permite almacenar 16 elementos por bloque, en lugar de 4, reduciendo el número máximo de fallos de caché en un factor de 4. /*Declaracion original de un array de enteros sin signo */ unsigned int valores[10000]; /*bucle que recorre el array */ for(i=0; i<10000; i++) valores[i] = i % 256; /*Declaracion nueva de un array de caracteres sin signo */ unsigned char valores[10000]; 5. Intercambio de bucles. Algunos programas tienen bucles anidados que acceden a los datos en memoria en un orden no secuencial. Simplemente intercambiando el orden del anidamiento se puede conseguir que el código acceda a los datos en el orden en que están almacenados. Por ejemplo, en FORTRAN el compilador almacena los datos por columnas, con lo que el orden ideal de acceso de los datos es columna a columna. Por el contrario, en C y C++ los datos se almacenan consecutivamente a lo largo de la última dimensión de un array, a continuación a lo largo de la antepenúltima, y así consecutivamente. Así, en el caso de un array bidimensional, los datos de cada fila están almacenados en posiciones consecutivas en memoria, por lo que un acceso por columnas sería contraproducente, puesto que entre cada dos elementos consecutivos en una columna tenemos almacenados todos los de una fila en la memoria. La figura inferior ilustra esta explicación. int c[3][5] Linea 0 Linea 1 c[0][0] c[0][1]... c[1][0]... /*Antes*/ for( j=0; j<n; j++) for( i=0; i<m; i++) x[i][j] = 2 * x[i][j]; /*Despues*/ for( i=0; i<m; i++) for( j=0; j<n; j++) x[i][j] = 2 * x[i][j]; 6. Fusión de bucles. Los programas numéricos a menudo consisten en varias operaciones sobre los mismos datos, codificadas como múltiples bucles sobre los mismos arrays. La fusión de bucles es lo contrario de la fisión de bucles, una transformación del programa que divide porciones independientes de un bucle en dos bucles separados. La fisión de
8 /*Bucles separados*/ for( i=0; i<n; i++) for( j=0; j<n; j++) a[i][j] = 1 / b[i][j] * c[i][j]; for( i=0; i<n; i++) for( j=0; j<n; j++) d[i][j] = a[i][j] + c[i][j]; /*Bucles fusionados*/ for( i=0; i<n; i++) for( j=0; j<n; j++) { a[i][j] = 1 / b[i][j] * c[i][j]; d[i][j] = a[i][j] + c[i][j]; bucles ayuda al compilador a detectar bucles para explotar el hardware de vectores en algunos supercomputadores. 7. Partición en bloques (Blocking). La partición en bloques es una técnica general de reestructuración de un programa para reutilizar bloques de datos que se encuentran en la caché antes de que sean reemplazados. Imaginemos un programa con varios arrays, algunos accedidos por columnas y otros por filas. Almacenando los datos por filas o columnas (según la característica del compilador) no resolvemos nada, pues tanto filas como columnas son utilizadas en cada iteración. Por esta misma razón, el intercambio de bucles tampoco nos sirve en este caso. /* Antes */ for( x=0; x<n; x++) for( y=0; y<n; y++) { acum = c[x][y]; for( z=0; z<n; z++) acum += a[x][z] * b[z][y]; c[x][y] = acum; /* Particion en bloques */ for( yy=0; yy<n; yy+=t) for( zz=0; zz<n; zz+=t) for( x=0; x<n; x++) for( y=yy; y<min(yy+t,n); y++) { acum = c[x][y]; for( z=zz; z<min(zz+t,n); z++) acum += a[x][z] * b[z][y]; c[x][y] = acum;
9 Para asegurar que los elementos que están siendo accedidos están en la caché, el código original debe de ser modificado para trabajar con una sub-matriz de tamaño T T, de modo que los dos bucles internos realicen los cálculos en pasos de tamaño T en vez de recorrer de principio a fin los arrays A y B. T es el llamado factor de bloqueo. Como puede apreciarse, esta técnica conlleva el aumento del tamaño del código así como del número de cálculos a efectuar. Así, dependiendo del valor de T puede suceder que si bien el número de fallos de caché se reduzca, el tiempo total de ejecución del programa aumente debido a los ciclos de CPU adicionales requeridos. Por ello debe intentarse escribir el código generado por esta técnica de la manera más óptima posible. /* Particion en bloques optimizada*/ for( yy=0; yy<n; yy+=t) { lim_y = min(yy+t, N); for( zz=0; zz<n; zz+=t) { lim_z = min(zz+t, N); for( x=0; x<n; x++) for( y=yy; y<lim_y; y++) { acum = c[x][y]; for( z=zz; z<lim_z; z++) acum += a[x][z] * b[z][y]; c[x][y] = acum; 8. Prebúsqueda. Esta técnica en lugar de buscar reducir el número de fallos de la caché, intenta solapar la latencia de acceso a memoria de los mismos con computaciones de la CPU. Consiste en solicitar a la memoria datos en cuyo acceso se supone que hay muchas probabilidades de que se produzcan fallos caché con antelación al uso de los mismos, de manera que el procesador pueda ejecutar otras instrucciones mientras estos son traídos de la memoria. /* Codigo sin prebusqueda */ for( p = lista; p!= NULL; p = p->sig ) computa(p); /* Codigo con prebusqueda para gcc */ for( p = lista; p!= NULL; p = p->sig ) { builtin_prefetch(p->sig); computa(p); 9. Evitar la compartición falsa. En programas con múltiples threads de ejecución que se ejecuten en sistemas multiprocesador y/o multinúcleo deben evitarse situaciones en las cuales diferentes threads estén actualizando posiciones de memoria localizadas en la misma línea caché. El motivo es que la línea caché define la granularidad de los protocolos
10 hardware involucrados en el mantenimiento de la coherencia de las copias de los datos en las distintas cachés. Así, siempre que un thread que se esté ejecutando en un cierto procesador modifique una posición en una cierta línea caché, todos aquellos otros procesadores que tengan copias de esa línea deberán ser informados por el protocolo hardware y realizar las consiguientes actualizaciones o invalidaciones dependiendo del protocolo utilizado. Y este proceso, que es relativamente costoso, ocurre independientemente de que los threads que se ejecutan en esos otros procesadoresrealmente nunca utilizen la porción de la línea que es modificada por otros threads. /*Con comparticion falsa*/ double resultadoparcial[numthreads]; /* compartido */ void f(int minumthread) { int i; for( i = 0; i < M; i++) resultadoparcial[minumthread] += f(i); /*Sin comparticion falsa*/ #define DOUBLESPORLINEA (TAMANO_LINEA / sizeof(double)) double resultadoparcial[numthreads * DOUBLESPORLINEA]; /* compartido */ void f(int minumthread) { int i; for( i = 0; i < M; i++) resultadoparcial[minumthread * DOUBLESPORLINEA] += f(i); /*Otra forma minimizando comparticion falsa */ double resultadoparcial[numthreads]; /* compartido */ void f(int minumthread) { int i; double temporal = resultadoparcial[minumthread]; for( i = 0; i < M; i++) temporal += f(i); resultadoparcial[minumthread] = temporal;
11 APÉNDICE I: COMENTARIOS ADICIONALES SOBRE EL dineroiii El simulador DineroIII lee trazas en formato din. label address 0 7d c c 0 c2f0 0 c c7c 0 4c80... label indica el tipo de acceso de una referencia. 0 lectura dato 1 escritura dato 2 busqueda instrucción 3 acceso de tipo desconocido 4 caché flush address es la dirección en hexadecimal entre 0 y ffffffff. Los parámetros de la caché se introducen en la línea de comando. Obligatorios: Tamaño del bloque: -b16 Tamaño de la caché unificada: -u16k Caché separada: -i16384, -d1m Por defecto la caché es de correspondencia directa (asociatividad = 1) -a1, LRU. Ejemplo para procesar la traza en el fichero ale 0.prg: dineroiii -b32 -u4k < ale 0.prg Varios niveles de caché: cat ficherotraza dineroiii -o2 arg1 awk -f twolevel.awk dineroiii arg2
12 La salida típica de dineroiii tiene la forma: Interpretación de la salida de dineroiii Metrics Access Type: (totals,fraction) Total Instrn Data Read Write Misc Demand Fetches Demand Misses Words From Memory 6376 ( / Demand Fetches) Words Copied-Back 0 ( / Demand Writes) Total Traffic (words) 6376 ( / Demand Fetches) Significados relevantes: En la primera columna de arriba a abajo vemos que hubo un total de accesos, de los cuales resultaron en fallos 797, lo que constituye el 3,98 % del total. Es decir, la tasa de fallos fue del 3,98 %. Estos 797 fallos trajeron a la caché del nivel inferior de la jerarquía de memoria un total de 6376 palabras, siendo la palabra de 4 bytes siempre en este simulador. La segunda columna indica que 1452 de los accesos (es decir, el 7.26 %) fueron accesos a instrucciones. 361 de ellos resultaron en fallos. Así, la tasa de fallos dentro del conjunto de accesos a instrucciones fue 361/ = 24,86 %. La tercera columna indica que de los accesos (es decir, el %) fueron accesos a datos. De ellos fallaron 436, siendo la tasa de fallos dentro del conjunto de accesos a datos 436/ = 2,35 % La cuarta columna indica que en concreto de los accesos a datos fueron lecturas, constituyendo el 90,21 % de los accesos totales. De ellos 406 accesos resultaron en fallo, con lo que la tasa de fallos en las lecturas de datos fue 406/ = 2,25 %. Según la quinta columna, no hubo ninguna escritura. La sexta columna indica los accesos misceláneos (los del tipo 3), que no revisten interés al ser siempre una parte mínima del total. En este caso hubo 507, lo que constituye el 2, 54 % del total. De ellos 30 resultaron en fallos, con lo que la tasa de fallos dentro de este grupo fue del 30/ = 5,92 %
13 APÉNDICE II: INSTRUMENTACIÓN PARA LA OBTENCIÓN DE TRAZAS Para obtener la traza de accesos a datos generadas por un programa en C, deben seguirse estos tres pasos: 1. Inclusión en el fichero C de la declaración de las macros 2 #define traza rd(iindex) printf( 0 %lx \n, (iindex)) #define traza wr(iindex) printf( 1 %lx \n, (iindex)) que se usarán respectivamente para generar la impresión de los accesos de lectura y de escritura. Nota: Es importante dejar un espacio en blanco entre el 0 y el 1 y el símbolo de porcentaje. 2. Inserción de una llamada traza rd(&(x[expr1][expr2]...)) precediendo cada línea de código donde se efectúe una lectura sobre X[exp1][expr2] Comportamiento recíproco frente a la escritura usando traza wr tras cada acceso de este tipo. Nótese que sólo instrumentamos los accessos a vectores, matrices y en general arrays multidimensionales, y a punteros, pues asumimos que las variables escalares están alojadas en registros del procesador y por tanto sus accesos no afectan a la caché. Por otro lado, dado que la salida estándar del programa va a ser alimentada como traza de entrada para dineroiii, el programa no debe imprimir nada por pantalla, puesto que dicha impresión también sería redireccionada al simulador. Una vez compilado el programa, su salida puede redireccionarse al simulador usando el carácter. Así, por ejemplo, si el ejecutable de nuestro programa se llama a.out, pasaríamos la traza al simulador para ver su comportamiento en una caché unificada de correspondencia directa de 2KB con 64 bytes por línea mediante a.out dineroiii -u2k -b64 -a1 2 Dado que emplean printf, debe incluirse el archivo de cabecera stdio.h en el código antes de las macros.
14 APÉNDICE III: Performance Application Programming Interface (PAPI) La librería PAPI ( permite a los programadores observar la correlación entre sus códigos, su rendimiento y los eventos que suceden en el programa durante la ejecución de sus aplicaciones. La librería tiene un interface de bajo nivel y otro de alto nivel, siendo éste último el que proponemos usar en las prácticas. Se pueden descargar o leer online los manuales completos de la librería de su sitio WWW. Para los propósitos de nuestras prácticas recomendamos consultar la guía de usuario, y en menor medida, la guía software, de los URL: USER GUIDE.htm Software Spec.htm En concreto, la partes de mayor interés son la introducción, y la explicación sobre el uso del interface de alto nivel de la guía de usuario. No obstante, para la realización de nuestras prácticas basta con utilizar el esqueleto de programa del código de ejemplo proporcionado por los profesores de la asignatura en Este programa verifica que los contadores hardware están disponibles, y los programa para medir el número de ciclos, de instrucciones y de fallos de accesos a datos en las cachés del primer y del segundo nivel durante la ejecución de dos porciones de código. Se pueden encontrar otros eventos medibles en la referencia de programación y en la especificación software de PAPI. Puedes aprovechar este programa para medir con él el número de fallos en distintas cachés y ciclos de ejecución de los distintos códigos que escribas durante las prácticas. Para compilar este código usa el comando 3 : gcc -O -I/opt/papi-3.5.0/include/ -L/opt/papi-3.5.0/lib/ -o ejemplo1 ejemplo1.c -lpapi Antes de ejecutarlo debes asegurarte de 1. haber arrancado el sistema en Linux usando el kernel que ha sido parcheado con el parche PerfCtr, pues la librería lo requiere para su funcionamiento. En el caso de que no sepas si el kernel que estás usando tiene el parche o no, usa el comando uname -r, que informa de la versión del sistema operativo. Si la cadena perfctr forma parte de la versión, indica que el kernel tiene el parche; en caso contrario debes reiniciar con el kernel correcto. 2. que tu variable de entorno LD LIBRARY PATH contenga el directorio /opt/papi-3.5.0/lib/, puesto que contiene una librería dinámica que el ejecutable carga durante su ejecución. De no ser así, si tu shell es ksh o bash puedes añadirla mendiante el comando export LD LIBRARY PATH=/opt/papi-3.5.0/lib/:${LD LIBRARY PATH Sugerimos que para no tener que teclear este comando en cada sesión, podrías añadirlo a tu fichero de inicialización del shell. 3 Esstas instrucciones se refieren al directorio /opt/papi pero el nombre del directorio va variando según la versión de PAPI instalada. Haz un ls /opt para ver de cuál dispones
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
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
Microsoft Access proporciona dos métodos para crear una Base de datos.
Operaciones básicas con Base de datos Crear una Base de datos Microsoft Access proporciona dos métodos para crear una Base de datos. Se puede crear una base de datos en blanco y agregarle más tarde las
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
Introducción al tipo de dato ARRAY
CONTENIDOS. Introducción al tipo de dato ARRAY. Definición, Características, Declaración, Acceso e Inicialización.. Arrays multidimensionales Definición, Declaración, Acceso e Inicialización. Introducción
COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX
COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX En este manual se presenta el proceso de configuración de una Maquina Virtual en VirtualBox, que será utilizada para instalar un Servidor
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
Operación de Microsoft Excel
Representación gráfica de datos Generalidades Excel puede crear gráficos a partir de datos previamente seleccionados en una hoja de cálculo. El usuario puede incrustar un gráfico en una hoja de cálculo,
ARREGLOS DEFINICION GENERAL DE ARREGLO
ARREGLOS DEFINICION GENERAL DE ARREGLO Conjunto de cantidades o valores homogéneos, que por su naturaleza se comportan de idéntica forma y deben de ser tratados en forma similar. Se les debe de dar un
Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)
Unidad I Sistemas numéricos 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS.
Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.
Descripción de la semántica de ALFA En esta descripción sólo se mencionarán los aspectos en los que el lenguaje de programación ALFA pueda diferir de otros lenguajes de programación de alto nivel. Se sobreentienden
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
MANUAL COPIAS DE SEGURIDAD
MANUAL COPIAS DE SEGURIDAD Índice de contenido Ventajas del nuevo sistema de copia de seguridad...2 Actualización de la configuración...2 Pantalla de configuración...3 Configuración de las rutas...4 Carpeta
Modulo 1 El lenguaje Java
Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto
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
LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL
OBJETIVO Mejorar el nivel de comprensión y el manejo de las destrezas del estudiante para utilizar formulas en Microsoft Excel 2010. 1) DEFINICIÓN Una fórmula de Excel es un código especial que introducimos
Programa diseñado y creado por 2014 - Art-Tronic Promotora Audiovisual, S.L.
Manual de Usuario Programa diseñado y creado por Contenido 1. Acceso al programa... 3 2. Opciones del programa... 3 3. Inicio... 4 4. Empresa... 4 4.2. Impuestos... 5 4.3. Series de facturación... 5 4.4.
GENERACIÓN DE ANTICIPOS DE CRÉDITO
GENERACIÓN DE ANTICIPOS DE CRÉDITO 1 INFORMACIÓN BÁSICA La aplicación de generación de ficheros de anticipos de crédito permite generar fácilmente órdenes para que la Caja anticipe el cobro de créditos
El programa Minitab: breve introducción a su funcionamiento. Para mostrar la facilidad con la que se pueden realizar los gráficos y cálculos
El programa Minitab: breve introducción a su funcionamiento Para mostrar la facilidad con la que se pueden realizar los gráficos y cálculos estadísticos en la actualidad, el libro se acompaña, en todo
Centro de Capacitación en Informática
Fórmulas y Funciones Las fórmulas constituyen el núcleo de cualquier hoja de cálculo, y por tanto de Excel. Mediante fórmulas, se llevan a cabo todos los cálculos que se necesitan en una hoja de cálculo.
Operación de Microsoft Excel. Guía del Usuario Página 79. Centro de Capacitación en Informática
Manejo básico de base de datos Unas de las capacidades de Excel es la de trabajar con listas o tablas de información: nombres, direcciones, teléfonos, etc. Excel puede trabajar con tablas de información
Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.
Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Uso de Ficheros Todas las estructuras de datos vistas hasta ahora utilizan la
Con esta nueva versión, si un artículo que está incluido dentro de un Paquete de Ventas tiene precio 0,00, significará gratis.
NOVEDADES Y MEJORAS Continuando con nuestra política de mejora, innovación y desarrollo, le presentamos la nueva versión 9.50 de datahotel que se enriquece con nuevas funcionalidades que aportan soluciones
Para crear una lista como la anterior, primero escribe la información, y después selecciona el texto y aplícale el formato de viñetas.
Módulo 3 Herramientas de Cómputo Listas, tabulaciones, columnas y cuadros de texto Listas En muchas ocasiones es necesario que enumeres diferentes elementos en tus documentos. Word no sólo reconoce números
Sesión No. 4. Contextualización INFORMÁTICA 1. Nombre: Procesador de Texto
INFORMÁTICA INFORMÁTICA 1 Sesión No. 4 Nombre: Procesador de Texto Contextualización La semana anterior revisamos los comandos que ofrece Word para el formato del texto, la configuración de la página,
GENERACIÓN DE TRANSFERENCIAS
GENERACIÓN DE TRANSFERENCIAS 1 INFORMACIÓN BÁSICA La aplicación de generación de ficheros de transferencias permite generar fácilmente órdenes para que la Caja efectúe transferencias, creando una base
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
Transacciones y bloqueos en SQL-Server
Transacciones y bloqueos en SQL-Server (Información para el uso desde Axapta) Introducción En este documento vamos a intentar explicar cuatro conceptos básicos acerca de las transacciones y los bloqueos
Arrays y Cadenas en C
Arrays y Cadenas en C Los arrays son variables estructuradas, donde cada elemento se almacena de forma consecutiva en memoria. Las cadenas de caracteres son declaradas en C como arrays de caracteres y
Bases de datos en Excel
Universidad Complutense de Madrid CURSOS DE FORMACIÓN EN INFORMÁTICA Bases de datos en Excel Hojas de cálculo Tema 5 Bases de datos en Excel Hasta ahora hemos usado Excel básicamente para realizar cálculos
Capítulo 9. Archivos de sintaxis
Capítulo 9 Archivos de sintaxis El SPSS permite generar y editar archivos de texto con sintaxis SPSS, es decir, archivos de texto con instrucciones de programación en un lenguaje propio del SPSS. Esta
Formularios. Formularios Diapositiva 1
Formularios Crear un formulario utilizando el Asistente para formularios Modificación en vista Diseño Adición de Controles a un Formulario Adición de un Subformulario a un formulario Formularios Diapositiva
PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE
PRUEBAS DE SOFTWARE La prueba del software es un elemento crítico para la garantía de la calidad del software. El objetivo de la etapa de pruebas es garantizar la calidad del producto desarrollado. Además,
Indicaciones específicas para los análisis estadísticos.
Tutorial básico de PSPP: Vídeo 1: Describe la interfaz del programa, explicando en qué consiste la vista de datos y la vista de variables. Vídeo 2: Muestra cómo crear una base de datos, comenzando por
Sea el siguiente programa de nombre "c0p1" para copiar archivos (por simplicidad se ha eliminado todo control de errores): Se pide:
Sea el siguiente programa de nombre "c0p1" para copiar archivos (por simplicidad se ha eliminado todo control de errores): 1 /* c0p1 origen destino 2 * Copia "origen" sobre "destino" byte a byte, 3 * haciendo
Práctica 0. Emulador XENON de la computadora CESIUS
Práctica 0. Emulador XENON de la computadora CESIUS 1. Introducción El objeto de la presente práctica es permitir al alumno ensayar y familiarizarse con los conceptos de programación de computadoras digitales
Ingeniería del Software I Clase de Testing Funcional 2do. Cuatrimestre de 2007
Enunciado Se desea efectuar el testing funcional de un programa que ejecuta transferencias entre cuentas bancarias. El programa recibe como parámetros la cuenta de origen, la de cuenta de destino y el
Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: 93.410.92.92 Fax.: 93.419.86.49 e-mail:atcliente@websie.
Adaptación al NPGC Introducción Nexus 620, ya recoge el Nuevo Plan General Contable, que entrará en vigor el 1 de Enero de 2008. Este documento mostrará que debemos hacer a partir de esa fecha, según nuestra
Ejemplos de conversión de reales a enteros
Ejemplos de conversión de reales a enteros Con el siguiente programa se pueden apreciar las diferencias entre las cuatro funciones para convertir de reales a enteros: program convertir_real_a_entero print
Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:
Apuntes de ACCESS Campos de Búsqueda: Los campos de búsqueda permiten seleccionar el valor de un campo de una lista desplegable en lugar de tener que escribirlos. El usuario sólo tiene que elegir un valor
TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA
TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA Programa: Algoritmo (secuencia no ambigua, finita y ordenada de instrucciones para la resolución de un determinado problema) traducido
1.- MENU DE CONTROL O MENU VENTANA: permite cerrar la ventana cambiarla de tamaño y pasar a otra ventana
EXCEL PRÓLOGO Microsoft Excel es una hoja de cálculo de gran capacidad y fácil uso. Excel no solo es una hoja de calculo, sino también tiene capacidad para diseñar bases de datos (listas) de forma totalmente
Abelardo Pardo. Iria Estévez Ayres. Damaris Fuentes Lorenzo. Pablo Basanta Val. Pedro J. Muñoz Merino. Hugo A. Parada.
Arquitectura de sistemas Abelardo Pardo University of Sydney School of Electrical and Information Engineering NSW, 2006, Australia Autor principal del curso de 2009 a 2012 Iria Estévez Ayres Damaris Fuentes
Introducción a la Estadística con Excel
Introducción a la Estadística con Excel En el siguiente guión vamos a introducir el software Excel 2007 y la manera de trabajar con Estadística Descriptiva. Cargar o importar datos En Excel 2007 podemos
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
ESTRUCTURA DE DATOS: ARREGLOS
ESTRUCTURA DE DATOS: ARREGLOS 1. Introduccion 2. Arreglos - Concepto - Caracteristicas 3. Arreglos Unidimensionales 4. Arreglos Bidimensionales 5. Ventajas del uso de arreglos 6. Ejemplo 1. Introducció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
Instalar y configurar W3 Total Cache
Instalar y configurar W3 Total Cache en WordPress Cardenal Gardoki, 1 48008 BILBAO (Vizcaya) Teléfono: 902 012 199 www.hostalia.com La velocidad de carga de una web influye mucho a la hora de mejorar el
Hardware y Estructuras de Control. Memoria Virtual. Ejecución de un Programa. Ejecución de un Programa
Memoria Virtual Capítulo 8 Hardware y Estructuras de Control Las referencias de memoria se traducen a direcciones físicas dinámicamente en tiempo de ejecución Un proceso puede ser intercambiado hacia dentro
Mantenimiento Limpieza
Mantenimiento Limpieza El programa nos permite decidir qué tipo de limpieza queremos hacer. Si queremos una limpieza diaria, tipo Hotel, en el que se realizan todos los servicios en la habitación cada
2. Entorno de trabajo y funcionalidad en Arquímedes
2. Entorno de trabajo y funcionalidad en Arquímedes 2.9. Presupuestos comparativos. Cómo contrastar ofertas... 1 2.9.1. Análisis de los datos del comparativo de presupuestos... 4 2.9.2. Ejemplo de comparativo
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
Sistema de Gestión Portuaria Sistema de Gestión Portuaria Uso General del Sistema
Sistema de Gestión Portuaria Uso General del Sistema Uso General del Sistema Página 1 de 21 Contenido Contenido... 2 1.Ingreso al Sistema... 3 2.Uso del Menú... 6 3.Visualizar Novedades del Sistema...
SIIGO Pyme. Templates. Cartilla I
SIIGO Pyme Templates Cartilla I Tabla de Contenido 1. Presentación 2. Qué es un Template? 3. Qué Aspectos se Deben Tener en Cuenta Antes de Diseñar o Modificar un Template? 4. Cuáles son las Formas que
Plan de estudios ISTQB: Nivel Fundamentos
Plan de estudios ISTQB: Nivel Fundamentos Temario 1. INTRODUCCIÓN 2. FUNDAMENTOS DE PRUEBAS 3. PRUEBAS A TRAVÉS DEL CICLO DE VIDA DEL 4. TÉCNICAS ESTÁTICAS 5. TÉCNICAS DE DISEÑO DE PRUEBAS 6. GESTIÓN DE
Como instalar y usar Windows XP y Windows 7 en el mismo equipo
Como instalar y usar Windows XP y Windows 7 en el mismo equipo Tabla de contenido. Requisitos para instalar Windows XP en una PC con Windows 7. Lo que debemos conocer antes de instalar. Crear una nueva
5.4. Manual de usuario
5.4. Manual de usuario En esta sección se procederá a explicar cada una de las posibles acciones que puede realizar un usuario, de forma que pueda utilizar todas las funcionalidades del simulador, sin
Manual CMS Mobincube
Manual CMS Mobincube CMS Mobincube Qué es? El CMS (Sistema de Gestión de Contenidos) es un completo website que permite la creación y actualización de contenido remoto. De esta forma, una vez creada una
WINDOWS 2008 7: COPIAS DE SEGURIDAD
1.- INTRODUCCION: WINDOWS 2008 7: COPIAS DE SEGURIDAD Las copias de seguridad son un elemento fundamental para que el trabajo que realizamos se pueda proteger de aquellos problemas o desastres que pueden
TEMA 4: EMPEZANDO A NAVEGAR ESCUELA UNIVERSITARIA DE INFORMÁTICA. Raúl Martín Martín
TEMA 4: EMPEZANDO A ESCUELA UNIVERSITARIA DE INFORMÁTICA NAVEGAR Raúl Martín Martín SERVICIOS DE INTERNET SERVICIOS DE INTERNET Las posibilidades que ofrece Internet se denominan servicios. Hoy en día,
Entorno de Ejecución del Procesador Intel Pentium
Arquitectura de Ordenadores Arquitectura del Procesador Intel Pentium Abelardo Pardo abel@it.uc3m.es Universidad Carlos III de Madrid Departamento de Ingeniería Telemática Entorno de Ejecución del Procesador
En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas.
1 de 18 Inicio Qué es un foro En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas. En el campus virtual, el foro es una herramienta
Seminario de Informática
Unidad II: Operaciones Básicas de Sistemas Operativos sobre base Windows 11. Herramientas del Sistema INTRODUCCION Este apunte está basado en Windows XP por ser el que estamos utilizando en el gabinete
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
SMS Gestión. manual de uso
SMS Gestión manual de uso índice qué es SMS Gestión 2 acceso al servicio 3 01 acceso con la clave de servicios de Orange 4 02 acceso personalizado 6 02.1 cómo personalizar su acceso a la aplicación 7 02.2
PRACTICA 2 Ejercicio 3
PRACTICA 2 Ejercicio 3 Análisis de la Memoria Cache L1 de Datos para Procesadores Superescalares con Ejecución uera de Orden DESCRIPCIÓN GENERAL El objetivo de este ejercicio práctico consiste en obtener
Capítulo 4 Procesos con estructuras de repetición
Estructura de contador Capítulo 4 Procesos con estructuras de repetición Esta es una operación que incrementa en una unidad el valor almacenado en la variable c, cada vez que el flujo del diagrama pasa
TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.
TABLA DE DECISION La tabla de decisión es una herramienta que sintetiza procesos en los cuales se dan un conjunto de condiciones y un conjunto de acciones a tomar según el valor que toman las condiciones.
Instructivo de Microsoft Excel 2003
Instructivo de Microsoft Excel 2003 El presente instructivo corresponde a una guía básica para el manejo del programa y la adquisición de conceptos en relación a este utilitario. Que es Microsoft Excel?
Mi primer proyecto en Dev-C++
Mi primer proyecto en Dev-C++ Para realizar esta actividad deberás disponer de un ordenador en el que esté instalado el Dev-C++. Debes ir realizando cada uno de los pasos indicados, en el mismo orden en
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
UNIDADES DE ALMACENAMIENTO DE DATOS
1.2 MATÉMATICAS DE REDES 1.2.1 REPRESENTACIÓN BINARIA DE DATOS Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS. Los computadores sólo
Apéndice 5 Manual de usuario de ColeXión. ColeXión 1.0. Manual de usuario
Apéndice 5 Manual de usuario de ColeXión ColeXión 1.0 Manual de usuario Índice 1. Qué es ColeXión?... 2 2. Requerimientos del sistema... 3 3. Instalación de ColeXión... 3 4. Creación de un nuevo esquema...
Tarea 4.2 Memoria Virtual
1 Tarea 4.2 1. Cuál es la diferencia entre paginación simple y paginación en memoria virtual? En memoria virtual no es necesario que todas las páginas estén en marcos de la memoria principal. Las páginas
EUSKADI PRECIOS NDICE. 1 Definiciones: Base de Precios, Estructura, Precios paramétricos, Precios descompuestos, ámbitos
EUSKADI PRECIOS NDICE 1 Definiciones: Base de Precios, Estructura, Precios paramétricos, Precios descompuestos, ámbitos 2 Consulta Sencilla: 3 Consulta Completa: Zona Izquierda, Zona Central, Zona Derecha
Opciones disponibles para arrancar MAX
Funcionamiento Básico de la Tarjeta de Protección Los equipos disponen de una tarjeta de protección de disco duro que permite guardar y restaurar los sistemas operativos instalados en los mismos, en este
DOCUMENTOS COMPARTIDOS CON GOOGLE DOCS
DOCUMENTOS COMPARTIDOS CON GOOGLE DOCS 1. Introducción Los ambientes de aprendizaje acompañados de trabajos colaborativos como estrategia se revierten en actividades de diferente índole (análisis de videos,
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
Anexo B. Comunicaciones entre mc y PC
Anexo B Comunicaciones entre mc y PC En este apartado se hará hincapié en los comandos para el manejo del módulo de comunicaciones desde el PC. Conociendo estos comando se podrá realizar una aplicación
MEDIDAS DE TENDENCIA CENTRAL
CAPÍTULO 14 MEDIDAS DE TENDENCIA CENTRAL A veces, de los datos recolectados ya organizados en alguna de las formas vistas en capítulos anteriores, se desea encontrar una especie de punto central en función
Capítulo 5: Pruebas y evaluación del sistema. A continuación se muestran una serie de pruebas propuestas para evaluar varias
Capítulo 5: Pruebas y evaluación del sistema 5.1 Definición de pruebas para la aplicación A continuación se muestran una serie de pruebas propuestas para evaluar varias características importantes del
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
SEGURIDAD Y PROTECCION DE FICHEROS
SEGURIDAD Y PROTECCION DE FICHEROS INTEGRIDAD DEL SISTEMA DE ARCHIVOS ATAQUES AL SISTEMA PRINCIPIOS DE DISEÑO DE SISTEMAS SEGUROS IDENTIFICACIÓN DE USUARIOS MECANISMOS DE PROTECCIÓN Y CONTROL INTEGRIDAD
Estructuras de datos: Proyecto 2
Estructuras de datos: Proyecto 2 28 de mayo de 2013 Instrucciones Enviar las soluciones por email a los ayudantes, con copia a la profesora. Plazo de entrega: 16 de junio (durante todo el día). Se debe
GENERALIDADES DE BASES DE DATOS
GENERALIDADES DE BASES DE DATOS A fin de evitar que idénticos datos se encuentren repetidos en múltiples archivos, parece necesario que los comunes se almacenen en un archivo único y que este archivo sea
PROYECTOS, FORMULACIÓN Y CRITERIOS DE EVALUACIÓN
PROYECTOS, FORMULACIÓN Y CRITERIOS DE EVALUACIÓN GESTIÓN DE PROYECTOS CON PLANNER AVC APOYO VIRTUAL PARA EL CONOCIMIENTO GESTIÓN DE PROYECTOS CON PLANNER Planner es una poderosa herramienta de software
7. Manejo de Archivos en C.
7. Manejo de Archivos en C. Los datos que hemos tratado hasta el momento han residido en la memoria principal. Sin embargo, las grandes cantidades de datos se almacenan normalmente en un dispositivo de
SOLUCION EXAMEN junio 2006
SOLUCION EXAMEN junio 2006 1. Explique razonadamente si las siguientes afirmaciones son verdaderas o falsas: I) (1 p) En UNIX únicamente se distinguen dos tipos de procesos: los procesos de usuario y los
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
ELABORACIÓN DE TABLEROS DINÁMICOS DE COMUNICACIÓN CON EL PROGRAMA EDITOR TICO
ELABORACIÓN DE TABLEROS DINÁMICOS DE COMUNICACIÓN CON EL PROGRAMA (Tico 2.0) EDITOR TICO La idea principal que motivo este proyecto fue trasladar la definición tradicional de tablero de comunicación en
COMBINAR CORRESPONDENCIA EN MICROSOFT WORD
COMBINAR CORRESPONDENCIA EN MICROSOFT WORD Combinar documentos consiste en unir dos documentos diferentes sin que se modifiquen los datos que aparecen en ellos. Esta operación es muy útil y muy frecuente
Tema 6. Gestión de la memoria
Tema 6. Índice Introducción Compartición de memoria Memoria virtual Soporte en los procesadores: la MMU en Linux en Windows NT/2000 1 Tema 6. Introducción Necesidad de la gestión de la memoria Requisitos
Estructuras de Datos y Algoritmos Tecnólogo en Informática
Estructuras de Datos y Algoritmos Tecnólogo en Informática INSTRUCTIVO DEL COMANDO MAKE ESTRUCTURAS DE DATOS Y ALGORITMOS - TECNÓLOGO EN INFORMÁTICA 1 Contenido Introducción... 3 El archivo makefile...
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.
3. Número inicial y número final de mensajes mostrados en la página actual.
Sistema WEBmail El sistema WEBmail permite el acceso rápido y sencillo a su buzón de correo utilizando un navegador de páginas Web. Normalmente es usado como complemento al lector de correo tradicional,
Soporte y mantenimiento de base de datos y aplicativos
Soporte y mantenimiento de base de datos y aplicativos Las bases de datos constituyen la fuente de información primaria a todos los servicios que el centro de información virtual ofrece a sus usuarios,
Capítulo 0. Introducción.
Capítulo 0. Introducción. Bueno, por fin está aquí el esperado (espero!!) Capítulo Cero del Tutorial de Assembler. En él estableceremos algunos conceptos que nos serán de utilidad a lo largo del Tutorial.
Presentaciones. Con el estudio de esta Unidad pretendemos alcanzar los siguientes objetivos:
UNIDAD 8 Presentaciones Reunión. (ITE. Banco de imágenes) as presentaciones son documentos formados por una sucesión de páginas, llamadas diapositivas, que transmiten información estructurada de manera