ANÁLISIS DEL CÓDIGO MATLAB DE PARTIDA EN CPU

Documentos relacionados
PRUEBAS, RESULTADOS y CONCLUSIONES

PROGRAMACIÓN EN EL ENTORNO CUDA EN APLICACIONES DE MECÁNICA COMPUTACIONAL. PRUEBAS, RESULTADOS Y CONCLUSIONES CONCLUSIONES:

MATRICES DISPERSAS (Sparse) 1. FORMATO DE ALMACENAMIENTO DE MATRICES EN ARCHIVO MATRIX MARKET (MM)

Antonio Carrillo Ledesma Ismael Herrera Revilla

Métodos en diferencias para problemas de contorno

Código Bloque II: GENERACIÓN DE LA Matriz DE RIGIDEZ A

coord(i,j): matriz que contiene las coordenadas x (coord(1,j)) e y (coord(2,j)) de cada uno de los nodos. j: numeración global de los nodos.

FEM para Mecánica 3D. Miguel Ángel Otaduy. Animación Avanzada 7 de Marzo de 2014

MÉTODO DE DIFERENCIAS FINITAS (FDM)

Modelo de reactor cilíndrico

Método de diferencias finitas para ecuaciones diferenciales parciales elípticas. (Parte II)

Práctica 1 Parte 2: Masa-Muelle y ODEs (Bloque OPCIONAL) (Asignación 19 de Febrero; Entrega 25 de Febrero a las 23:59)

Universidad Nacional Autónoma de México Instituto de Geofísica

Diferencias finitas aplicadas a ecuaciones en derivadas parciales

Partial Differential Equation PDE Toolbox

El método de la potencia para el cálculo del autovalor dominante de una matriz se basa en el siguiente teorema.

Dinámica de Fluidos Computacional: DFC Discretización temporal. Versión 0.1.0

Ecuaciones en Derivadas Parciales y Análisis Numérico

Solución de una clase simple de problemas de frontera usando un esquema más preciso con diferencias finitas

Tareas de matrices especiales

Funciones en MATLAB. Prof. Saúl. Buitrago y Oswaldo Jiménez

φ(x) u xx +u yy =0 u=0 φ(x) = 100sinh(pi/10)sin(pi x/10)/sinh(pi) ψ (y) = 100sin(pi/10)sinh(pi y/10)/sinh(pi)

Minimización De Pérdidas En Media Tensión Con Intervención De Generadores Dispersos En El Control ANEXO I: PROGRAMA GAMS

cuevogenet 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

SOLUCIÓN DE UN SISTEMA LINEAL DE ECUACIONES

TEMA 9: TIPOS DE PROBLEMAS DE VALOR FRONTERA EN MÁS DE UNA DIMENSIÓN ESPACIAL EN INGENIERÍA QUÍMICA

Programación: Sistemas unitriangulares inferiores

1. EJEMPLO Enunciado. 1.2 Convenciones generales

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

6 ARCHIVOS DXF 12 Formato general

La intersección con el eje y ocurre a la altura 1 y corresponde al término constante b. Por lo tanto,

Introducción a la resolución numérica de problemas para ecuaciones en derivadas parciales (I)

ETAPAS BÁSICAS DEL ANÁLISIS MATRICIAL DE UN SISTEMA DISCRETO. Mercedes López Salinas

Capítulo V. Introducción al análisis por el método de elemento finito

4. Método del elemento finito (formulación de desplazamientos)

2.1.- ALTERNATIVAS DE ANSYS PARA EL MODELADO DEL TÚNEL Y DEL TERRENO

Solvers con matrices ralas Parte I: Matrices ralas, gradiente conjugado, gradiente conjugado + precondicionador Jacobi

Ecuaciones en Derivadas Parciales y Análisis Numérico

Herramientas computacionales para la matemática MATLAB: Cómo guardar el trabajo?

