Introducción a GPGPU y CUDA Doctorado en Tecnologías de la Información y las Telecomunicaciones
|
|
- Antonio Navarro Godoy
- hace 7 años
- Vistas:
Transcripción
1 Introducción a GPGPU y CUDA Doctorado en Tecnologías de la Información y las Telecomunicaciones ETSI Telecomunicación Universidad de Valladolid Mario Martínez-Zarzuela Febrero de 2015 Introducción CONTENIDO Diferencias entre CPU y GPU Desarrollo de aplicaciones para GPU Ejemplo: suma de vectores Ejercicios: suma de vectores, suma de matrices Conclusiones 1
2 INTRODUCCIÓN CPU vs GPU by Mythbusters Cazadores de mitos en el NVISION08 Adam & Jaime contratados por NVIDIA 2
3 GPGPU & CUDA GPU - Graphics Processing Unit Unidad de Procesamiento Gráfico Procesador gráfico Coprocesador de la CPU tareas gráficas GPGPU - General-Purpose computing on GPU GPU de Propósito General 2004 Inicios de GPGPU Primeros desarrolladores Compleja programación gráfica API OpenGL Shaders Cg Brook (Universidad de Standford), Lib Sh GPGPU & CUDA Pipeline gráfica programable Vértices X,Y,Z,W Rasterizador Interpolación Fragmentos R,G,B,A Pre-cuda Shaders Operaciones vectores de 4 componentes 3
4 GPGPU & CUDA 2007 NVIDIA CUDA Toolkit Supercomputación para las masas CUDA - Compute Unified Device Architecture Plataforma de cálculo en paralelo y modelo de programación Inicialmente extensiones de lenguaje C Compilador nvcc Librería en tiempo de ejecución La primera GPU habilitada por NVIDIA fue la GeForce G80 (2006) Cada vez más herramientas y lenguajes Entornos de desarrollo integrados Visual Studio Nsight y Eclipse Nsight Edition Herramientas de depurado y profiling Librerías y plugins 3 rd party GPGPU y hardware Tegra GeForce/Quadro Tesla Tegra (GPU + ARM) (GPU + ARM) 4
5 DIFERENCIAS ENTRE CPU Y GPU Rendimiento computacional y ancho de banda GPU vs. СPU 5
6 Características CPU Intel Core i7 Varios núcleos independientes de alto rendimiento 2,4,6,8 núcleos 2,66 3,6GHz cada uno Hyper-Threading : cada núcleo es visto por el SO como dos núcleos lógicos, que pueden ejecutar dos hilos de forma simultánea. 3 niveles de caché, gran caché L3 Cada núcleo: L1=32KB (datos) + 32KB (instrucciones), L2=256KB L3 compartida, hasta 15 MB Peticiones a memoria gestionadas de forma independiente por cada hilo/proceso Core I7-3960x, 6 núcleos, 15MB L3 Características GPU GeForce 780 Ti (Kepler GK110) 15 Multiprocesadores SMX 2880 núcleos en total < 1 GHz 2 niveles de caché Cada núcleo: L1=64KB (datos) L2 compartida=1492 KB Las peticiones a memoria son realizadas por grupos de hilos Ancho de banda 384- bit GDDR MB 6
7 GK1xx GPU Kepler Streaming Multiprocessor (SMX) Formados por: 192 núcleos ~ 1 GHz cada uno Disposición en grupos de unidades FP 32 unidades de Funciones Especiales 32 unidades de Carga/Almacenamiento dedicadas al acceso a memoria Las peticiones a memoria son realizadas por grupos de hilos registros x 32 bit (256KB) 64KB memoria compartida/ L1 caché Configurable por el usuario 48KB caché de solo lectura 48KB caché 2D para texturas Evolución de arquitecturas 7
8 Características GPU GeForce 980 (Maxwell GK204) 16 Multiprocesadores SMM 2048 núcleos en total Mayor cache L KB frente a: 1492KB (GK110) 512KB (GK104) Reducción interfaz con memoria 256-bit Ancho de banda: 224 GB/sec GM204 GPU Maxwell Multiprocessor (SMM) Septiembre 2014 Novedades: 2da generación chip Maxwell, tras GM107 Menos núcleos por SM 128 núcleos ~ 1 GHz cada uno +40% eficiencia para cada CUDA core Planificador mejorado Nuevo damino de datos Mayor eficiencia energética 2x perf/watt vs GK104 Diseño en cuadrantes de 32 núcleos 1 warp scheduler por cuadrante 2 instrucciones por ciclo reloj Mayor memoria compartida / L1 cache 96 KB frente a 64KB (GK110) / 48KB (GK104) Máximo 48KB por thread block Hasta 32 block threads activos por SM ( frente a 16 en Kepler. 8
9 Maxwell Desmitificando la conspiración de la llegada del hombre a la luna Montaje? Buzz Aldrin en zona de sombra porque el Sol está detrás del módulo lunar Iluminación de estudio en L.A.? Parece que está iluminado por múltiples fuentes de luz! No se ven estrellas y los astronautas no recuerdan haberlas visto Se omitieron debido a la dificultad de crearlas? Maxwell Desmitificando la conspiración de la llegada del hombre a la luna Maxwell: renderizado luz tiempo real por primera vez Unreal Engine Voxelized Global Illumination (VGI) 9
10 X1 NVIDIA drive Enero de 2015 (CES Las Vegas) Potencia superior a la del mayor supercomputador de hace 15 años GPU Maxwell de 256 núcleos 8 núcleos de CPU ARM Procesamiento de 12 cámaras 60 fps NVIDIA DRIVE PX: Autonomous drive Deep Neural Network Computer Vision GPU vs. CPU Cientos de núcleos de cálculo simplificados Bajas frecuencias ~1 GHz (en lugar de 2-12 en CPU) Cachés pequeñas (valores Kepler) 192 núcleos comparten la caché L1 (16-48 KB) L2 compartida entre todos los núcleos, 1.5 MB, no L3 Cambios de contexto rápidos en GPU Sin sobrecarga por cambiar entre hilos (en hardware) Soporte para millones de hilos virtuales 10
11 Latencia en los accesos a Memoria Objetivo: cargar todos los núcleos Problema: latencia en los accesos a memoria Solución: CPU: compleja jerarquía de cachés GPU: miles de hilos listos para ser ejecutados Ocultar la latencia realizando cálculos LENGUAJES Y LIBRERÍAS DESARROLLO DE APLICACIONES 11
12 DRAM I/F Giga Thread HOST I/F DRAM I/F 03/02/2015 Ecosistema de Desarrollo GPGPU Librerías Aplicaciones Directivas OpenACC Lenguajes de Programación (CUDA) Aceleración Drop-in Aceleración rápida de aplicaciones existentes Máximo Rendimiento Directivas OpenACC void saxpy(int n, float a, float *x, float *restrict y){ #pragma acc parallel loop for (int i = 0; i < n; ++i) y[i] = a*x[i] + y[i]; } L2 DRAM I/F DRAM I/F DRAM I/F DRAM I/F... // Perform SAXPY on 1M elements saxpy(1<<20, 2.0, x, y);... 12
13 Librería Thrust #include <thrust/device_vector.h> #include <thrust/transform.h> #include <thrust/functional.h> #include <iostream> int main(void) { thrust::device_vector<float> X(3); thrust::device_vector<float> Y(3); thrust::device_vector<float> Z(3); X[0] = 10; X[1] = 20; X[2] = 30; Y[0] = 15; Y[1] = 35; Y[2] = 10; thrust::transform(x.begin(), X.end(), Y.begin(), Z.begin(),\ thrust::plus<float>()); } for (size_t i = 0; i < Z.size(); i++) std::cout << "Z[" << i << "] =" << Z[i] << "\n"; return 0; Cálculos utilizando la GPU GPU (device) es controlado por la CPU (host) Co-procesador GPU es «pasiva», i.e. no puede llamarse a si misma Excepción Paralelismo dinámico (CUDA 5.X) Cálculos en paralelo en el device Invocados normalmente por el host Desde cualquier parte del programa Oportunidad para una optimización incremental del código Memorias GPU y CPU separadas Excepción Tarjetas integradas Opción de Unified Virtual Address 13
14 Cálculos utilizando la GPU Cálculos utilizando la GPU Un programa que utiliza GPU está formado por: Código para la GPU (código del device), que contiene: Instrucciones de cálculo en paralelo un CUDA Kernel Accesos a la memoria de la GPU Código para la CPU (código del host), maneja: Gestión de memoria GPU reserva/liberación Intercambio de datos entre GPU y CPU Invocar ejecución de CUDA Kernel en GPU Interpretación de resultados y otras etapas de procesamiento en serie 14
15 CUDA: Código del device CUDA usa C++ con algunas extensiones: Atributos para funciones, variables y estructuras Funciones integradas (built-in) Funciones matemáticas propias de la GPU Funciones de sincronización, operaciones colectivas entre hilos Vectores de datos de varias dimensiones Variables integradas threadidx, blockidx, blockdim, griddim Plantillas (templates) para trabajar con texturas Compilado con un compilador especial: nvcc Basado en el compilador de código abierto LLVM Puede ampliar los lenguajes de programación para que soporten dispositivos compatibles con CUDA CUDA: Código del host Existe una sintaxis especial para lanzar los kernels de CUDA desde el código del host En su forma más simple se invocan: kernel_routine<<<griddim, blockdim>>>(args, ); Código de CPU se compila con un compilador normal gcc, icc, llvm Excepto invocación del kernel <<<... >>> Funciones enlazadas mediante librerías dinámicas 15
16 CUDA Kernel Función especial, punto de entrada para el código ejecutado en GPU No devuelve nada (void) Se declara con el calificador global Solo puede accede a la memoria GPU Excepción: memoria host mapeada Sin variables estáticas Declaración de parámetros y mismo uso que para funciones normales global void kernel (int * ptr) { ptr = ptr + 1; ptr[0] = 100;.; //other code for GPU } Host lanza «kernels», device los ejecuta CUDA grid, bloques e hilos Invocación de kernel crea una jerarquía de hilos de procesamiento Bloque: agrupación de hilos. Hilos y bloques representan diferentes niveles de paralelismo Grid: conjunto de bloques de hilos invocados Warp: hilos planificados en grupos de 32 hilos Grid Múltiples bloques del mismo tamaño Habitualmente definido por nuestro dominio de cálculo 16
17 CUDA grid, bloques e hilos Hilos dentro de un bloque, y bloque dentro de un grid, indexados de forma especial Posición de un hilo en un bloque, y un bloque en el grid, indexada en tres dimensiones (x,y,z) Tamaño de grid/bloque especificado por el número de bloques/hilos en cada dimensión Si el grid y el bloque tienen dimension z=1, estamos ante un grid de hilos bidimensional o lineal (si además y=1) CUDA grid, bloques e hilos typedef struct{ } dim3; Tipo predefinido en CUDA con 3 miembros x, y, z. Usada para variables built-in : dim3 threadidx índice del hilo en cada bloque dim3 blockidx índice del bloque en el grid dim3 blockdim tamaño de bloque en cada dimensión dim3 griddim tamaño de grid en cada dimensión Cálculo del índice absoluto de un hilo de ejecución a partir de índices relativos. Para un grid de hilos lineal: unsigned int tidx = threadidx.x + blockdim.x*blockidx.x; 17
18 CUDA Escalabilidad Automática Diferentes GPUs con el mismo chip tienen diferente número de SMs GeForce GTX cores 16xSM GM204 Maxwell X1 256 cores 2xSM GM204 EJEMPLO SUMA DE VECTORES 18
19 Suma de vectores en una dimensión Hilos Vector A ld ld ld ld ld ld ld ld ld ld Vector B ld ld ld ld ld ld ld ld ld ld Vector C st st st st st st st st st st Código en el device global void sum_kernel(int *A, int *B, int *C) { int tidx = threadidx.x + blockidx.x * blockdim.x; //calcular índice int elema = A[tidx]; //leer elemento de A int elemb = B[tidx]; //leer elemento de B C[tidx] = elema + elemb; //calcular y escribir elemento en C } Cada hilo de CUDA: Recibe una copia de los parámetros En este ejemplo recibe punteros a vectores en GPU Determina su posición en el grid con el índice tidx Lee los elementos de dos vectores de entrada usando el índice tidx Calcula la suma y escribe los resultados en un vector de salida con el mismo índice tidx 19
20 Código en el host Especificar el tamaño del grid y de cada bloque 5. Lanzar el kernel 6. Código en el host 4. Especificar el tamaño del grid y de cada bloque Depende el tamaño del problema 5. Lanzar el kernel Supondremos vectores de longitud 1024 elementos Tamaño de bloque: 256 (múltiplo de tamaño de warp) Tamaño de grid = 1024 / 256 = 4 bloques //d_a, d_b y d_c son punteros a vectores en el device dim3 blockdim(256,1,1); //Bloques típicos de 128, 256, 512 dim3 griddim(4,1,1); sum_kernel<<<griddim,blockdim>>>(d_a,d_b,d_c); 20
21 Código en el host Reservar memoria en la GPU 3. Copiar datos de entrada a la GPU 4. Especificar el tamaño del grid y de cada bloque 5. Lanzar el kernel 6. Copiar los datos de salida de vuelta al host Reserva de memoria en el device cudaerror_t cudamalloc (void** devptr, size_t size) Reserva size bytes de memoria lineal en la GPU, y devuelve un puntero a la memoria ubicada en *devptr. Los elementos de memoria no son puestos a cero. Las direcciones de memoria están alineadas a 512 bytes cudaerror_t cudafree (void* devptr) Libera la memoria apuntada por devptr En donde cudaerror_t es una enumeración para control de errores 21
22 Transferencia de datos cudaerror_t cudamemcpy ( void* dst, const void* src, size_t count, cudamemcpykind kind) Copia count bytes de la memoria apuntada por src a la memoria apuntada por dst kind especifica la dirección de la transferencia cudamemcpyhosttohost transferencia de datos entre host cudamemcpyhosttodevice transferencia de datos de host a device cudamemcpydevicetohost transferencia de datos de device a host cudamemcpydevicetodevice transferencia de datos entre devices Una llamada a cudamemcpy() con kind inconsistente con punteros dst y src, puede provocar resultados impredecibles GPU no sabe si los punteros pertenecen a la CPU o la GPU (excepción: UVA) Comprobación de Errores En donde cudaerror_t es una enumeración para control de errores En caso de error el código de error recogido por el sistema no está necesariamente asociado a la última llamada de biblioteca de CUDA Funciones útiles para conocer el último error ocurrido cudaerror_t cudapeekatlasterror() devuelve el último error ocurrido en cualquiera de las llamadas cudaerror_t cudagetlasterror() devuelve el último error ocurrido y resetea el estado de error a cudasuccess const char* cudageterrorstring (cudaerror_t error) devuelve la cadena del mensaje del código de error La lista de posibles errores puede consultarse en la documentación de CUDA 22
23 Control de errores La mayoría de funciones de biblioteca devuelven en caso de error una variable de tipo enumeración enum cudaerror_t cudaerror_t err = cudasuccess; err = /* Llamada a función de CUDA */ if (err!= cudasuccess){ fprintf(stderr, Error (error code %s)!\n", cudageterrorstring(err)); exit(exit_failure); } Control de errores Una macro muy útil para gestión de errores es la siguiente Traduce el código de error devuelto a un mensaje de texto #define CUDA_CALL(x) do{ \ cudaerror_t err = (x); \ if (err!= cudasuccess) { \ printf ("Error \"%s\"\n", \ cudageterrorstring(err)); \ exit(-1); \ }} while (0) 23
24 Código en el host #include <stdio.h> #include <cuda_runtime.h> #define CUDA_CALL(x) do{ \ // }} while (0) int main(void) { int N = 1024; size_t size = N * sizeof(float); // Allocate the host input vectors and initialize float *h_a = (float *)malloc(size); float *h_b = (float *)malloc(size); float *h_c = (float *)malloc(size); //... float *d_a,*d_b = NULL; //Reservar memoria E/S en el dispositivo CUDA_CALL(cudaMalloc((void **)&d_a, size)); CUDA_CALL(cudaMalloc((void **)&d_b, size)); float *d_c = NULL; CUDA_CALL(cudaMalloc((void **)&d_c, size)); Código en el host //Copiar los vectores de entrada h_a y h_b al dispositivo CUDA_CALL(cudaMemcpy(d_A, h_a, size, cudamemcpyhosttodevice)); CUDA_CALL(cudaMemcpy(d_B, h_b, size, cudamemcpyhosttodevice)); //Configurar parámetros y lanzar el kernel int blockdim = 256; int griddim = 4; printf("cuda kernel launch with %d blocks of %d threads\n", griddim, blockdim); vectoradd<<<griddim, blockdim>>>(d_a, d_b, d_c, N); cudaerror_t err = cudagetlasterror(); if (err!= cudasuccess) { fprintf(stderr, "Failed to launch vectoradd kernel (error code %s)!\n", cudageterrorstring(err)); exit(exit_failure); } //Copiar resultado al host CUDA_CALL(cudaMemcpy(h_C, d_c, size, cudamemcpydevicetohost)); 24
25 Código en el host //Comprobar cálculos realizados for (int i = 0; i < N; ++i) { if (fabs(h_a[i] + h_b[i] - h_c[i]) > 1e-5) { fprintf(stderr, "Result verification failed at element %d!\n", i); exit(exit_failure); } } printf("test PASSED\n"); CUDA_CALL(cudaFree(d_A)); // Liberar memoria del dispositivo CUDA_CALL(cudaFree(d_B)); CUDA_CALL(cudaFree(d_C)); free(h_a); // Free host memory free(h_b); free(h_c); // Resetear el dispositivo y salir CUDA_CALL(cudaDeviceReset()); return 0; } Compilación rápida con nvcc CUDA amplía C++ de distintas formas: Llamadas a los kernels <<<. >>> Variables integradas threadidx, blockidx Calificadores global device etc. Estas extensiones sólo pueden ser procesadas por archivos *.cu No por archivos *.cpp Es posible ubicar todo nuestro código en archivos *.cu Recomendado para códigos pequeños Se evita utilizar *.c ó *.cpp Compilación y enlazado utilizando nvcc nvcc test.cu o test Ejecutar desde línea de comandos./test 25
26 EJERCICIO Y si la longitud de los vectores no es múltiplo de el tamaño de bloque? Por ejemplo, bloques de tamaño 512 y vectores de longitud 10E6. Cambia el código del host: - Para asegurarte que lanzas exactamente los bloques que son necesarios Cambia el código del device: - Para asegurarte de que hay hilos en el último bloque que permanecen en estado idle. SUMA DE VECTORES Código en el host Qué ocurre si longitud vectores es N, no necesariamente múltiplo de 256? Parámetros de invocación del kernel genéricos Necesario restringir cálculo al dominio de cómputo Algunos threads deberán estar en estado de reposo (idle) //d_a, d_b y d_c son punteros a vectores en el device dim3 blockdim(256,1,1); //Bloques típicos de 128, 256, 512 dim3 griddim((n-1)/blockdim.x+1,1,1); sum_kernel<<<griddim,blockdim>>>(d_a,d_b,d_c,n); 26
27 Código en el device Qué ocurre si longitud vectores es N, no necesariamente múltiplo de 256? Necesario restringir cálculo al dominio de cómputo Algunos threads deberán estar en estado de reposo (idle) global void sum_kernel(int *A, int *B, int *C, int N) { int tidx = blockidx.x * blockdim.x + threadidx.x; //calcular índice if(tid<n){ int elema = A[tidx]; //leer elemento de A int elemb = B[tidx]; //leer elemento de B C[tidx] = elema + elemb; //calcular y escribir elemento en C } } EJERCICIO Extiende el ejemplo anterior a suma de matrices indexando los threads dentro del bloque y los bloques dentro del grid usando dos dimensiones SUMA MATRICES 27
28 Conclusiones Arquitectura GPU muy distinta de CPU Arquitecturas masivamente paralelas Incremento ámbitos de aplicación de GPUs Aumentar rendimiento aplicaciones paralelas Directivas OpenACC / OpenMP Librerías drop in Programación CUDA Curva más elevada de aprendizaje Asequible con conocimientos previos C/C++, Fortran, Programa en CUDA Código en el device CUDA Kernel Código en el host Invoca el CUDA Kernel Información adicional Página web de NVIDIA a Controladores SDK IDE Nsight Visual Studio Eclipse Tutoriales y documentación 28
29 Libros CUDA by Example by Jason Sanders and Edward Kandrot Programming Massively Parallel Processors: A Hands-on Approach by David Kirk, Wen-mei Hwu (2nd ed.) The CUDA Handbook by Nicholas Wilt CUDA Application Design and Development by Rob Farber CUDA Programming: A Developer's Guide to Parallel Computing with GPUs by Shane Cook Gracias por su atención marmar@tel.uva.es Mario Martínez-Zarzuela Febrero
Primeros pasos con CUDA. Clase 1
Primeros pasos con CUDA Clase 1 Ejemplo: suma de vectores Comencemos con un ejemplo sencillo: suma de vectores. Sean A, B y C vectores de dimensión N, la suma se define como: C = A + B donde C i = A i
Más detallesINTRODUCCIÓN A LA PROGRAMACIÓN EN CUDA. Francisco Javier Hernández López
INTRODUCCIÓN A LA PROGRAMACIÓN EN CUDA Francisco Javier Hernández López http://www.cimat.mx/~fcoj23 Guanajuato, Gto. Noviembre de 2012 Introducción a la Programación en CUDA 2 Qué es el Cómputo Paralelo
Más detallesSUMA de Vectores: Hands-on
SUMA de Vectores: Hands-on Clase X http://fisica.cab.cnea.gov.ar/gpgpu/index.php/en/icnpg/clases Algunas preguntas practicas (1) Que pasa si los vectores a sumar son muy grandes? (2) Como saber en que
Más detallesCUDA Overview and Programming model
Departamento de Ciencias de la computación Universidad de Chile Modelado en 3D y sus Aplicaciones en Realidad Virtual CC68W CUDA Overview and Programming model Student: Juan Silva Professor: Dr. Wolfram
Más detallesGPU-Ejemplo CUDA. Carlos García Sánchez
Carlos García Sánchez 1 2 Contenidos Motivación GPU vs. CPU GPU vs. Vectoriales CUDA Sintaxis Ejemplo 2 3 Motivación Computación altas prestaciones: www.top500.org 1º: Titan (300mil AMD-Opteron + 19mil
Más detallesArquitecturas GPU v. 2015
v. 2015 http://en.wikipedia.org/wiki/graphics_processing_unit http://en.wikipedia.org/wiki/stream_processing http://en.wikipedia.org/wiki/general-purpose_computing_on_graphics_processing_ units http://www.nvidia.com/object/what-is-gpu-computing.html
Más detallesCÓMPUTO DE ALTO RENDIMIENTO EN MEMORIA COMPARTIDA Y PROCESADORES GRÁFICOS
CÓMPUTO DE ALTO RENDIMIENTO EN MEMORIA COMPARTIDA Y PROCESADORES GRÁFICOS Leopoldo N. Gaxiola, Juan J. Tapia Centro de Investigación y Desarrollo de Tecnología Digital Instituto Politécnico Nacional Avenida
Más detallesPROGRAMACIÓN AVANZADA DE GPUs PARA APLICACIONES CIENTÍFICAS
Grupo de Ing. Electrónica aplicada a Espacios INteligentes y TRAnsporte Área Audio-Visual PROGRAMACIÓN AVANZADA DE GPUs PARA APLICACIONES CIENTÍFICAS Torrevieja (Alicante) Del 19 al 22 de Julio Álvaro
Más detallesComputación de Propósito General en Unidades de Procesamiento Gráfico GPGPU
Computación de Propósito General en Unidades de Procesamiento Gráfico () E. Dufrechou, P. Ezzatti, M. Pedemontey J.P. Silva Clases 4 Programación Contenido Modelo de programación Introducción Programación
Más detallesArquitecturas GPU v. 2013
v. 2013 Stream Processing Similar al concepto de SIMD. Data stream procesado por kernel functions (pipelined) (no control) (local memory, no cache OJO). Data-centric model: adecuado para DSP o GPU (image,
Más detallesGPGPU Avanzado. Sistemas Complejos en Máquinas Paralelas. Esteban E. Mocskos (emocskos@dc.uba.ar) 5/6/2012
Sistemas Complejos en Máquinas Paralelas GPGPU Avanzado Esteban E. Mocskos (emocskos@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, UBA CONICET 5/6/2012 E. Mocskos (UBA CONICET) GPGPU Avanzado 5/6/2012
Más detallesComputación en procesadores gráficos
Programación con CUDA Ejercicio 8 José Antonio Martínez García Francisco M. Vázquez López Manuel Ujaldón Martínez Portada Ester Martín Garzón Universidad de Almería Arquitectura de las GPUs Contenidos
Más detallesModelo 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 detalles48 ContactoS 84, (2012)
48 ContactoS 84, 47 55 (2012) Recibido: 31 de enero de 2012. Aceptado: 03 de mayo de 2012. Resumen En los últimos años la tecnología de las unidades de procesamiento de gráficos (GPU-Graphics Processsing
Más detallesUNIVERSIDAD DE BURGOS Área de Tecnología Electrónica INTRODUCCIÓN A LA PROGRAMACIÓN EN CUDA
UNIVERSIDAD DE BURGOS Área de Tecnología Electrónica INTRODUCCIÓN A LA PROGRAMACIÓN EN CUDA César Represa Pérez José María Cámara Nebreda Pedro Luis Sánchez Ortega Introducción a la programación en CUDA
Más detallesInside Kepler. I. Presentación de la arquitectura. Índice de contenidos [25 diapositivas] Kepler, Johannes ( )
Índice de contenidos [25 diapositivas] Inside Manuel Ujaldón Nvidia CUDA Fellow Dpto. Arquitectura de Computadores Universidad de Málaga 1. Presentación de la arquitectura [3 diapositivas] 2. Los cores
Más detallesLibrería Thrust. Clase 4. http://fisica.cab.cnea.gov.ar/gpgpu/index.php/en/icnpg/clases
Librería Thrust Clase 4 http://fisica.cab.cnea.gov.ar/gpgpu/index.php/en/icnpg/clases Hasta aquí... CUDA C/C++ Control de bajo nivel del mapeo al hardware Desarrollo de algoritmos de alta performance.
Más detallesDESARROLLO DE APLICACIONES EN CUDA
DESARROLLO DE APLICACIONES EN CUDA Curso 2014 / 15 Procesadores Gráficos y Aplicaciones en Tiempo Real Alberto Sánchez GMRV 2005-2015 1/30 Contenidos Introducción Debugging Profiling Streams Diseño de
Más detallesIntroducción a OpenGL Shading Language (GLSL)
a OpenGL Shading Language (GLSL) November 20, 2007 a OpenGL Shading Language (GLSL) Fixed Pipeline Programmable Pipeline Características de GLSL Por qué escribir un Shader? Vertex Processor Fragment Processor
Más detallesComputación en procesadores gráficos
Programación con CUDA José Antonio Martínez García Francisco M. Vázquez López Manuel Ujaldón Martínez Portada Ester Martín Garzón Universidad de Almería Arquitectura de las GPUs Contenidos Modelo de programación
Más detallesSegunda Parte: TECNOLOGÍA CUDA
Segunda Parte: (compute unified device architecture) 12 I. CUDA CUDA es una arquitectura de cálculo paralelo de NVIDIA que aprovecha la potencia de la GPU (unidad de procesamiento gráfico) para proporcionar
Más detallesFrancisco Javier Hernández López
Francisco Javier Hernández López fcoj23@cimat.mx http://www.cimat.mx/~fcoj23 Ejecución de más de un cómputo (cálculo) al mismo tiempo o en paralelo, utilizando más de un procesador. Arquitecturas que hay
Más detallesSeminario II: Introducción a la Computación GPU
Seminario II: Introducción a la Computación GPU CONTENIDO Introducción Evolución CPUs-Evolución GPUs Evolución sistemas HPC Tecnologías GPGPU Problemática: Programación paralela en clústers heterogéneos
Más detallesParalelización de algoritmos para el procesado de imágenes de teledetección
UNIVERSIDAD DE ALCALÁ Escuela Politécnica Superior INGENIERÍA DE TELECOMUNICACIÓN Trabajo Fin de Carrera Paralelización de algoritmos para el procesado de imágenes de teledetección Alberto Monescillo Álvarez
Más detallesINTRODUCCIÓN A LA COMPUTACIÓN PARALELA CON GPUS
INTRODUCCIÓN A LA COMPUTACIÓN PARALELA CON GPUS Sergio Orts Escolano sorts@dtic.ua.es Vicente Morell Giménez vmorell@dccia.ua.es Universidad de Alicante Departamento de tecnología informática y computación
Más detallesNVIDIA CUDA RESEARCH CENTER
NVIDIA CRC Universidad Sevilla 1 NVIDIA CUDA RESEARCH CENTER APLICACIONES Y OPORTUNIDADES Miguel Ángel Martínez del Amor Research Group on Natural Computing (RGNC) Universidad de Sevilla NVIDIA CRC Universidad
Más detallesComputación de Propósito General en Unidades de Procesamiento Gráfico GPGPU
Computación de Propósito General en Unidades de Procesamiento Gráfico () E. Dufrechou, P. Ezzatti M. Pedemonte Práctico Programación con CUDA Práctica 0: Ejecución del ejemplo visto en teórico (suma de
Más detallesComputación Heterogénea con OpenCL. Flores, Facundo UNSA Fac. Cs. Exactas
Computación Heterogénea con Flores, Facundo UNSA Fac. Cs. Exactas Introducción COMPUTACION HETEROGENEA Introducción COMPUTACION HETEROGENEA Qué es? Introducción COMPUTACION HETEROGENEA Qué es? Un poco
Más detallesKepler. 1. Presentación de la arquitectura. Índice de contenidos [25 diapositivas] Kepler, Johannes (1571-1630)
Índice de contenidos [25 diapositivas] Manuel Ujaldón Nvidia CUDA Fellow Dpto. Arquitectura de Computadores Universidad de Málaga 1. Presentación de la arquitectura [3] 2. Los cores y su organización [7]
Más detallesMemorias, opciones del compilador y otras yerbas. Clase 3
Memorias, opciones del compilador y otras yerbas Clase 3 Memorias en CUDA Grid CUDA ofrece distintas memorias con distintas características. Block (0, 0) Shared Memory Block (1, 0) Shared Memory registros
Más detallescuevogenet Paralelización en CUDA de la Dinámica Evolutiva de Redes Génicas Dirigido por: Fernando Díaz del Río José Luis Guisado Lizar
cuevogenet Paralelización en CUDA de la Dinámica Evolutiva de Redes Génicas Realizado por: Raúl García Calvo Dirigido por: Fernando Díaz del Río José Luis Guisado Lizar Objetivos Implementar un algoritmo
Más detallesArquitecturas y programación de procesadores gráficos. Nicolás Guil Mata Dpto. de Arquitectura de Computadores Universidad de Málaga
Arquitecturas y programación de procesadores gráficos Dpto. de Arquitectura de Computadores Universidad de Málaga Indice Arquitectura de las GPUs Arquitectura unificada Nvidia: GT200 Diagrama de bloques
Más detallesComputación de Propósito General en Unidades de Procesamiento Gráfico GPGPU. Clase 5 Programación Avanzada y Optimización
Computación de Propósito General en Unidades de Procesamiento Gráfico () P. Ezzatti, M. Pedemontey E. Dufrechou Clase 5 Programación Avanzada y Optimización Contenido Memoria compartida Conflicto de bancos
Más detallesArquitectura de aceleradores. Carlos Bederián IFEG CONICET GPGPU Computing Group FaMAF UNC bc@famaf.unc.edu.ar
Arquitectura de aceleradores Carlos Bederián IFEG CONICET GPGPU Computing Group FaMAF UNC bc@famaf.unc.edu.ar Contenidos Cómo llegamos hasta acá Qué hay ahora Qué hace Cómo lo uso Hacia dónde parece que
Más detallesPAP - Programación y Arquitecturas Paralelas
Unidad responsable: 270 - FIB - Facultad de Informática de Barcelona Unidad que imparte: 701 - AC - Departamento de Arquitectura de Computadores Curso: Titulación: 2016 GRADO EN INGENIERÍA INFORMÁTICA
Más detallesSistemas Complejos en Máquinas Paralelas
Sistemas Complejos en Máquinas Paralelas Clase 1: OpenMP Francisco García Eijó Departamento de Computación - FCEyN UBA 15 de Mayo del 2012 Memoria compartida Las mas conocidas son las máquinas tipo Symmetric
Más detallesProgramación de altas prestaciones utilizando GPUs
Programación de altas prestaciones utilizando GPUs //Sintaxis deprecated glbegin(gl_quads); { gltexcoord2f(0, 0); gltexcoord2f(1, 0); gltexcoord2f(1, 1); gltexcoord2f(0, 1); } glend(); Aplicación 3D Llamadas
Más detallesBloque IV. Prácticas de programación en CUDA. David Miraut Marcos García Ricardo Suárez
Bloque IV Prácticas de programación en CUDA David Miraut Marcos García Ricardo Suárez Control de flujo Situaciones no tratadas Claves con tamaños diferentes. Cada Wrap debería acceder a claves del mismo
Más detallesProcesamiento Paralelo
Procesamiento Paralelo OpenCL - Introducción Javier Iparraguirre Universidad Tecnológica Nacional, Facultad Regional Bahía Blanca 11 de Abril 461, Bahía Blanca, Argentina jiparraguirre@frbb.utn.edu.ar
Más detallesIntroducción a la programación de códigos paralelos con CUDA y su ejecución en un GPU multi-hilos
Introducción a la programación de códigos paralelos con CUDA y su ejecución en un GPU multi-hilos Gerardo A. Laguna-Sánchez *, Mauricio Olguín-Carbajal **, Ricardo Barrón-Fernández *** Recibido: 02 de
Más detallesAnalista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior MEMORIA DINAMICA
MEMORIA DINAMICA 1 Introducción La allocación dinámica de memoria en C trata de la solicitud de memoria en tiempo de ejecución La memoria se administra estática, automática o dinámicamente - Las variables
Más detallesComputación de Propósito General en Unidades de Procesamiento Gráfico GPGPU
Computación de Propósito General en Unidades de Procesamiento Gráfico () R. Bayá, E. Dufrechou, P. Ezzattiy M. Pedemonte Clase 1 Introducción Contenido Un poco de historia El pipeline gráfico Tarjetas
Más detallesSistemas Operativos. Procesos
Sistemas Operativos Procesos Agenda Proceso. Definición de proceso. Contador de programa. Memoria de los procesos. Estados de los procesos. Transiciones entre los estados. Bloque descriptor de proceso
Más detallesComputación de Propósito General en Unidades de Procesamiento Gráfico GPGPU. Clase 1 Introducción
Computación de Propósito General en Unidades de Procesamiento Gráfico () P. Ezzatti, M. Pedemontey E. Dufrechou Clase 1 Introducción Contenido Un poco de historia El pipeline gráfico Tarjetas programables
Más detallesFLAG/C. Una API para computación matricial sobre GPUs. M. Jesús Zafont Alberto Martín Francisco Igual Enrique S. Quintana-Ortí
FLAG/C Una API para computación matricial sobre GPUs M. Jesús Zafont Alberto Martín Francisco Igual Enrique S. Quintana-Ortí High Performance Computing & Architectures Group Universitat Jaume I de Castellón
Más detallesTile64 Many-Core. vs. Intel Xeon Multi-Core
Tile64 Many-Core vs. Intel Xeon Multi-Core Comparación del Rendimiento en Bioinformática Myriam Kurtz Francisco J. Esteban Pilar Hernández Juan Antonio Caballero Antonio Guevara Gabriel Dorado Sergio Gálvez
Más detallesCDI Arquitecturas que soportan la concurrencia. granularidad
granularidad Se suele distinguir concurrencia de grano fino es decir, se aprovecha de la ejecución de operaciones concurrentes a nivel del procesador (hardware) a grano grueso es decir, se aprovecha de
Más detallesFUNDAMENTOS DE COMPUTACIÓN PARA CIENTÍFICOS. CNCA Abril 2013
FUNDAMENTOS DE COMPUTACIÓN PARA CIENTÍFICOS CNCA Abril 2013 6. COMPUTACIÓN DE ALTO RENDIMIENTO Ricardo Román DEFINICIÓN High Performance Computing - Computación de Alto Rendimiento Técnicas, investigación
Más detallesUtilización de la programación paralela en procesadores gráficos para el cálculo científico.
Utilización de la programación paralela en procesadores gráficos para el cálculo científico. EMNO 2013 Rolando E. Rodríguez Fernández Medicina Computacional, Instituto de Nefrología. y Facultad de Física,
Más detallesFunciones y paso de parámetros
Unidad Didáctica 24 Funciones y paso de parámetros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.0 Índice Consideraciones sobre funciones Estructura de una función
Más detallesMAGMA. Matrix Algebra on GPU and Multicore Architecture. Ginés David Guerrero Hernández
PLASMA GPU MAGMA Rendimiento Trabajo Futuro MAGMA Matrix Algebra on GPU and Multicore Architecture Ginés David Guerrero Hernández gines.guerrero@ditec.um.es Grupo de Arquitecturas y Computación Paralela
Más detallesGPU - Procesadores de vértices
GPU - Procesadores de vértices Sistemas Gráficos 66.71 UBA 2014 Sistemas Gráficos 66.71 (UBA) GPU - Procesadores de vértices 2014 1 / 28 Índice 1 Arquitectura de la GPU Vertex Shaders Actividad 1 Actividad
Más detallesLenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III
República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III Lenguaje C 1 Puntos previos Los códigos fuentes generados en C requieren ser compilados
Más detallesFUNDAMENTOS DE COMPUTACION INVESTIGACION PROCESADORES DIANA CARRIÓN DEL VALLE DOCENTE: JOHANNA NAVARRO ESPINOSA TRIMESTRE II
FUNDAMENTOS DE COMPUTACION INVESTIGACION PROCESADORES DIANA CARRIÓN DEL VALLE DOCENTE: JOHANNA NAVARRO ESPINOSA TRIMESTRE II 2013 Características principales de la arquitectura del procesador AMD Phenom
Más detallesProgramación de GPUs con CUDA
Programación de GPUs con CUDA Alvaro Cuno 23/01/2010 1 Agenda GPUs Cuda Cuda + OpenGL 2 GPUs (Graphics Processing Units) 3 Supercomputadores Mapa de los 100 supercomputadores Sudamérica: posiciones 306
Más detalles1 Primitivas básicas de OpenMP
1 Primitivas básicas de OpenMP Consultar la página oficial de la plataforma OpenMP http://www.openmp.org/drupal/ Pragmas Es una directiva para el compilador que permite la definición de nuevas directivas
Más detallesTema 6: Memoria dinámica
: Programación 2 Curso 2013-2014 Índice 1 2 3 El tamaño es fijo y se conoce al implementar el programa Declaración de variables int i=0; char c; float vf[3]={1.0, 2.0, 3.0}; i c vf[0] vf[1] vf[2] 0 1.0
Más detallesSISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 9 Departamento de Arquitectura y Tecnología de Computadores Universidad de Sevilla
SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 9 Departamento de Arquitectura y Tecnología de Computadores Universidad de Sevilla PROGRAMACIÓN DE COMPUTADORES DE MEMORIA DISTRIBUIDA USANDO MPI. PREPARACIÓN
Más detallesMúltiples GPU (y otras chauchas)
Múltiples GPU (y otras chauchas) Clase 16, 21/11/2013 http://fisica.cab.cnea.gov.ar/gpgpu/index.php/en/icnpg/clases Carlos Bederián bc@famaf.unc.edu.ar IFEG-CONICET, FaMAF-UNC Motivación No desperdiciar
Más detallesProgramando la GPU con CUDA RIO 2014 Río Cuarto (Argentina), 17 y 18 de Febrero, 2014. Agradecimientos. Prerrequisitos para este tutorial
Programando la GPU con CUDA RIO 2014 Río Cuarto (Argentina), 17 y 18 de Febrero, 2014 Manuel Ujaldon Nvidia CUDA Fellow Profesor del Dpto. de Arquitectura de Computadores. Universidad de Málaga (España).
Más detallesHPC y GPUs. GPGPU y software libre. Emilio J. Padrón González DE UNIVERSIDADE DA CORUNA GAC.UDC.ES
HPC y GPUs GPGPU y software libre Emilio J. Padrón González DE UNIVERSIDADE DA CORUNA GAC.UDC.ES Workshop HPC y Software Libre Ourense, Octubre 2011 Contenidos 1 Introducción Evolución CPUs Evolución GPUs
Más detallesJ. Nicolás Bustos Pieper. Microprocesadores en. Microprocesadores para Comunicaciones Curso 2009/2010 5º E.T.S.I.T. - ULPGC
Microprocesadores en Consolas Microprocesadores para Comunicaciones Curso 2009/2010 5º E.T.S.I.T. - ULPGC 1 Índice Introducción... 3 Xbox 360... 3 PlayStation 3... 5 Wii... 7 Comparativa... 9 Referencias...10
Más detallesProgramación en Intel Xeon Phi
Programación en Intel Xeon Phi David Corbalán Navarro Máster en Nuevas Tecnologías de la Informática Índice Introducción al paralelismo Niveles de paralelismo Paradigmas de programación paralela Manycores
Más detallesTema 12: El sistema operativo y los procesos
Tema 12: El sistema operativo y los procesos Solicitado: Tarea 06 Arquitecturas de una computadora y el funcionamiento del software M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx
Más detallesDescubriendo Kepler. 1. Presentación de la arquitectura. Agradecimientos. Indice de contenidos [46 diapositivas]
Agradecimientos Descubriendo Kepler Manuel Ujaldón Nvidia CUDA Fellow Dpto. Arquitectura de Computadores Universidad de Málaga A los ingenieros de Nvidia, por compartir ideas, material, diagramas, presentaciones,...
Más detallesTEMA 1: EJECUCIÓN PARALELA: FUNDAMENTOS(I)
Grupo de Arquitectura de Computadores, Comunicaciones y Sistemas ARQUITECTURA DE COMPUTADORES II AUTORES: David Expósito Singh Florin Isaila Daniel Higuero Alonso-Mardones Javier García Blas Borja Bergua
Más detallesTEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.
Tema 2. TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL. PARTE : VARIABLES, OPERADORES Y CONSTANTES.. INTRODUCCIÓN AL LENGUAJE C 2. PROGRAMAS BÁSICOS EN LENGUAJE C 3. DATOS EN LENGUAJE C
Más detallesExamen Teórico (1/3 de la nota final)
Examen Teórico (1/3 de la nota final) 105000016 - Programación para Sistemas Grado en Ingeniería Informática (2009) Lenguajes y Sistemas Informáticos e Ingeniería de Software Facultad de Informática Universidad
Más detallesTaller: Introducción a GPU's y Programación CUDA para HPC
Taller: Introducción a GPU's y Programación CUDA para HPC Amilcar Meneses Viveros Departamento de Computación CINVESTAV-IPN / LUFAC Computación Julio 2011 CONTENIDO I.- INTRODUCCION A GPU's Y CUDA 1.1
Más detallesProgramación. Test Autoevaluación Tema 3
Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.
Más detallesCLUSTER FING: ARQUITECTURA Y APLICACIONES
CLUSTER FING: ARQUITECTURA Y APLICACIONES Gerardo Ares, Pablo Ezzatti Centro de Cálculo, Instituto de Computación FACULTAD DE INGENIERÍA, UNIVERSIDAD DE LA REPÚBLICA, URUGUAY CONTENIDO Introducción Conceptos
Más detallesPARTE II PROGRAMACION CON THREADS EN C
PARTE II PROGRAMACION CON THREADS EN C II.1 INTRODUCCION Una librería o paquete de threads permite escribir programas con varios puntos simultáneos de ejecución, sincronizados a través de memoria compartida.
Más detallesCAPACIDAD COMPUTACIONAL: Tabla 1: Resumen de algunas características de GPUs CUDA.
IV. CAPACIDAD COMPUTACIONAL: Debido al uso de la tecnología CUDA en computación numérica, se han definido una serie de capacidades que ofrecen más información acerca del rendimiento de los dispositivos
Más detallesProgramando con memoria unificada. Contenidos [15 diapositivas] Aportaciones de la memoria unificada. I. Descripción
Programando con memoria unificada IX Curso de Verano de la UMA Programación de GPUs con CUDA Contenidos [15 diapositivas] Málaga, del 15 al 24 de Julio, 2015 1. Descripción [5] 2. Ejemplos [8] 3. Observaciones
Más detallesProgramación I Teoría II.
Programación I Teoría II http://proguno.unsl.edu.ar proguno@unsl.edu.ar MODULARIDAD FUNCIONES EN C Modularidad Principio para resolución de problemas: Dividir para reinar Modularidad Módulo Función Procedimiento
Más detallesMPP. MIMD Computador Masivamente Paralelo
MPP MIMD Computador Masivamente Paralelo BLUE GENE/Q Introducción Se trata del tercer representante de una serie que comenzó con el Blue Gene/L y continuó con el Blue Gene/P. Son máquinas desarrolladas
Más detallesElementos de un programa en C
Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución
Más detallesGENERACIÓN DE IMÁGENES VOLUMÉTRICAS DE DATOS BIOMÉDICOS EN TIEMPO REAL
Programa Oficial de Postgrado en Ingenierías Transversales Máster en Ingeniería Biomédica Proyecto Fin de Máster GENERACIÓN DE IMÁGENES VOLUMÉTRICAS DE DATOS BIOMÉDICOS EN TIEMPO REAL Autor: D. David Anaya
Más detallesProgramando la GPU con CUDA
Programando la GPU con CUDA Curso en el Dpto. de Matemáticas e Informática. UIB. 23 al 25 de Junio, 2014. Manuel Ujaldon Nvidia CUDA Fellow Profesor Titular del Dpto. de Arquitectura de Computadores. Universidad
Más detallesENTRADA-SALIDA. 2. Dispositivos de Carácter: Envía o recibe un flujo de caracteres No es direccionable, no tiene operación de búsqueda
Tipos de Dispositivos ENTRADA-SALIDA 1. Dispositivos de Bloque: Almacena información en bloques de tamaño fijo (512b hasta 32Kb) Se puede leer o escribir un bloque en forma independiente 2. Dispositivos
Más detallesProgramación Híbrida e Introducción a la Programación de GPUs
Programación Híbrida e Introducción a la Programación de GPUs Fernando Robles Morales Instituto Nacional de Medicina Genómica Enrique Cruz Martínez Universidad Autónoma de la ciudad de México CONTENIDO
Más detallesUniversidad Complutense de Madrid FACULTAD DE INFORMÁTICA
Universidad Complutense de Madrid FACULTAD DE INFORMÁTICA INGENIERÍA EN INFORMÁTICA SISTEMAS INFORMÁTICOS ALGORITMOS PARA GRAFOS Y PROGRAMACIÓN DE PROPÓSITO GENERAL EN CUDA Ezequiel Denegri Guillermo Frontera
Más detallesEjemplos de optimización para Kepler. 1. Balanceo dinámico de la carga. Contenidos de la charla [18 diapositivas]
Ejemplos de optimización para Kepler Manuel Ujaldón Nvidia CUDA Fellow Dpto. Arquitectura de Computadores Universidad de Málaga Contenidos de la charla [18 diapositivas] 1. Balanceo dinámico de la carga.
Más detallesEjercicios de jerarquía de memoria
Ejercicios de jerarquía de memoria J. Daniel García Sánchez (coordinador) David Expósito Singh Javier García Blas Óscar Pérez Alonso J. Manuel Pérez Lobato Arquitectura de Computadores Grupo ARCOS Departamento
Más detallesCómputo paralelo con openmp y C
Cómputo paralelo con openmp y C Sergio Ivvan Valdez Peña Guanajuato, México. 13 de Marzo de 2012 Sergio Ivvan Valdez Peña Cómputo Guanajuato, paralelo conméxico. openmp y () C 13 de Marzo de 2012 1 / 27
Más detallesUSO DE TECNOLOGÍAS GPU PARA EL DESARROLLO DE ALGORITMOS CRIPTOGRÁFICOS
PONTIFICIA UNIVERSIDAD CATÓLICA DE VALPARAÍSO FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA INFORMÁTICA USO DE TECNOLOGÍAS GPU PARA EL DESARROLLO DE ALGORITMOS CRIPTOGRÁFICOS DANIEL ALEJANDRO TUREO MUÑOZ
Más detallesTIPOS DE DATOS BASICOS EN LENGUAJE C
TIPOS DE DATOS BASICOS EN LENGUAJE C TIPO char int float double void ANCHO EN BIT 64 0 TIPOS DE DATOS RANGO EN PC -12 a 127 3.4E-3 a 3.4E+3 1.7E-30 a 1.7E+30 sin valores TIPO ANCHO EN BIT RANGO EN PC char
Más detallesArquitectura de Computadores Problemas (hoja 4). Curso
Arquitectura de Computadores Problemas (hoja 4). Curso 2006-07 1. Sea un computador superescalar similar a la versión Tomasulo del DLX capaz de lanzar a ejecución dos instrucciones independientes por ciclo
Más detallesMemoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez
Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez 1. PUNTEROS 2. MEMORIA DINÁMICA 2 1. PUNTEROS 3 Qué es un puntero? Un tipo de variable cuyo valor es la dirección de memoria de otra variable.
Más detallesMemoria Dinámica en C++
Memoria Dinámica en C++ Algoritmos y Estructuras de Datos II DC-FCEyN-UBA 26 de Agosto de 2015 AED2 (DC-FCEyN-UBA) Memoria Dinámica en C++ 26 de Agosto de 2015 1 / 46 Repaso: Qué es una variable? Matemática:
Más detallesIntroducción a la Programación en C Funciones
Christopher Expósito-Izquierdo cexposit@ull.edu.es Airam Expósito-Márquez aexposim@ull.edu.es Israel López-Plata ilopezpl@ull.edu.es Belén Melián-Batista mbmelian@ull.edu.es José Marcos Moreno-Vega jmmoreno@ull.edu.es
Más detallesTécnicas de paralelización de código para robots basados en emociones
1 UNIVERSIDAD POLITECNICA DE VALENCIA G R A D O E N I N G E N I E R Í A I N F O R M Á T I C A Técnicas de paralelización de código para robots basados en emociones TRABAJO FINAL DE GRADO Autor: Francisco
Más detallesESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo
ESTRUCTURA DE DATOS Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo DATOS ESTÁTICOS Su tamaño y forma es constante durante la ejecución
Más detallesVelocidades Típicas de transferencia en Dispositivos I/O
Entradas Salidas Velocidades Típicas de transferencia en Dispositivos I/O Entradas/Salidas: Problemas Amplia variedad de periféricos Entrega de diferentes cantidades de datos Diferentes velocidades Variedad
Más detallesTema 05: Elementos de un programa en C
Tema 05: Elementos de un programa en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1
Más detallesKepler. Contenidos de la charla. Kepler, Johannes ( ) 1. Presentación de la arquitectura
Kepler RIO 2014 Río Cuarto, 20 de Febrero, 2014 Manuel Ujaldón Martínez Dpto. Arquitectura de Computadores. Univ. Málaga. NVIDIA CUDA Fellow. Contenidos de la charla 1. Presentación de la arquitectura
Más detallesNociones básicas de computación paralela
Nociones básicas de computación paralela Javier Cuenca 1, Domingo Giménez 2 1 Departamento de Ingeniería y Tecnología de Computadores Universidad de Murcia 2 Departamento de Informática y Sistemas Universidad
Más detallesEs un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos.
Lenguaje C Un poco de historia C es un lenguaje de propósito general, es decir, se pueden desarrollar aplicaciones de diversas áreas. Dentro de sus principales características podemos mencionar que: Es
Más detallesPunteros. Índice. 1. Qué es un puntero y por que son importantes.
Punteros Índice 1. Qué es un puntero y por que son importantes. 2. Punteros a tipos básicos. 3. Punteros sin tipo. 4. Memoria dinámica. 5. Punteros a estructuras. 6. Punteros a matrices. 7. Punteros a
Más detallesIntroducción a C++ Índice
Introducción a C++ 1. 2. 3. 4. 5. 6. Índice 1. Diferencias entre C y C++. 2. Diferencias entre C++ y Java. 3. Ejemplos. 4. Funciones. 5. Memoria dinámica 6. Librería de funciones. 1 1. Diferencias entre
Más detalles