Incremento en el desempeño de la multiplicación Matriz-Vector

Click here to load reader

  • date post

    26-Jul-2015
  • Category

    Software

  • view

    97
  • download

    4

Embed Size (px)

Transcript of Incremento en el desempeño de la multiplicación Matriz-Vector

1. Incremento en el Desempeo en la Multiplicacin Matriz- Vector Sotero Ordoes Nogales1 , Jos Antonio Muoz Gmez1 , Abimael Jimnez Prez2 1 Departamento de Ingenieras, Universidad de Guadalajara campus CUCSur, Autln de la Grana, Mxico sotero.ordones@gmail.com, jose.munoz@cucsur.udg.mx 2 Instituto de Ingeniera y Tecnologa, Universidad Autnoma de Ciudad Jurez, Ciudad Jurez, Mxico abimael.jimenez@uacj.mx Abstract. This paper is focused on the analysis of several optimization tech- niques of serial and parallel code in order to increase the computational perfor- mance of matrix-vector multiplication. The paper presents both an exhaustive study of described techniques, and the features of coding in detail. Several nu- merical studies were done, where the characteristics that must have the algo- rithm to get the best computational performance with one core and multi-core processing using shared memory with OpenMP were determined. In particular, we study exhaustively the influence in the computational performance employ- ing the technique of loop unrolling and vector data processing. Numerically was demonstrated that the best performance is obtained with an unroll-8, getting a gain of 1.6x, and using parallel registers a gain of 2.2x is achieved. In addition, using parallel programming were determined 4.5, 8.2 and 9.8 Gflops with 2, 4 and 8 cores, respectively. Resumen. Este trabajo se concentra en el anlisis de diversas tcnicas de optimizacin de cdigo en serie y en paralelo para incrementar el desempeo computacional de la multiplicacin matriz-vector. Se presenta de forma detallada el estudio exhaustivo de las tcnicas descritas as como los detalles de codificacin. Se realizan diversos estudios numricos en donde se determinan las caractersticas que debe tener el algoritmo para obtener el mayor rendimiento computacional en un solo ncleo y con varios ncleos de procesamiento empleando memoria compartida con OpenMP. En particular, se estudia exhaustivamente la influencia en el desempeo computacional empleando la tcnica de loop unrolling y el procesamiento vectorial de datos. Mostramos numricamente que el mejor desempeo se obtiene con unroll-8 obteniendo una ganancia de 1.6x, y empleando los registros paralelos se alcanza 2.2x. Adems, empleando la programacin en paralelo se determinaron 4.5, 8.2 y 9.8 Gflops 2,4,8 ncleos respectivamente. Keywords: cmputo paralelo, computacin cientfica, tcnicas de unroll, memoria compartida, OpenMP. 2. 1 Introduccin Una de las operaciones algebraicas ms importantes en computacin cientfica es la multiplicacin de una matriz por un vector. Esta operacin es el ncleo computacional de los esquemas iterativos modernos basados en sub-espacios de Krylov, que nos permiten resolver de manera eficiente diversos problemas reales en las ciencias y las ingenieras [1]. La operacin matriz-vector tienen un orden de complejidad cuadrtico !(!! ), para valores de suficientemente grandes o bien cuando se realizan miles de iteraciones es requerido optimizar el cdigo para incrementar el desempeo computacional. Desde un punto de vista matemtico la multiplicacin matriz-vector se expresa como: !" (1) donde ! es una matriz de !! y ! es un vector con ! elementos definidos sobre el campo de los nmeros reales. La seccin de cdigo que implementa a (1) se muestra a continuacin. /* ----- Ax version cannica ----- */ for(i=0; i < n; i++){ for(j=0, c[i] = 0; j < n; j++) c[i] = c[i] + A[i][j] * x[j]; } Esta forma de codificacin corresponde a la forma bsica o cannica de implementar la operacin, la cual es correcta desde el punto de vista del lgebra matricial, pero deficiente en el rea de computacin cientfica. Esta forma de implementacin tiene un bajo desempeo computacional. Existen una gran variedad de bibliotecas de cdigo libre dedicadas a la optimizacin de operaciones del lgebra matricial. En particular, la multiplicacin matriz-vector se puede encontrar en BLAS (Basic Linear Algebra Subprograms) y ATLAS (Automatically Tuned Linear Algebra Software): la primera consiste en un conjunto de funciones altamente optimizadas [2], en la segunda se agregan tcnicas para la optimizacin automtica [3]. Ambas bibliotecas plantean un escenario centrado en la generacin de cdigo de alto rendimiento y la reduccin de tiempo para el desarrollo de la aplicacin, mediante la generacin de subrutinas y bibliotecas con entornos adaptables. Por su parte las bibliotecas, PLASMA (Parallel Linear Algebra Software for Multiprocessor Architectures) y FLAME (Formal Linear Algebra Methods Environment), se enfocan en la optimizacin automtica de aplicaciones con un fuerte enfoque en la arquitectura de la computadora: mediante la abstraccin del hardware y del sistema operativo. Sin embargo, el reto se complica con el hermetismo y con la programacin paralela para las arquitecturas multi-ncleo, las cuales presentan caractersticas distintas de rendimiento. Aunado a ello la complejidad para operar dichas bibliotecas crece considerablemente. Cabe hacer mencin, que en estas bibliotecas numricas, algunas optimizaciones (relacionadas con la multiplicacin matriz-vector) se eligen de forma automtica [2, 3]. Sin embargo, en aplicaciones 3. especficas y considerando la arquitectura de la computadora, es posible realizar un mejor trabajo de optimizacin de cdigo [4]. En este trabajo se abordan distintas tcnicas computacionales de optimizacin de cdigo para obtener el mximo rendimiento en la multiplicacin matriz-vector con matrices densas, empleando uno o varios ncleos de procesamiento. Este tipo de matrices surgen de manera natural en procesos de interpolacin con funciones radiales [5] y en la solucin numrica de ecuaciones diferenciales parciales empleando funciones de soporte global [6]. En particular, se utiliza la tcnica loop unrolling y el procesamiento vectorial para mejorar el rendimiento computacional en un solo ncleo. Se muestra experimentalmente que la velocidad de ejecucin mejora significativamente con el uso de estas tcnicas de programacin avanzadas. Para explotar la arquitectura multi-ncleo con memoria compartida, se programaron funciones paralelas con OpenMP (Open Multi-Processing) optimizadas con las dos tcnicas antes mencionadas. Obteniendo una escalabilidad lineal hasta cuatro ncleos y un factor de 5.5x con ocho ncleos de procesamiento. En la siguiente seccin se describe la tcnica de loop unrolling y se determina experimentalmente la profundidad ptima del unroll (U). En la seccin 3 se aborda la programacin paralela a nivel de datos empleando los registros vectoriales de Intel. En la seccin 4, se desarrolla la multiplicacin matriz-vector con un enfoque de cmputo paralelo basado en el paradigma de memoria compartida con API (Application Program Interface) o interfaz de programacin de aplicaciones de OpenMP. En esta seccin, se fusionan las tcnicas tratadas en las secciones 2-3, para obtener finalmente la implementacin con el mayor desempeo computacional. Por ltimo, se enuncian las conclusiones del presente trabajo. 2 Loop unrolling Los ciclos de procesamiento son los responsables de la mayora del tiempo de ejecucin en muchos tipos de aplicaciones. Las aplicaciones cientficas pueden ser caracterizadas con un consumo mayor al 90% de su tiempo de ejecucin en uno o pocos ciclos de procesamiento [7]. La compilacin con tcnicas automticas de unroll es comnmente usado en programas cientficos, y se pueden obtener grandes beneficios en tiempo de procesamiento [8, 9]. Sin embargo, no existe un compilador que incremente el desempeo computacional para cualquier tipo de programa cientfico. Por ello, la necesidad de realizar codificaciones y mejoras no automticas para incrementar el desempeo computacional. Esta tcnica computacional consiste en disminuir el nmero de iteraciones de un ciclo mediante un aumento de operaciones en el mismo ciclo. La idea radica en desdoblar el ciclo para tratar de incrementar el desempeo computacional mediante el procesamiento paralelo a nivel de mquina subyacente en la arquitectura pipeline de los procesadores [9]. Para ejemplificar la tcnica de unroll, consideremos el producto punto entre un par de vectores !!!! ! !!! (2) 4. lo cual constituye el ncleo de la multiplicacin matriz-vector. El mtodo de unroll aplicado a (2) se puede expresar como: !!!! + !!!!!!!! !!!! ! !!! (3) !!!! + !!!!!!!! + !!!!!!!! + !!!!!!!! !!!! ! !!! (4) donde ! representa el factor de incremento sobre el ndice del ciclo y corresponde al valor de profundidad del unroll. En las ecuaciones (3) y (4) se tiene un nivel de anidamiento de orden 2 y 4 respectivamente. Cabe sealar que desde el punto de vista algebraico, el producto punto se puede expresar de distintas maneras (2-4). Sin embargo, dentro del marco de las ciencias computacionales se tienen rendimientos diferentes. Es conocido, que el nivel de profundidad ptimo del unroll depende de la arquitectura, banderas de compilacin y uso eficiente de la memoria cach utilizada [2]. En particular es de inters determinar el mejor valor de unroll para la multiplicacin matriz-vector. Para ello, seleccionamos distintos factores de unroll-{1,2,,20}, ! = 4096, y compilacin sin banderas. Los vectores contienen nmeros aleatorios de distribucin uniforme en el rango [1,1]. En la figura 1 se muestra la curva del tiempo de ejecucin para el producto matriz- vector empleando distintos factores de unroll. Como se observa en la figura anterior, conforme incrementamos el factor de unroll el tiempo de procesamiento disminuye drsticamente y a partir de unroll-8 (U-8), el tiempo se estabiliza. Es decir, la mxima ganancia se obtiene en dicho factor de unroll. Un resultado similar se obtiene para distintos valores de !. Fig. 1. Multiplicacin matriz-vector con unroll. 3 Intel MMX La fuerte demanda de recursos de las aplicaciones de multimedia y de comunicaciones dio inicio al desarrollo de nuevas tecnologas que permitieran cubrir 5. esas necesidades. As es como vio la luz Intel MMX que se incorpor a la arquitectura Intel en 1