FLAG/C. Una API para computación matricial sobre GPUs. M. Jesús Zafont Alberto Martín Francisco Igual Enrique S. Quintana-Ortí



Documentos relacionados
Solving Dense Linear Systems on Platforms with Multiple Hardware Accelerators

MAGMA. Matrix Algebra on GPU and Multicore Architecture. Ginés David Guerrero Hernández

Tema 3 GPUs: Introducción

High Performance Computing and Architectures Group

Técnicas SuperEscalares en la Paralelización de Bibliotecas de Computación Matricial sobre Procesadores Multinúcleo y GPUs

Tile64 Many-Core. vs. Intel Xeon Multi-Core

CÓMPUTO DE ALTO RENDIMIENTO EN MEMORIA COMPARTIDA Y PROCESADORES GRÁFICOS

Primeros pasos con CUDA. Clase 1

Linear Algebra PACKage (LAPACK) Avances en la Generación de Bibliotecas de Álgebra Lineal Universidad Politécnica de Valencia Marzo, 2006

Computación de Propósito General en Unidades de Procesamiento Gráfico. Clase 7-ALN y GPUs GPGPU

Basic Linear Algebra Subprograms (BLAS) Avances en la Generación de Bibliotecas de Álgebra Lineal Universidad Politécnica de Valencia Marzo, 2006

Inside Kepler. I. Presentación de la arquitectura. Índice de contenidos [25 diapositivas] Kepler, Johannes ( )

La GPU. I. La tarjeta gráfica y su GPU. Indice de contenidos [36 diapositivas] El diagrama de bloques de la tarjeta gráfica

Tema 2: Conceptos básicos. Escuela Politécnica Superior Ingeniería Informática Universidad Autónoma de Madrid

Arquitecturas GPU v. 2015

Kepler. 1. Presentación de la arquitectura. Índice de contenidos [25 diapositivas] Kepler, Johannes ( )

También denominada adaptador de vídeo, es uno de los componentes más básicos e importantes del ordenador, ya que nos va a permitir visualizar toda la

Planilla de trabajo: Investigue los componentes de la computadora

Alejandro Molina Zarca

Una Aproximación de Alto Nivel a la Resolución de Problemas Matriciales con Almacenamiento en Disco

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

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU. Clase 0 Lanzamiento del Curso. Motivación

Motherboard. Daniel Rúa Madrid

FUNDAMENTOS DE COMPUTACIÓN PARA CIENTÍFICOS. CNCA Abril 2013

Intel lanza su procesador Caballero Medieval habilitado para Inteligencia Artificial

GPU-Ejemplo CUDA. Carlos García Sánchez

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

Montaje y Reparación de Sistemas Microinformáticos

Definición de Arquitectura

RECONOCIMIENTO DE SUS COMPONENTES - LA PC POR DENTRO:

1. Partes del ordenador. Nuevas Tecnologías y Sociedad de la Información

Procesamiento Paralelo

Arquitectura de Computadores II Clase #7

Arquitectura de Computadores II Clase #7

Francisco J. Hernández López

Organización del Computador I. Introducción e Historia

Multiplicación de Matrices en Sistemas cc-numa Multicore. Autor: Jesús Cámara Moreno Director: Domingo Giménez Cánovas

Introducción a la Arquitectura y Plataforma de Programación de Cómputo Paralelo CUDA (36 hrs) Instructor M. en C. Cristhian Alejandro Ávila-Sánchez

Plan 95 Adecuado DEPARTAMENTO: ELECTRÓNICA CLASE: ELECTIVA DE ESPECIALIDAD ÁREA: TÉCNICAS DIGITALES HORAS SEM.: 4 HS. HORAS / AÑO: 64 HS.

ELEMENTOS HARDWARE DEL ORDENADOR. Tarjeta gráfica

La memoria del PC. 1. La saga DDR. Índice de contenidos [25 diapositivas] Comparativa frente a otras tecnologías de almacenamiento de datos

MEMORIA DE ANCHO DE BANDA ALTO (HBM) PARTE UNO MAYO DE 2015

CUDA (Compute Unified Device Architecture)

Technical Report TR01-SARADL-System infraestructure

Aceleradores Gráficos Su impacto en el BUS PCI: Soluciones Actuales. Autor : Ing. Juan Montenegro 1

Sistema de memoria. Introducción

02/09/2018. Pagina 1/5

Programación en Entornos Paralelos: MPI

Introducción a Cómputo Paralelo con CUDA C/C++

Modelo de aplicaciones CUDA