4 MÉTODOS DIRECTOS PARA RESOLVER SISTEMAS DE ECUACIONES LINEALES

Matrices dispersas. Miguel Vargas-Félix. CIMAT, August 13, /34

Solución de la ecuación de Stokes

INTRODUCCIÓN AL MÉTODO DEL ELEMENTO FINITO

PROYECTOS DE ASIGNATURA

G E O M E T R Í A M É T R I C A P L A N A

Preparación del segundo examen de recuperación de MATEMÁTICAS I DE 2º BACHILLERATO Curso Segundo examen DEPARTAMENTO DE MATEMÁTICAS

Sesión 2. Multifísica en Elmer (III)

Algorítmica y Lenguajes de Programación. Eficiencia y notación asintótica (i)

Ideas de proyectos para alumnos de Análisis de Estructuras I

CENTRO INTERNACIONAL DE MÉTODOS NUMÉRICOS EN INGENIERÍA CALTEP Ejemplos de Validación Caso Bidimensional II. E. Sala F.

67.58 INTRODUCCIÓN AL MÉTODO DE LOS ELEMENTOS FINITOS

Modelo de Elevación Digital

Cursada Segundo Cuatrimestre 2012 Guía de Trabajos Prácticos Nro. 1

Módulo 6 Simulación Formulación Implementación MEF v Prof. Dr. José L Oliver

CAPÍTULO 5 ANÁLISIS DE ELEMENTO FINITO DE LA CARROCERÍA. Algor, es un software el cual es desarrollado por la compañía Algor Coorporation, la

INTRODUCCIÓN AL ALGEBRA LINEAL

PUENTES II PRÁCTICA Nº6. PUENTES COLGANTES

Agosto-Diciembre 2017 Dr. Servando López Aguayo

Computadora y Sistema Operativo

UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO. la Facultad de Ingeniería

Unidad 8. Geometría analítica. BACHILLERATO Matemáticas I

Curso de Elemento Finito con el software ALGOR

3. Ecuación de difusión

MATEMÁTICAS I Unidad 5. GEOMETRÍA ANALÍTICA. Ed. Santillana. SOLUCIONES

SELECTIVIDAD ANDALUCÍA ARAGÓN ASTURIAS. b) Calcule el área del recinto limitado por la gráfica de f(x), el eje de abcisas y la recta x=2.

Práctica 0: Introducción a Matlab. Matlab es un acrónimo: MATrix LABoratory

FUNDAMENTOS DE INFORMÁTICA Convocatoria de Febrero. EXAMEN DE TEORÍA T1 curso 2002 / 2003 TEST. Nombre DNI Grupo INSTRUCCIONES

UNIVERSIDADES DE ANDALUCÍA PRUEBA DE ACCESO A LA UNIVERSIDAD

EVALUACIÓN DEL COMPORTAMIENTO ESTRUCTURAL DE SOPORTES A BASE DE PLACAS DE ASIENTO Y PERNOS DE ANCLAJE, MEDIANTE ELEMENTO FINITO.

Curso Hoja 1. Análisis de errores

Guión de prácticas de los Temas 3 y 4 de Cálculo Numérico

Rancagua, Agosto 2009

UNIVERSIDADES DE ANDALUCÍA PRUEBA DE ACCESO A LA UNIVERSIDAD

Sistemas de Ecuaciones. Lineales I

1.1) Escribir la solución de elementos nitos del problema. en (0, 1) u (0) = u (1) = 0. con el valor estimado por la fórmula del error.

EXAMEN DE MATRICES Y DETERMINANTES

Modelación del Comportamiento Hidrodinámico del agua subterránea de la zona comprendida entre Carbó, Pesqueira y Zamora, Sonora.

Prácticas Campos Electromagnéticos

EJERCICIOS DE LOS EXÁMENES DE ÁLGEBRA Y GEOMETRÍA MATEMÁTICAS II CURSO

MATEMATICAS. BC2 TEMA 6: Rectas y Planos en R 3

