30.07.2015 Views

Actas JP2011 - Universidad de La Laguna

Actas JP2011 - Universidad de La Laguna

Actas JP2011 - Universidad de La Laguna

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Actas</strong> XXII Jornadas <strong>de</strong> Paralelismo (<strong>JP2011</strong>) , <strong>La</strong> <strong>La</strong>guna, Tenerife, 7-9 septiembre 2011siguiente, que está en el mismo segmento <strong>de</strong> transacción.También se utiliza una variante <strong>de</strong>l benchmark anterior<strong>de</strong>nominado accesos aleatorios. Cada hilo calculaun par <strong>de</strong> valores aleatorios, los cuales sirvenpara <strong>de</strong>terminar la posición a la que se acce<strong>de</strong> enuna matriz. Al igual que el benchmark anterior elespacio <strong>de</strong> hilos tiene tantos elementos como la matriz.Cada hilo realiza alre<strong>de</strong>dor <strong>de</strong> 20 operacionesaritméticas para el cálculo <strong>de</strong> los índices aleatorios.VI. Resultados experimentalesEn esta sección presentamos los resultados obtenidospor nuestros benchmarks, estudiando su relacióncon los <strong>de</strong>talles <strong>de</strong> la arquitectura Fermi comentadosen secciones previas.A. Acceso coalescenteA.1 Kernels pequeños sin reutilización <strong>de</strong> datosEn la tabla I se muestran los tiempos <strong>de</strong> ejecución<strong>de</strong> la reducción <strong>de</strong> vectores. Por el tamaño <strong>de</strong> datos<strong>de</strong> entrada escogido, el número <strong>de</strong> hilos por bloquetiene que ser como mínimo <strong>de</strong> 32. <strong>La</strong> implementación<strong>de</strong> la reducción presenta un patrón coalescente, don<strong>de</strong>no existe reutilización <strong>de</strong> datos entre hilos y cadahilo apenas tiene carga computacional, únicamentepara calcular las posiciones <strong>de</strong> trabajo en el vector.<strong>La</strong> tabla I confirma el resultado general predicho enla sección III: el mejor tamaño <strong>de</strong> bloque es el menorque maximiza la ocupación, es <strong>de</strong>cir 192.<strong>La</strong> tabla II muestra los tiempos <strong>de</strong> ejecución parala suma <strong>de</strong> matrices con las diferentes geometríasconsi<strong>de</strong>radas. Los resultados correspondientes a bloques<strong>de</strong> hilos que maximizan la ocupación <strong>de</strong> los SMsestán resaltados en negrita. Los resultados son similaresal caso anterior, obteniendo el mejor tamaño<strong>de</strong> bloque en 192 hilos. El tiempo <strong>de</strong> ejecución crecerápidamente al reducir el número <strong>de</strong> columnas por<strong>de</strong>bajo <strong>de</strong> 32 y no aprovecharse el efecto <strong>de</strong> coalescencia.No se reflejan en la tabla bloques con menos<strong>de</strong> 8 columnas por problemas <strong>de</strong> espacio. Siguen laten<strong>de</strong>ncia esperada.Los experimentos realizados <strong>de</strong>sactivando lacaché L1 no muestran un impacto significativo sobrelos resultados. Se reduce la cantidad <strong>de</strong> datos porsegmento a cambio <strong>de</strong> aumentar proporcionalmenteel número <strong>de</strong> éstos.A.2 Reutilización intensiva <strong>de</strong> datosEn la tabla III se muestran los resultados para lamultiplicación <strong>de</strong> matrices. Con menos <strong>de</strong> 32 columnas<strong>de</strong> hilos, el tiempo <strong>de</strong> ejecución aumenta rápidamenteya que el patrón <strong>de</strong> acceso ya no es coalescenteen la primera matriz (se omiten dichos resultados enla tabla). Debido a la reutilización <strong>de</strong> los datos <strong>de</strong> lasdos matrices <strong>de</strong> entrada, bloques más gran<strong>de</strong>s tienenmás posibilida<strong>de</strong>s <strong>de</strong> reutilizar las mismas líneas <strong>de</strong>caché. Los mejores resultados se obtienen con 768 hilos,los bloques más gran<strong>de</strong>s que maximizan la ocupación.Respecto a la geometría, para bloques <strong>de</strong> hilos conel mismo tamaño los mejores resultados se obtienenreduciendo el número <strong>de</strong> filas aumentando correspondientementeel número <strong>de</strong> columnas. Esta ten<strong>de</strong>nciase mantiene hasta geometrías <strong>de</strong> una fila don<strong>de</strong> lostiempos vuelven a incrementarse <strong>de</strong>bido a que en estealgoritmo domina la pérdida completa la reutilización<strong>de</strong> los datos <strong>de</strong> la segunda matriz <strong>de</strong> entrada.B. Accesos no coalescentes<strong>La</strong> tabla IV muestra los tiempos <strong>de</strong> ejecución paraeste benchmark. Es un kernel sin un patrón <strong>de</strong> memoriacoalescente y con muy poca carga <strong>de</strong> computacionalpor hilo. Como se discutió en la sección III-A.3 este tipo <strong>de</strong> códigos funcionan mejor por <strong>de</strong>bajo<strong>de</strong> máxima ocupación. Esto es <strong>de</strong>bido a que: (1) laslatencias producidas por la gran cantidad <strong>de</strong> segmentossolicitados no se pue<strong>de</strong>n ocultar con el máximonúmero <strong>de</strong> warps por SM, es <strong>de</strong>cir, 48 y (2) reduciendoel número <strong>de</strong> warps por SM se <strong>de</strong>crementael número total <strong>de</strong> segmentos solicitados simultáneamente,aliviando el cuello <strong>de</strong> botella que serializa losaccesos a memoria global.Por último en la tabla V se observan los resultadosobtenidos para el código con accesos aleatorios.Este algoritmo utiliza <strong>de</strong>masiados recursos por SM,por lo que bloques <strong>de</strong> 1024 hilos llevan a una ocupaciónnula, marcados con asteriscos en la tabla. Esteprograma tiene una carga media en cuanto a operacionesaritméticas por acceso a memoria se refiere.<strong>La</strong>s latencias <strong>de</strong> los accesos se balancean con el tiempo<strong>de</strong> cómputo en otros warps. Por tanto, los mejoresresultados vuelven a obtenerse con los bloques máspequeños <strong>de</strong> máxima ocupación (192 hilos). Al nohaber coalescencia, los resultados <strong>de</strong>pen<strong>de</strong>n exclusivamente<strong>de</strong>l tamaño <strong>de</strong> bloque, no <strong>de</strong> su geometría.<strong>La</strong> <strong>de</strong>sactivación <strong>de</strong> la caché L1 reduce el tamaño<strong>de</strong> los segmentos <strong>de</strong> transacción a una cuarta parte.Por tanto, en patrones dispersos o aleatorios don<strong>de</strong>apenas exista reutilización <strong>de</strong> segmentos, un menortamaño <strong>de</strong> estos disminuye el tráfico <strong>de</strong> datos entrelas distintas memorias y alivia los cuellos <strong>de</strong> botella.En el caso <strong>de</strong> accesos dispersos regulares se consigueuna mejora <strong>de</strong> rendimiento <strong>de</strong> entre 20-40 % para diferentestamaños <strong>de</strong> bloques. Para los accesos aleatorios,la mejora no es significativa ya que la alta cargacomputacional en los warps se solapa con los tiempos<strong>de</strong> trasferencia.VII. Trabajo relacionado<strong>La</strong> estrategia más común a la hora <strong>de</strong> implementarun código CUDA es seleccionar bloques <strong>de</strong> hiloscuyos tamaños consigan maximizar la ocupación <strong>de</strong>los SMs. El objetivo <strong>de</strong> maximizar la ocupación esreducir las latencias en los accesos a memoria global[1]. Este trabajo sigue la ten<strong>de</strong>ncia habitual <strong>de</strong>seleccionar bloques cuadrados cuyas cardinalida<strong>de</strong>sson potencias <strong>de</strong> dos con el objetivo <strong>de</strong> facilitar laimplementación <strong>de</strong> los códigos. El impacto <strong>de</strong> geometríasno cuadradas, así como las cardinalida<strong>de</strong>s <strong>de</strong>las dimensiones correspondientes a potencias <strong>de</strong> tres,<strong>JP2011</strong>-684

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!