Asus M5A99FX PRO Socket AM3+ MB90-MIBIT0-G0EAY0VZ

Tema 5 Jerarquía de Memoria

Arquitecturas GPU v. 2013

Hardware Gráfico. Tarjeta gráfica. Resolución. Standards de resolución. Profundidad de color (Colour depth)

Reducción de la penalización por fallo Técnica: Dar prioridad a los fallos de lectura sobre la escritura (I)

CÓMO APLICAR LA TECNOLOGÍA GPU A LOS SISTEMAS DE INFORMACIÓN GEOGRÁFICA PARA MEJORAR LOS ALGORITMOS DE RENDERIZACIÓN DE MAPAS

ARQUITECTURA DEL COMPUTADOR

Mejoras en el Sistema de E/S

FUNDAMENTOS DE COMPUTACION INVESTIGACION PROCESADORES DIANA CARRIÓN DEL VALLE DOCENTE: JOHANNA NAVARRO ESPINOSA TRIMESTRE II

Entornos de programación paralela basados en modelos/paradigmas

Arquitectura del Computador. Programación 1 er semestre 2013

CAR. Responsable : María del Carmen Heras Sánchez. Asesores Técnicos : Daniel Mendoza Camacho Yessica Vidal Quintanar.

CADA día el desarrollo de la computación es más diversa,

Juan Pablo Jaramillo Valencia Planilla de trabajo: Investigación de componentes de PC

Carrera: SCM Participantes. Representantes de la academia de sistemas y computación de los Institutos Tecnológicos.

INTRODUCCIÓN A LA COMPUTACIÓN PARALELA CON GPUS

Organización del Computador 1. Introducción

Estructura de un Ordenador

Arquitectura de computadores I

2. INSTALACIÓN DE LAS HERRAMIENTAS DE DESARROLLO CUDA

Estructura de Computadores Tema 1. Introducción a los computadores

Preparación y Adaptación de Códigos Científicos para su Ejecución Paralela TICAL 2018

Deep Learning Software Frameworks

Práctica de laboratorio: Armado de un sistema informático especializado

ARQUITECTURA DE LOS SISTEMAS BASADOS EN MICROPROCESADOR

Organización del Computador 1 Memoria Cache

CARACTERIZACION DE PROBLEMAS A SOLUCIONAR MEDIANTE PROGRAMACIÓN MULTIPROCESO DE MEMORIA COMPARTIDA. Autor ERIKA VIVIANA RIAÑO BEJAR

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU

INTRODUCCIÓN Y MEDIDAS DE RENDIMIENTO MEDIDAS DE RENDIMIENTO

Supercomputador LUSITANIA

Práctica 1 - Rendimiento *

Memoria caché básica

168(W) x 72.87(H) x 25(D) mm Size. Abrazadera de perfil bajo (opción)

Computación en procesadores gráficos

T. DE VIDEO PNY PCIE X NVIDIA GEFORCE GT1030/2GB/GDDR5/ESTANDAR Y BAJO PERFIL/DVI+HDMI/PC. NVIDIA? Quadro? K2000 VCQK2000-PB 2GB #VCQK2000-PB

Departamento de Arquitectura de computadores y electrónica Universidad de Almería. Tesis Doctoral

Arquitecturas de Altas Prestaciones y Supercomputación

Reduciendo el Ancho de Banda de Matrices Dispersas Simétricas con Algoritmos Genéticos

TAREA 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS.

Tema 5 Jerarquía de Memoria

MULTIPROCESADORES COMERCIALES. José M. Cámara v. 2.0

Organización del Computador. Memorias

Tema 1:Arquitectura de ordenadores

NOTEBOOK S JULIO BPTEL

Computación de Altas Prestaciones Sin miedo, es más fácil de lo que parece. Alex Ramírez Arquitecturas Heterogeneas Barcelona Supercomputing Centrer

2,3 veces. Transcodificación de vídeo hasta

INSTITUTO ELECTORAL DEL ESTADO DE ZACATECAS

Programación de GPUs con CUDA

Transcripción:

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 (Spain) FLAG/C 1 Zafont et al.

Motivación (I) Los procesadores gráficos actuales se han convertido en una alternativa real y de bajo coste para HPC Rendimiento Facilidad de programación Hardware: Mayor funcionalidad Software: Cg/OpenGL vs. CUDA CUBLAS/CUFFT... FLAG/C 2 Zafont et al.

Motivación (I) Los procesadores gráficos actuales se han convertido en una alternativa real y de bajo coste para HPC Rendimiento Facilidad de programación Hardware: Mayor funcionalidad Software: Cg/OpenGL vs. CUDA CUBLAS/CUFFT... FLAG/C 2 Zafont et al.