TEMA 6. ECUACIONES DE LA RECTA

Sesión 7. Cálculo Paralelo en Elmer

Índice Pág. 1 ANEXO D 3 MODELOS DE LOS PUNTALES ANALIZADOS IMPLEMENTADOS EN CUFSM 3

REDES NEURONALES ADAPTABLES

Matemáticas II Bachillerato Ciencias y Tecnología 2º Curso ESPACIO AFÍN Introducción Ecuaciones de la recta...

UNIVERSIDAD COMPLUTENSE DE MADRID

GEOMETRÍA EN EL PLANO. Dos rectas perpendiculares tienen las pendientes inversas y de signo contrario. Calculamos la pendiente de la recta dada:

Tema II. Unidad de memoria

TRAZADO DE LÍNEAS EQUIPOTENCIALES

TRABAJO PRÁCTICO 4 PROBLEMA DE ELASTICIDAD LINEAL

ESTUDIO Y ANÁLISIS DEL MOVIMIENTO DE DOS CUERPOS DESDE DISTINTOS SISTEMAS DE REFERENCIA INERCIALES

Matrices. José Vicente Romero Bauset. ETSIT-curso 2009/2010. José Vicente Romero Bauset Tema 1.- Matrices. 1

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA COORDINACIÓN DE FORMACIÓN BÁSICA COORDINACIÓN DE FORMACIÓN PROFESIONAL Y VINCULACIÓN UNIVERSITARIA

Procesos estocásticos Cadenas de Márkov

Relación de Ejercicios. Programación Paralela 4º de Grado en Ingeniería Informática.

Unidad 3: Resolución de ecuaciones

Tema 7. Mejora del rendimiento: introducción a la segmentación y a las arquitecturas paralelas

UNIVERSIDADES PÚBLICAS DE LA COMUNIDAD DE MADRID. PRUEBAS DE ACCESO A ESTUDIOS UNIVERSITARIOS (LOGSE) MODELO DE EXAMEN (Curso )

Algoritmos paralelos para la Multiplicación de Matrices

Transcripción:

II. ANÁLISIS DEL CÓDIGO MATLAB DE PARTIDA EN CPU Como punto de partida se escogió un código MATLAB que debía ser adaptado a CUDA con el objetivo de explorar la nueva tecnología y realizar comparaciones. Este código había sido probado y su corrección había sido comprobada. Sería por tanto el patrón elegido para comparar y medir la eficiencia de CUDA. El código tiene por objeto resolver la ecuación del calor mediante el Método de los Elementos Finitos. 1. MALLADO La solución se busca en un dominio cuadrado de superficie unidad que se somete a mallado con un patrón sencillo de triángulos. Se generan archivos que identifican este mallado que serán usados por los códigos de resolución. En el mallado se definen también las condiciones de contorno según Neumann y Dirichlet. El Mallado se realiza mediante la herramienta de Ecuaciones Diferenciales Parciales (PDE Toolbox) de MATLAB que se ilustra en la figura 1. Esta herramienta permite modificar el grado de mallado en sucesivos pasos para ir aumentando su detalle y por tanto la precisión de las operaciones. Este aumento se traduce en un aumento del número de triángulos y de nodos. Fig. 1: Punto de partida: Mallado del problema. 83

