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 2011Fig. 2. Un hilo secuencial ejecutando n ∗ m voxels <strong>de</strong> un slice.Fig. 1. Esquema <strong>de</strong> la arquitectura Fermi <strong>de</strong> NVIDIA.El lenguaje <strong>de</strong> programación utilizado para lasGPUs <strong>de</strong> Nvidia se <strong>de</strong>nomina CUDA (Compute UnifiedDevice Architecture) [11]. El lenguaje CUDA esmuy similar al lenguaje estándar C con la inclusión<strong>de</strong> algunas extensiones. En un programa escrito enCUDA po<strong>de</strong>mos diferenciar dos partes principales.<strong>La</strong> parte host que se ejecuta secuencialmente en laCPU, y la parte <strong>de</strong>vice que es ejecutada en la GPU enforma <strong>de</strong> funciones <strong>de</strong>nominadas Kernels. Un kernelsigue el mo<strong>de</strong>lo <strong>de</strong> ejecución SPMD (Single-ProgramMultiple-Data), don<strong>de</strong> un gran número <strong>de</strong> hilos seejecutan en paralelo. El programador organiza estoshilos en bloques <strong>de</strong> hilos (ver figura 1). Estos hilospue<strong>de</strong>n compartir datos y sincronizarse entre sí, sinembargo, no existen primitivas <strong>de</strong> sincronización entrehilos <strong>de</strong> distintos bloques, y la única manera <strong>de</strong>compartir datos es a través <strong>de</strong> la memoria principal<strong>de</strong> la GPU. A<strong>de</strong>más los bloques <strong>de</strong> hilos se agrupanen Grids. Todos los hilos que forman un Grid ejecutanel mismo kernel.III. Descripción <strong>de</strong> la aplicación BedpostEn esta sección <strong>de</strong>scribimos la aplicación secuencialBedpost perteneciente al software FSL [12],<strong>de</strong>sarrollada en el Centro <strong>de</strong> Investigación FMRIB<strong>de</strong> la <strong>Universidad</strong> <strong>de</strong> Oxford. El algoritmo 1 muestrael pseudocódigo <strong>de</strong> la aplicación Bedpost. Todoslos slices asociados con la imagen <strong>de</strong> un sujeto sonrecorridos secuencialmente procesando cada uno <strong>de</strong>sus voxels (véase figura 2). Este procesado consisteen dos partes bien diferenciadas:1. Aproximación inicial <strong>de</strong>l valor <strong>de</strong> los parámetrosmediante el algoritmo LevenbergMarquardt.2. El algoritmo <strong>de</strong> Monte Carlo con ca<strong>de</strong>nas <strong>de</strong>Markov (MCMC) para estimar el valor <strong>de</strong> losparámetros (también <strong>de</strong>scrito en el pseudocódigo<strong>de</strong>l algoritmo 1).En la primera etapa se aproximan los parámetrosa un valor inicial para facilitar que algoritmo MCMCpueda hacer una buena estimación. El mecanismo sebasa en un procedimiento iterativo <strong>de</strong> optimización.<strong>La</strong> segunda etapa toma como entrada los valorescalculados en la etapa anterior, aproximando conmás certeza la orientación final <strong>de</strong> la fibra en cadavoxel. Para ello, se utiliza el algoritmo MCMCdon<strong>de</strong> se proponen muestras para cada uno <strong>de</strong> losparámetros, generando para ello números aleatorios(los cuales son ajustados a una distribución normalestándar), aceptando o rechazando la muestra segúnun criterio que viene dado por el valor que toma laecuación 1, la cual se recalcula cada vez que se proponeun nuevo parámetro.El número <strong>de</strong> parámetros a estimar <strong>de</strong>pen<strong>de</strong> <strong>de</strong> lacantidad <strong>de</strong> fibras (f) que <strong>de</strong>seamos mo<strong>de</strong>lar en cadavoxel. Este número viene dado por la ecuación 2+3f.Por <strong>de</strong>fecto f = 2, y f no suele ser mayor <strong>de</strong> 4, es<strong>de</strong>cir, tenemos entre 8 y 14 parámetros.Los datos <strong>de</strong> entrada <strong>de</strong>l algoritmo Bedpost , es<strong>de</strong>cir, el número <strong>de</strong> slices, voxels, y gradientes <strong>de</strong>difusión viene dado en el tiempo <strong>de</strong> adquisición <strong>de</strong>las imágenes <strong>de</strong> resonancia, según el factor calidad/tiempoque se <strong>de</strong>see en los datos obtenidos.IV. Diseño <strong>de</strong> la aplicación Bedpost enCUDAUna primera alternativa <strong>de</strong> diseño paralelo <strong>de</strong>Bedpost viene motivada por la naturaleza paralela<strong>de</strong> todos los slices. Esta es la filosofía que siguen los<strong>de</strong>sarrollares <strong>de</strong> FSL [13], pudiendo hacer uso <strong>de</strong> variosprocesadores diferentes mediante el uso <strong>de</strong> Sun-GridEngine (SGE) [14], procesando cada uno <strong>de</strong> ellosun slice <strong>de</strong> manera in<strong>de</strong>pendiente. Este diseño, sinembargo, implica una gran carga <strong>de</strong> trabajo a cadaprocesador o hilo <strong>de</strong> ejecución, y por tanto no seadapta bien al mo<strong>de</strong>lo <strong>de</strong> ejecución CUDA, ya que requiere<strong>de</strong> una paralelización <strong>de</strong> la aplicación con unagranularidad mucho más fina, para así po<strong>de</strong>r sacarpartido <strong>de</strong> los miles <strong>de</strong> hilos que es capaz <strong>de</strong> ejecutaren paralelo.Un enfoque alternativo <strong>de</strong> diseño es <strong>de</strong>scen<strong>de</strong>r alnivel <strong>de</strong> voxels. Un slice pue<strong>de</strong> contener miles <strong>de</strong>voxels, y a<strong>de</strong>más se pue<strong>de</strong>n computar <strong>de</strong> forma in<strong>de</strong>pendiente,por lo que podríamos tener un hilo<strong>JP2011</strong>-161

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

Saved successfully!

Ooh no, something went wrong!