Motivación (I) Los procesadores gráficos actuales se han convertido en una alternativa real y de bajo coste para HPC Rendimiento Facilidad de programación Hardware: Mayor funcionalidad Software: Cg/OpenGL vs. CUDA CUBLAS/CUFFT... FLAG/C 2 Zafont et al.

Motivación (II) Objetivos 1 Posibilitar la creación de códigos robustos 2 Reducir tiempos de desarrollo 3 Reducir tiempos de ejecución Nuestra propuesta: FLAG/C Interfaz de programación para operaciones de álgebra lineal densa sobre GPUs Códigos robustos: metodología FLAME Facilidad de uso: oculta al programador la arquitectura subyacente Prestaciones: basado en GPUs FLAG/C 3 Zafont et al.

Motivación (II) Objetivos 1 Posibilitar la creación de códigos robustos 2 Reducir tiempos de desarrollo 3 Reducir tiempos de ejecución Nuestra propuesta: FLAG/C Interfaz de programación para operaciones de álgebra lineal densa sobre GPUs Códigos robustos: metodología FLAME Facilidad de uso: oculta al programador la arquitectura subyacente Prestaciones: basado en GPUs FLAG/C 3 Zafont et al.

Índice de contenidos 1 FLAG/C: descripción de la interfaz 2 Utilización de la metodología FLAME sobre GPUs 3 Evaluación de versatilidad, facilidad de uso y eficiencia de FLAG/C 4 Conclusiones FLAG/C 4 Zafont et al.

FLAG/C: descripción de la interfaz La API FLAG/C FLAG/C FLAG/C: API de alto nivel, escrita en lenguaje C, para el desarrollo rápido de códigos eficientes de álgebra lineal densa Posibilidad de ser combinado con cualquier tipo de acelerador: GPUs, tarjetas ClearSpeed, Cell B.E. Requisito: implementación eficiente de BLAS disponible para la arquitectura FLAG/C 5 Zafont et al.

FLAG/C: descripción de la interfaz Objetos en FLAG/C Objetos en FLAG/C Representación de una matriz en la memoria del acelerador FLAG/C permite al usuario: 1 Crear, destruir y consultar las propiedades de un objeto 2 Inicializar el contenido de un objeto 3 Definir vistas 4 Operar con objetos a través de BLAS offm A Vistas m offn Vista de A n Referencias a bloques dentro de un objeto Flexibilidad para manipular matrices y bloques de matrices Sin coste adicional de almacenamiento FLAG/C 6 Zafont et al.

FLAG/C: descripción de la interfaz Objetos en FLAG/C Objetos en FLAG/C Representación de una matriz en la memoria del acelerador FLAG/C permite al usuario: 1 Crear, destruir y consultar las propiedades de un objeto 2 Inicializar el contenido de un objeto 3 Definir vistas 4 Operar con objetos a través de BLAS offm A Vistas m offn Vista de A n Referencias a bloques dentro de un objeto Flexibilidad para manipular matrices y bloques de matrices Sin coste adicional de almacenamiento FLAG/C 6 Zafont et al.

FLAG/C: descripción de la interfaz Estructura típica de un programa FLAG/C (I) Inicialización Creación de Objetos FLA_Init() / FLA_Finalize() Inicialización / finalización necesaria del entorno FLAG_Obj_create( FLA_TYPE, int m, int n, FLA_Obj * ) Reserva espacio para el objeto en la memoria de la GPU FLAG/C 7 Zafont et al.

FLAG/C: descripción de la interfaz Estructura típica de un programa FLAG/C (I) Inicialización Creación de Objetos FLA_Init() / FLA_Finalize() Inicialización / finalización necesaria del entorno FLAG_Obj_create( FLA_TYPE, int m, int n, FLA_Obj * ) Reserva espacio para el objeto en la memoria de la GPU FLAG/C 7 Zafont et al.

FLAG/C: descripción de la interfaz Estructura típica de un programa FLAG/C (II) Transferencias CPU -> GPU FLAG_Obj_set_with_buffer( void* buffer, FLA_Obj A ) Inicializa los elementos del objeto A en memoria de GPU con una copia del contenido del buffer alojado en memoria central Computación Matricial Implementación BLAS completa FLAG_Gemm( FLAG_Trans transa, FLAG_Trans transb, FLA_Obj alpha, FLAG_Obj A, FLAG_Obj B, FLA_Obj beta, FLAG_Obj C ) FLAG/C 8 Zafont et al.