CÓDIGO TRATAMALLA: Gracias a éste código auxiliar, facilitado por el tutor, se genera a partir de los parámetros del mallado 4 archivos con extensión.dat. Estos archivos son los que se usan para la ejecución del programa y describen en su totalidad el mallado y las condiciones de contorno. Triangulos.dat: Este archivo contiene los nodos de cada triángulo. Cada línea corresponde al triángulo que lleva el mismo número y contiene tres vértices que son los nodos del triángulo. Coordenadas.dat: Es un archivo ordenado donde cada línea corresponde al nodo que lleva el mismo número y contiene las coordenadas x e y de dicho nodo. Neumann.dat: Es un archivo que describe las condiciones de contorno Neumann. En cada línea encontramos descrito el lado de Neumann correspondiente mediante el primer nodo que lo forma, el segundo nodo y el subdominio al que pertenece dicho lado. Dirichlet.dat: De igual modo este archivo describe las condiciones de contorno de Dirichlet. Cada línea corresponde a un lado Dirichlet descrito mediante su primer nodo, su segundo nodo y el subdominio al que pertenece. 2. CÓDIGO SECUENCIAL Esta parte está constituida por el archivo femp4 y por archivos auxiliares. Realiza las siguientes tareas: 1. Inicialización y definición de variables. 2. Lectura de archivos 3. Generación de matrices locales y su ensamblado en la matriz de Rigidez. 4. Generación del vector de elementos independientes definido según las condiciones de contorno Dirichlet y Neumann. 5. Resolución de problema y obtención del vector X. 6. Comprobación de la precisión del resultado con respecto a la solución correcta. 7. Representación. En Matlab la matriz de rigidez se define y almacena como matriz dispersa (Sparse). 84

Todas estas operaciones se realizan en la CPU. En las versiones multiprocesador, algunas de las tareas se comparten entre los distintos microprocesadores del equipo de manera transparente para el usuario, realizándose una ejecución en paralelo. Sin embargo, el control de dicha ejecución, en todo momento, lo realizan la aplicación y el sistema operativo. 3. BUCLES E IDENTIFICACIÓN DE CUELLOS DE BOTELLA (BLOQUES) Para proceder a la adaptación del código se tuvieron presentes los siguientes objetivos: - El sistema debe ser acelerado mediante la tecnología CUDA; es decir usando paralelización basado en el modelo Una Instrucción-Datos Múltiples. - El sistema debe gestionar la memoria de manera eficiente permitiendo manejar matrices grandes y por tanto mallados muy finos. Por tanto se pretendían aprovechar dos características fundamentales del problema conocidas de antemano: - Que la Matriz de rigidez, es una matriz Real, Cuadrada, Dispersa, Simétrica y con diagonal principal no-nula. - Que a la hora de resolver el sistema se debe tener presente que se debe desarrollar un SOLVER rápido apropiado para matrices dispersas. Mediante inspección del código se identificaron los bloques iterativos como cuellos de botellas y se decidió analizarlos para someterlos a aceleración con la tecnología CUDA. En un análisis teórico previo para decidir su prioridad se ordenaron del siguiente modo: - Bloque I: Resolución de problema y obtención del vector Solución (X). Es el bloque identificado en el código MATLAB con el comentario % RESOLVER y que realiza la resolución mediante la orden MATLAB:x[Lib]=A[Lib]\B[Lib]. - Bloque II: Generación de matrices de rigidez: En MATLAB se señala este bloque como potencialmente lento por la propia aplicación. Está identificado por el comentario % ENSAMBLADO MATRIZ + FUERZAS VOLUMETRICAS (f) e invoca un programa auxiliar para la generación de matrices locales y su ensamblado. - Bloque III: Generación del vector de elementos independientes definido según las condiciones de contorno Dirichlet y Neumann. MODIFICACIONES INTRODUCIDAS EN EL CÓDIGO ORIGINAL: El código Matlab original fue modificado insertando líneas de comando que no modificaban sus tareas sino que aportaban mayor información. 85