FLAG/C: descripción de la interfaz Estructura típica de un programa FLAG/C (II) Transferencias CPU -> GPU FLAG_Obj_set_with_buffer( void* buffer, FLA_Obj A ) Inicializa los elementos del objeto A en memoria de GPU con una copia del contenido del buffer alojado en memoria central Computación Matricial Implementación BLAS completa FLAG_Gemm( FLAG_Trans transa, FLAG_Trans transb, FLA_Obj alpha, FLAG_Obj A, FLAG_Obj B, FLA_Obj beta, FLAG_Obj C ) FLAG/C 8 Zafont et al.

FLAG/C: descripción de la interfaz Estructura típica de un programa FLAG/C (III) Utilidades FLAG_Obj_show( char *s1, FLAG_Obj A, char * format, char *s2 ) Muestra el contenido del objeto A Transferencias GPU -> CPU FLAG_Obj_transfer_to_FLA_Obj( FLAG_Obj A,FLA_Obj B ) Inicializa los elementos de un objeto B con una copia del contenido de A, alojado en GPU FLAG/C 9 Zafont et al.

FLAG/C: descripción de la interfaz Estructura típica de un programa FLAG/C (III) Utilidades FLAG_Obj_show( char *s1, FLAG_Obj A, char * format, char *s2 ) Muestra el contenido del objeto A Transferencias GPU -> CPU FLAG_Obj_transfer_to_FLA_Obj( FLAG_Obj A,FLA_Obj B ) Inicializa los elementos de un objeto B con una copia del contenido de A, alojado en GPU FLAG/C 9 Zafont et al.

FLAG/C: descripción de la interfaz Example: C = A T B FLAG_Init ( ) ; FLAG_Obj AObj, BObj, CObj ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &AObj ) ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &BObj ) ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &CObj ) ; Inicialización Creación de objetos FLAG_Obj_set_with_buffer ( ( void ) A, &AObj ) ; FLAG_Obj_set_with_buffer ( ( void ) B, &BObj ) ; FLAG_Obj_set_with_buffer ( ( void ) C, &CObj ) ; FLAG_Gemm( FLAG_TRANSPOSE,... FLAG_NO_TRANSPOSE,... 1. 0, &Aobj, &Bobj, 0. 0, &Cobj ) ; FLAG_Obj_show( "C = [ ", Cobj, "%f ", " ] " ) ; FLAG_Obj_free ( &Aobj ) ; FLAG_Obj_free ( &Bobj ) ; FLAG_Obj_free ( &Cobj ) ; FLAG_Finalize ( ) ; Transferencia CPU -> GPU Operaciones BLAS en GPU Liberación de espacio en memoria de GPU FLAG/C 10 Zafont et al.

FLAG/C: descripción de la interfaz Example: C = A T B FLAG_Init ( ) ; FLAG_Obj AObj, BObj, CObj ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &AObj ) ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &BObj ) ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &CObj ) ; Inicialización Creación de objetos FLAG_Obj_set_with_buffer ( ( void ) A, &AObj ) ; FLAG_Obj_set_with_buffer ( ( void ) B, &BObj ) ; FLAG_Obj_set_with_buffer ( ( void ) C, &CObj ) ; FLAG_Gemm( FLAG_TRANSPOSE,... FLAG_NO_TRANSPOSE,... 1. 0, &Aobj, &Bobj, 0. 0, &Cobj ) ; FLAG_Obj_show( "C = [ ", Cobj, "%f ", " ] " ) ; FLAG_Obj_free ( &Aobj ) ; FLAG_Obj_free ( &Bobj ) ; FLAG_Obj_free ( &Cobj ) ; FLAG_Finalize ( ) ; Transferencia CPU -> GPU Operaciones BLAS en GPU Liberación de espacio en memoria de GPU FLAG/C 10 Zafont et al.

FLAG/C: descripción de la interfaz Example: C = A T B FLAG_Init ( ) ; FLAG_Obj AObj, BObj, CObj ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &AObj ) ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &BObj ) ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &CObj ) ; Inicialización Creación de objetos FLAG_Obj_set_with_buffer ( ( void ) A, &AObj ) ; FLAG_Obj_set_with_buffer ( ( void ) B, &BObj ) ; FLAG_Obj_set_with_buffer ( ( void ) C, &CObj ) ; FLAG_Gemm( FLAG_TRANSPOSE,... FLAG_NO_TRANSPOSE,... 1. 0, &Aobj, &Bobj, 0. 0, &Cobj ) ; FLAG_Obj_show( "C = [ ", Cobj, "%f ", " ] " ) ; FLAG_Obj_free ( &Aobj ) ; FLAG_Obj_free ( &Bobj ) ; FLAG_Obj_free ( &Cobj ) ; FLAG_Finalize ( ) ; Transferencia CPU -> GPU Operaciones BLAS en GPU Liberación de espacio en memoria de GPU FLAG/C 10 Zafont et al.

FLAG/C: descripción de la interfaz Example: C = A T B FLAG_Init ( ) ; FLAG_Obj AObj, BObj, CObj ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &AObj ) ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &BObj ) ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &CObj ) ; Inicialización Creación de objetos FLAG_Obj_set_with_buffer ( ( void ) A, &AObj ) ; FLAG_Obj_set_with_buffer ( ( void ) B, &BObj ) ; FLAG_Obj_set_with_buffer ( ( void ) C, &CObj ) ; FLAG_Gemm( FLAG_TRANSPOSE,... FLAG_NO_TRANSPOSE,... 1. 0, &Aobj, &Bobj, 0. 0, &Cobj ) ; FLAG_Obj_show( "C = [ ", Cobj, "%f ", " ] " ) ; FLAG_Obj_free ( &Aobj ) ; FLAG_Obj_free ( &Bobj ) ; FLAG_Obj_free ( &Cobj ) ; FLAG_Finalize ( ) ; Transferencia CPU -> GPU Operaciones BLAS en GPU Liberación de espacio en memoria de GPU FLAG/C 10 Zafont et al.

FLAG/C: descripción de la interfaz Example: C = A T B FLAG_Init ( ) ; FLAG_Obj AObj, BObj, CObj ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &AObj ) ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &BObj ) ; FLAG_Obj_create ( FLAG_FLOAT, n, n, &CObj ) ; Inicialización Creación de objetos FLAG_Obj_set_with_buffer ( ( void ) A, &AObj ) ; FLAG_Obj_set_with_buffer ( ( void ) B, &BObj ) ; FLAG_Obj_set_with_buffer ( ( void ) C, &CObj ) ; FLAG_Gemm( FLAG_TRANSPOSE,... FLAG_NO_TRANSPOSE,... 1. 0, &Aobj, &Bobj, 0. 0, &Cobj ) ; FLAG_Obj_show( "C = [ ", Cobj, "%f ", " ] " ) ; FLAG_Obj_free ( &Aobj ) ; FLAG_Obj_free ( &Bobj ) ; FLAG_Obj_free ( &Cobj ) ; FLAG_Finalize ( ) ; Transferencia CPU -> GPU Operaciones BLAS en GPU Liberación de espacio en memoria de GPU FLAG/C 10 Zafont et al.

FLAME Utilización de la metodología FLAME sobre GPUs FLAME FLAME: desarrollo de bibliotecas robustas y eficientes con un alto nivel de abstracción Alto nivel de abracción: oculta detalles de implementación No es únicamente una biblioteca: Notación para expresar algoritmos de álgebra lineal densa Metodología para derivación sistemática de algoritmos Interfaces de programación (APIs) para representar algoritmos en forma de código Herramientas para facilitar el proceso de derivación algorítmica Ejemplo: factorización de Cholesky FLAG/C 11 Zafont et al.

Utilización de la metodología FLAME sobre GPUs Factorización de Cholesky con FLAME DONE Definición Dada A n n s.p.d. DONE A (partially updated) A = LL T con L n n triangular inferior FLAG/C 12 Zafont et al.

Utilización de la metodología FLAME sobre GPUs Factorización de Cholesky con FLAME A 11 A 21 A 22 Repartition ( ) A 00 A 01 A 02 ATL A TR A BL A BR A T 10 A 11 A T 12 A 20 A 21 A 22 where A 11 is b b FLAG/C 13 Zafont et al.

Utilización de la metodología FLAME sobre GPUs Factorización de Cholesky con FLAME CHOL TRSM SYRK Operaciones por iteración: %=================% A11 = chol( A11 ); A21 = A21 / tril( A11 ) ; A22 = A22 - tril( A21 * A21 ); %=================% FLAG/C 14 Zafont et al.

Utilización de la metodología FLAME sobre GPUs Factorización de Cholesky con FLAME DONE DONE A (partially updated) Continue with ( ) ATL A TR A BL A BR where A 11 is b b A 00 A 01 A 02 A 10 A 11 A 12 A 20 A 21 A 22 FLAG/C 15 Zafont et al.