En concreto se insertó un comando para generar un archivo en formato martix market con extensión.mtx que almacenaba la matriz de rigidez para poder ser usada en la comprobación de los solvers CUDA. Esto se hizo mediante la orden mmwrite('a_matlab.mtx',a). Esta orden se apoya en la función mmwrite codificada en el archivo mmio.c y disponible en el sitio Web Matrix Market. Esta función permite el almacenamiento de una matriz en un archivo en formato MM. También está disponible la función inversa que carga una matriz desde un archivo MM a la memoria del sistema. Ambas son funciones C convencionales. También se insertó una instrucción para generar un archivo que contenía el vector de elementos independientes con extensión.dat con el mismo fin. Esto se hizo con la orden save file.dat array -ascii disponible en MATLAB. Esto permitiría comparar los valores de la Matriz de Rigidez y del Vector de términos independientes con aquellos obtenidos por la aplicación CUDA, mediante la inspección de los archivo. Se insertaron también instrucciones tic y toc antes y después de A\B para medir el tiempo que tardaba la CPU en ejecutar esa instrucción y compararlo con el tiempo de ejecución del equivalente paralelo en los solvers CUDA. Pero también se usaron para medir el tiempo de ejecución global, colocándolos al principio y al final de código. Como criterio de comparación de la exactitud de las soluciones se decidió usar la Norma de tal forma que también se insertó una orden para ofrecer en pantalla el resultado de: Norma (B-A X)/Norma (B). 86

4. ANEXOS ANEXO I: Código MATLAB de Partida con las modificaciones usadas. function u=femp4 tic %medida de tiempo de ejecuciã³n load coordenadas.dat; load triangulos.dat; load neumann.dat; load dirichlet.dat; numnodos=size(coordenadas,1); numtriang=size(triangulos,1); numladosdir=size(dirichlet,1); numladosneu=size(neumann,1); % no se usa % CREACION DE LA LISTA DE NODOS DIRICHLET dirichlet=[dirichlet(:,[1 3]);dirichlet(:,[2 3])]; [Dir,distintos]=unique(dirichlet(:,1)); save DIR.dat Dir -ascii save dirich.dat dirichlet -ascii subdir=dirichlet(distintos,2); Lib=setdiff(1:numNodos,Dir); A=sparse(numNodos,numNodos); b=zeros(numnodos,1); % nodos incognita % ENSAMBLADO MATRIZ + FUERZAS VOLUMETRICAS (f) for j=1:numtriang tri=triangulos(j,:); % vertices del triangulo # j vertices=coordenadas(tri,:); % coordenadas de sus vertices [R,M,jacob]=local(vertices); % rigidez y masa local A(tri,tri)=A(tri,tri)+0*M+R; % ensamblado baricentro=sum(vertices)/3; % baricentro del triangulo aux=(jacob/6)*f(baricentro); %contribucion b(tri)=b(tri)+aux*[1;1;1]; end mmwrite('a_matlab.mtx',a); % CONDICIONES NEUMANN (g) for j=1:numladosneu lado=neumann(j,1:2); % extremos del lado # j subd=neumann(j,3); % subdominio del lado #j coord=coordenadas(lado,:); % coordenadas de los extremos ptomedio=sum(coord)/2; % punto medio del lado longitud=norm(coord(1,:)-coord(2,:)); % longitud del lado aux=longitud*g(ptomedio,subd)/2; % contribucion; b(lado)=b(lado)+aux*[1;1]; end 87

save BN.dat b -ascii % CONDICIONES DIRICHLET (u_d) coordir=coordenadas(dir,:); % coordenadas de los nodos Dirichlet u=zeros(numnodos,1); % para la solucion u(dir)=u_d(coordir,subdir); % evalï ½o u_d en los nodos Dirichlet save UD.dat u -ascii b=b-a*u; % A*u=A(:,Dir)*u(Dir) porque u(lib)=0 save temp.dat b -ascii % RESOLVER u(lib)=a(lib,lib)\b(lib); save x.dat u -ascii toc K=b-A*u; save dif.dat K -ascii norm(b-a*u)/norm(b) trisurf(triangulos,coordenadas(:,1),coordenadas(:,2),u),... view(0,90),... colorbar,... shading interp; exacta=u_ex(coordenadas); save exacta.dat u_ex -ascii err=abs(exacta-u); pause trisurf(triangulos,coordenadas(:,1),coordenadas(:,2),err),... view(0,90),... colorbar,... shading interp; 88