Utilización de la metodología FLAME sobre GPUs Factorización de Cholesky con FLAME CHOL Repartition ( ) A 00 A 01 A 02 ATL A TR A BL A BR A T 10 A 11 A T 12 A 20 A 21 A 22 where A 11 is b b TRSM SYRK FLA_Repart_2x2_to_3x3( ATL, ATR, &A00, &A01, &A02, &A10, &A11, &A12, ABL, ABR, &A20, &A21, &A22, b, b, FLA_BR ); FLAG/C 16 Zafont et al.

Utilización de la metodología FLAME sobre GPUs Factorización de Cholesky con FLAME DONE Continue with ( ) ATL A TR A BL A BR where A 11 is b b A 00 A 01 A 02 A 10 A 11 A 12 A 20 A 21 A 22 DONE A (partially updated) FLA_Cont_with_3x3_to_2x2( &ATL, &ATR, A00, A01, A02, A10, A11, A12, &ABL, &ABR, A20, A21, A22, FLA_TL ); FLAG/C 17 Zafont et al.

Utilización de la metodología FLAME sobre GPUs Factorización de Cholesky con FLAME El algoritmo itera... CHOL while ( size( ATL, 1 ) < size( A, 1 ) )... TRSM SYRK FLAG/C 18 Zafont et al.

Utilización de la metodología FLAME sobre GPUs Factorización de Cholesky con FLAME DONE El algoritmo itera... while ( size( ATL, 1 ) < size( A, 1 ) )... DONE FLAG/C 19 Zafont et al.

Utilización de la metodología FLAME sobre GPUs Notación FLAME y FLAME/C ( ATL A TR Partition A A BL A BR where A TL is 0 0 while m(a TL ) < m(a) do Determine block size n b Repartition ( ) A ATL A 00 A 01 A 02 TR A A BL A 10 A 11 A 12 BR A 20 A 21 A 22 where A 11 is n b n b A 11 := CHOL_UNB(A 11 ) A 21 := A 21 TRIL (A 11 ) T A 22 := A 22 A 21 A T 21 Continue with ( ATL A TR A BL endwhile A BR ) ) A 00 A 01 A 02 A 10 A 11 A 12 A 20 A 21 A 22 int FLA_Chol_l_blk_var3_imp1 ( FLAG_Obj A, int nb_alg ) { FLA_Part_2x2 ( A, &ATL, &ATR, &ABL, &ABR, 0, 0, FLAG_TL ) ; } } while ( FLA_Obj_width ( ATL ) < FLA_Obj_width ( A ) ) { b = min ( min ( FLA_Obj_length ( ABR ), FLA_Obj_width ( ABR ) ), nb_alg ) ; FLA_Repart_2x2_to_3x3 ( ATL, ATR, &A00, &A01, &A02, &A10, &A11, &A12, ABL, ABR, &A20, &A21, &A22, b, b, FLA_BR ) ; / / FLA_Chol_unb ( A11 ) ; FLA_Trsm( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, FLA_NONUNIT_DIAG, FLA_ONE, A11, A21 ) ; FLA_Syrk ( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, FLA_MINUS_ONE, A21, FLA_ONE, A22 ) ; / / FLA_Cont_with_3x3_to_2x2 ( &ATL, &ATR, A00, A01, A02, A10, A11, A12, &ABL, &ABR, A20, A21, A22, FLA_TL ) ; FLAG/C 20 Zafont et al.

Utilización de la metodología FLAME sobre GPUs Comparación FLAME/C - FLAG/C int FLAG_Chol_l_blk_var3_imp1 ( FLAG_Obj A, int nb_alg ) { FLAG_Part_2x2 ( A, &ATL, &ATR, &ABL, &ABR, 0, 0, FLAG_TL ) ; while ( FLAG_Obj_width ( ATL ) < FLAG_Obj_width ( A ) ) { b = min ( min ( FLAG_Obj_length ( ABR ), FLAG_Obj_width ( ABR ) ), nb_alg ) ; FLAG_Repart_2x2_to_3x3 ( ATL, ATR, &A00, &A01, &A02, &A10, &A11, &A12, ABL, ABR, &A20, &A21, &A22, b, b, FLAG_BR ) ; / / FLAG_Chol_unb ( A11 ) ; FLAG_Trsm( FLAG_RIGHT, FLAG_LOWER_TRIANGULAR, FLAG_TRANSPOSE, FLAG_NONUNIT_DIAG, FLA_ONE, A11, A21 ) ; FLAG_Syrk ( FLAG_LOWER_TRIANGULAR, FLAG_NO_TRANSPOSE, FLA_MINUS_ONE, A21, FLA_ONE, A22 ) ; / / Principales diferencias: 1 Rutinas BLAS proporcionadas por FLAG/C 2 Las matrices deben haber sido transferidas previamente a la GPU } } FLAG_Cont_with_3x3_to_2x2 ( &ATL, &ATR, A00, A01, A02, A10, A11, A12, &ABL, &ABR, A20, A21, A22, FLA_TL ) ; FLAG/C 21 Zafont et al.

Evaluación de versatilidad, facilidad de uso y eficiencia de FLAG/C Evaluación de FLAG/C ( ) ATL ATR Partition A ABL ABR where ATL is 0 0 while m(atl) < m(a) do Repartition ( ATL ATR ABL ABR where α11 is 1 1 Variant 1: a T 10 := at 10TRIL (A00) T α11 := α11 a T 10 a10 α11 := α11 Variant 2: α11 := α11 a T 10 a10 α11 := α11 a21 := a21 A20a10 a21 := a21/α11 Variant 3: α11 := α11 a21 := a21/α11 A22 := A22 a21a T 21 Continue with ( ATL ATR ABL endwhile ABR ) A00 a01 A02 a T 10 α11 a T 12 ) A20 a21 A22 A00 a01 A02 a T 10 α11 a T 12 A20 a21 A22 ( ) ATL ATR Partition A ABL ABR where ATL is 0 0 while m(atl) < m(a) do Determine block size nb Repartition ( ) A00 A01 A02 ATL ATR A10 A11 A12 ABL ABR A20 A21 A22 where A11 is nb nb Variant 1: A10 := A10TRIL (A00) T A11 := A11 A10A T 10 A11 := CHOL_UNB(A11) Variant 2: A11 := A11 A10A T 10 A11 := CHOL_UNB(A11) A21 := A21 A20A T 10 A21 := A21TRIL (A11) T Variant 3: A11 := CHOL_UNB(A11) A21 := A21TRIL (A11) T A22 := A22 A21A T 21 Continue with ( ) A00 A01 A02 ATL ATR A10 A11 A12 ABL ABR A20 A21 A22 endwhile Cálculo de raíces cuadradas CPU FLAG/C 22 Zafont et al.

Evaluación de versatilidad, facilidad de uso y eficiencia de FLAG/C Evaluación de FLAG/C Familia de implementaciones Imp1 Transferencia de elementos diagonales Cálculos si n b n multitud de llamadas a rutinas de nivel 1 y 2 de CUBLAS con poca carga computacional si n b es grande se reduce el núm. de operaciones expresadas en términos de llamadas al nivel 3 de CUBLAS Comunicaciones T 1 (n) = n(2α + 8β) donde α β 2n transferencias de 4 bytes Familia de implementaciones Imp2 (Generalización de Imp1) Transferencia de bloques diagonales Cálculos: llamadas a rutinas de nivel 3 de CUBLAS Comunicaciones T 2 (n,n b ) = n n b (2α + 8βn 2 b ) 2 n n b transferencias de 4n 2 b bytes FLAG/C 23 Zafont et al.

Evaluación de versatilidad, facilidad de uso y eficiencia de FLAG/C Evaluación de FLAG/C Métrica empleada: MFLOPs = n 3 3 10 6 T ejec T ejec es el tiempo empleado por el procesador para calcular la factorización. Incluye: Tiempo de transmisión de la matriz (CPU GPU) Tiempo de transmisión del factor de Cholesky (GPU CPU) CPU GPU Procesador Intel Core 2 Duo NVIDIA 8800 Ultra Modelo Crusoe E6320 G80 Frecuencia de reloj 1.86 GHz 575 MHz Frecuencia memoria 2 333 MHz 2 900 MHz Ancho banda bus 64 bits 384 bits Máx. ancho de banda 5.3 GB/s 86.4 GB/s Memoria 1024 MB DDR2 768 MB GDDR3 Tipo de bus PCI Express x16 (4 GB/s) Versión BLAS Intel MKL 10 CUBLAS 2.0 FLAG/C 24 Zafont et al.

Evaluación de versatilidad, facilidad de uso y eficiencia de FLAG/C Evaluación de FLAG/C: Imp1 vs. Imp2 Imp1 Var3 CHOL_BLK Imp2 Var3 CHOL_BLK MFLOPS 70000 60000 50000 40000 30000 Cholesky Factorization -- FLAG_Chol_l_blk_var3_imp_1 n b =1 n b =2 n b =4 n b =8 n b =16 n b =32 n b =64 n b =128 n b =256 MFLOPS 70000 60000 50000 40000 30000 Cholesky Factorization -- FLAG_Chol_l_blk_var3_imp_2 n b =1 n b =2 n b =4 n b =8 n b =16 n b =32 n b =64 n b =128 n b =256 20000 20000 10000 10000 0 500 1000 1500 2000 2500 3000 3500 4000 Matrix dimension (n) 0 500 1000 1500 2000 2500 3000 3500 4000 Matrix dimension (n) Mejora significativa cuando n [0, 2000] Conclusiones: Versatilidad para obtener implementaciones de altas prestaciones FLAG/C 25 Zafont et al.

Evaluación de versatilidad, facilidad de uso y eficiencia de FLAG/C Evaluación de FLAG/C: sobrecoste CUBLAS Imp2 Var3 CHOL_BLK FLAG/C Imp2 Var3 CHOL_BLK MFLOPS 70000 60000 50000 40000 30000 Cholesky Factorization -- CUBLAS_Chol_l_blk_var3_imp_2 n b =1 n b =2 n b =4 n b =8 n b =16 n b =32 n b =64 n b =128 n b =256 MFLOPS 70000 60000 50000 40000 30000 Cholesky Factorization -- FLAG_Chol_l_blk_var3_imp_2 n b =1 n b =2 n b =4 n b =8 n b =16 n b =32 n b =64 n b =128 n b =256 20000 20000 10000 10000 0 500 1000 1500 2000 2500 3000 3500 4000 Matrix dimension (n) 0 500 1000 1500 2000 2500 3000 3500 4000 Matrix dimension (n) El sobrecoste de FLAG/C es despreciable FLAG/C 26 Zafont et al.

Evaluación de versatilidad, facilidad de uso y eficiencia de FLAG/C Evaluación de FLAG/C: FLAME/C vs. FLAG/C FLAME/C Var2 CHOL_BLK FLAG/C Imp2 Var2 CHOL_BLK MFLOPS 70000 60000 50000 40000 30000 Cholesky Factorization -- FLA_Chol_l_blk_var2 n b =1 n b =2 n b =4 n b =8 n b =16 n b =32 n b =64 n b =128 n b =256 MFLOPS 70000 60000 50000 40000 30000 Cholesky Factorization -- FLAG_Chol_l_blk_var2_imp_2 n b =1 n b =2 n b =4 n b =8 n b =16 n b =32 n b =64 n b =128 n b =256 20000 20000 10000 10000 0 500 1000 1500 2000 2500 3000 3500 4000 Matrix dimension (n) 0 500 1000 1500 2000 2500 3000 3500 4000 Matrix dimension (n) La GPU acelera significativamente el cálculo FLAG/C 27 Zafont et al.

Conclusiones Conclusiones FLAG/C es fácil de usar: La curva de aprendizaje de FLAG/C es mínima Alto nivel de abstracción para el desarrollo de códigos FLAG/C es eficiente: Permite explotar eficientemente el paralelismo multihebra masivo disponible Se puede acelerar hasta 7 veces el rendimiento obtenido por la CPU (factorización de Cholesky) FLAG/C (FLAME) es flexible: Permite adaptar la interfaz a cualquier tipo de acelerador hardware FLAG/C 28 Zafont et al.

Conclusiones Conclusiones FLAG/C es fácil de usar: La curva de aprendizaje de FLAG/C es mínima Alto nivel de abstracción para el desarrollo de códigos FLAG/C es eficiente: Permite explotar eficientemente el paralelismo multihebra masivo disponible Se puede acelerar hasta 7 veces el rendimiento obtenido por la CPU (factorización de Cholesky) FLAG/C (FLAME) es flexible: Permite adaptar la interfaz a cualquier tipo de acelerador hardware FLAG/C 28 Zafont et al.

Conclusiones Conclusiones FLAG/C es fácil de usar: La curva de aprendizaje de FLAG/C es mínima Alto nivel de abstracción para el desarrollo de códigos FLAG/C es eficiente: Permite explotar eficientemente el paralelismo multihebra masivo disponible Se puede acelerar hasta 7 veces el rendimiento obtenido por la CPU (factorización de Cholesky) FLAG/C (FLAME) es flexible: Permite adaptar la interfaz a cualquier tipo de acelerador hardware FLAG/C 28 Zafont et al.

Conclusiones Gracias... Más información... http://www3.uji.es/ figual http://www.hpca.uji.es FLAG/C 29 Zafont et al.