Solución GPU para la simulación y análisis de trayectorias de partículas en...

19
Radio Observatorio de Jicamarca Instituto Geofísico del Perú SOLUCIÓN GPU PARA LA SIMULACIÓN Y ANÁLISIS DE TRAYECTORIAS DE PARTÍCULAS EN PLASMAS IONOSFÉRICOS DANIEL SUÁREZ MUÑOZ INVESTIGACIÓN, DESARROLLO E INNOVACIÓN SETIEMBRE 2011

Transcript of Solución GPU para la simulación y análisis de trayectorias de partículas en...

Radio Observatorio de Jicamarca

Instituto Geofísico del Perú

SOLUCIÓN GPU PARA LA

SIMULACIÓN Y ANÁLISIS DE

TRAYECTORIAS DE PARTÍCULAS

EN PLASMAS IONOSFÉRICOS

DANIEL SUÁREZ MUÑOZINVESTIGACIÓN, DESARROLLO E INNOVACIÓN

SETIEMBRE 2011

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

RESUMEN

Con el propósito de incluir los efectos de colisiones de Coulomb en los modelos espectralesde las señales de radar de dispersión incoherente, Milla & Kudeki[1] desarrollaron un pro-cedimiento Monte Carlo para calcular el espectro de dispersión incoherente para diferentesconfiguraciones de plasma. Este procedimiento esta basado en la simulación de trayectoriasde partículas cargadas en plasmas de oxígeno (O+), helio (He+) e hidrógeno (H+), una tareaque requiere una alta potencia de computo. En este informe se exponen las consideracionesde la simulación y su implementación usando la tecnología GPU (Graphic Processing Unit)que es una alternativa para realizar computo de alto desempeño. La GPU utilizada para esteproyecto es la NVIDIA Tesla C1060 la cual cuenta con la arquitectura de computo paraleloCUDA (Compute Unified Distributed Architecture) con capacidad de procesamiento multihi-lo, donde cada hilo de procesamiento (thread) simula la trayectoria de una partícula (electróno ion) para un determinado set de condiciones iniciales y parámetros del plasma. El resultadode la simulación son series de tiempo en tres dimensiones de las velocidades y posiciones dela partícula, estos resultados son usados para la estimación del espectro de dispersión incohe-rente. La descripción del algoritmo propuesto y los resultados obtenidos son expuestos en estereporte.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

ii

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

ÍNDICE

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2. Descripción del Proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

3. Marco Teórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.1. Movimiento de la Partícula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.2. Consideraciones de la Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

4. Introducción GPGPU - CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44.1. GPGPU - Computo de Propósito General en GPU . . . . . . . . . . . . . . . . . . . . . . 44.2. CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

4.2.1. Arquitectura CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44.2.2. Modelo de Programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

4.3. Recursos de Hardware GPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

5. Simulación Monte Carlo de Trayectoria de Partículas . . . . . . . . . . . . . . . . . . . 95.1. Simulación Monte Carlo en CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.2. Simulación Monte Carlo en GPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

5.2.1. Generación de Números Aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.2.2. Manejo de memoria y consideraciones de Optimización . . . . . . . . . . . . . . . . 10

6. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116.1. Generación de Aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116.2. Simulación Monte Carlo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

7. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

8. Recomendaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

A. Requisitos de Software e Instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14A.1. Requisitos de Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14A.2. Instalación de CUDA en Linux Ubuntu: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

A.2.1. CUDA - Guía de Instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14A.2.2. Archivo grub.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14A.2.3. Archivo bashrc y Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15A.2.4. Listado de tarjetas gráficas que soporten CUDA . . . . . . . . . . . . . . . . . . . 15

B. Codificación del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

C. Programa en Python para visualización de las Trayectorias e Histogramas de Veloci-dades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

D. Validación de Números Aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

iii

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

SOLUCIÓN GPU PARA LA SIMULACIÓN Y ANÁLISIS DETRAYECTORIAS DE PARTÍCULAS EN PLASMAS

IONOSFÉRICOS

1. IntroducciónRecientemente, Milla & Kudeki [1] han desarrollado un método para el cálculo del espectro de las

señales de radar de dispersión incoherente el cual incluye los efectos de colisiones de Coulomb entrepartículas que conforman un plasma. Este método fue implementado para el caso de plasmas de iones deoxigeno (O+), tipo de ión que predomina en las regiones alrededor y por debajo del pico de la región F dela ionósfera. Con el fin de extender el modelo para plasmas de helio (He+) e hidrógeno (H+) presentes enlas capas altas de la ionosfera, es necesario realizar múltiples simulaciones de trayectorias de partículas(tanto de iones y de electrones) para distintas configuraciones de plasmas, y con los resultados elaboraruna librería de funciones de autocorrelación de las trayectorias (ACFs).

Debido a que la simulación requiere de una alta capacidad de computo en un inicio se desarrolló unasolución por Milla & Kudeki [1] para correr las simulaciones en un entorno de cluster de computadoras,el Turing Cluster, mantenido y desarrollado por el Programa de Ingeniería y Ciencias Computacionalesde la Universidad de Illinois. Debido a las restricciones y limitaciones del uso del cluster se decidióque es conveniente realizar la simulación usando una tecnología alternativa, en este caso, unidades deprocesamiento gráfico GPUs, tecnología que en los últimos cinco años ha marcado una revolución enel computo científico y de alta performance. El uso de estas unidades es ahora más sencillo ya queactualmente se puede interactuar y derivar computo a estas unidades mediante lenguajes de programaciónestándar, como el C/C++. Además de su facilidad de interacción mediante el lenguaje de programación,también trae consigo una alta capacidad de computo, que es alcanzada a un bajo coste económico yenergético.

Este reporte describe la solución para la simulación de trayectorias de partículas empleando el métodode Monte Carlo en un ambiente GPU, donde también se expone brevemente sobre la arquitectura CUDA,que es la más promocionada y usada en el mercado para computo científico. Este desarrollo abre unaoportunidad de conocimiento y experiencia con la tecnología GPU, de la cual se espera un alto desempeñopara distintas aplicaciones o necesidades de computo requeridas en el Radio Observatorio de Jicamarca.

2. Descripción del ProyectoEl presente reporte es parte del primer proyecto desarrollado en el Radio Observatorio de Jicamarca

usando la reciente tecnología de Procesadores Gráficos para satisfacer la alta demanda de computo re-querida por las simulaciones de trayectorias y cálculo de funciones de autocorrelación. Este proyecto estaconstituido de las siguientes etapas:I. Desarrollo de rutinas para simulación de trayectorias de partículas en un sistema GPUII. Optimización del cálculo de las trayectorias de partículas en GPUIII. Desarrollo de rutinas para el análisis estadístico de las trayectorias de partículas en un sistema

GPUIV. Cálculo de histogramas de velocidades y desplazamientosV. Desarrollo de una base de datos de las estadísticas de las simulacionesEn este reporte se describen las Etapas I y II. Además se presenta el marco teórico, se hace una descripciónde los procesadores gráficos: arquitectura, manejo de memoria, consideraciones de optimización y sepresentan los resultados alcanzados usando esta tecnología.

El énfasis en las primeras dos etapas del proyecto se centra en la simulación de trayectorias de partícu-las. Las etapas III y IV tienen énfasis en el análisis estadístico del resultado de las simulaciones realizadasen las etapas I y II. La V etapa de este proyecto tiene como fin implementar una base de datos con laestadística de las simulaciones, para este punto se debe haber alcanzado un desempeño óptimo de todaslas etapas anteriores, donde se habrán conjugado múltiples unidades de procesamiento.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

1

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

3. Marco TeóricoLas simulaciones de trayectorias realizadas en un entorno GPU basan su implementación en un modelo

que considera el efecto de las colisiones que sufren las partículas: electrones o iones en un ambiente deplasma ionizado donde también se considera el efecto del campo magnético. La simulación tambiénrequiere ciertas especificaciones o consideraciones a tener en cuenta para lograr un resultado valido,acorde al contexto de la simulación definida inicialmente por ciertos parámetros.

3.1. Movimiento de la Partícula

�vn+1 = �vn+q

m�vn× �B�t−β(vn)�t�vn+

�D�(vn)�tN1v̂�+

�D⊥(vn)

�t

2N2v̂⊥1+

�D⊥(vn)

�t

2N3v̂⊥2 (1)

�rn+1 = �rn +�vn+1 + �vn

2�t (2)

Donde:q: carga eléctrica de la partícula, electrón o iónm: masa de la partícula�B: campo magnéticov̂: vectores unitarios paralelos y perpendiculares a �B

β: coeficiente de fricciónD�, D⊥: coeficientes de difusión paralelos y perpendiculares a �B

N1, N2, N3: números aleatorios con distribución gaussianaLos efectos de las colisiones de Coulomb sobre el movimiento de la partícula son modelados usando laecuación discreta de Langevin [1], indicada por las ecuaciones discretas (1) y (2), en esta formula recursivalos efectos de las colisiones son representados por fuerzas aleatorias de difusión con coeficientes tomadosdel modelo Fokker-Planck de Rosenbluth [2].

3.2. Consideraciones de la Simulación

Las trayectorias de una partícula son simuladas para un entorno que corresponde a la región-F de laionósfera, donde se considera un plasma homogéneo con la presencia de un campo magnético Bo, esteplasma posee densidad de electrones Ne, temperatura de electrones e iones Te y Ti. Valores habituales deBo, Ne, Ti y Te están definidos en la siguiente tabla.

Parámetro ValorDensidad de Electrones Ne 1012 m−3

Campo Magnético Bo 25µTTemperatura de Electrón Te 1000K

Temperatura de Ion Ti 1000KComposición de Ion O+

Cuadro 1: Parámetros típicos para región-F de la ionósfera

En la Figura 1 se describen las tareas requeridas por la simulación.La entrada del proceso de simulación es un archivo de configuración en formato hdf5, bloques deprocesamiento, longitud de onda Bragg, carácter S o L que define los ángulos de aspecto, etc.Con la lectura del archivo de configuración se obtienen los parámetros físicos del plasma, estosse encargan de definir un caso requerido por el usuario. En este archivo también se definen losparámetros de procesamiento, simulación, cálculo de histogramas de velocidades, etc. (ver AnexoB).Los parámetros contenidos en el archivo de configuración definen las condiciones del plasma.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

2

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

La generación de números aleatorios se requiere para fijar una velocidad inicial vx,y,z[0] con valoraleatorio gaussiano donde la posición rx,y,z[0] se fija en el origen, éstas son las condiciones iniciales dela simulación. Luego, se calculan los coeficientes de fricción y de difusión de acuerdo a los parámetrosdel plasma.Las posiciones y velocidades se determinan en tres dimensiones x, y, z donde la dirección z esparalela al campo magnético. Según la ecuación (1) para el cálculo de las velocidades se requiere devalores aleatorios que definen las fuerzas aleatorias de difusión, éstas deben ser calculadas para cadamuestra, lo cual indica que se deben generar valores aleatorios para cada dimensión x, y, z.El resultado de la simulación son series de tiempo de las posiciones y velocidades de la partículaque son almacenados en secuencias de tamaño M , estos son datos de tipo coma flotante en dobleprecisión.

Figura 1: Diagrama de Bloques del proceso de simulación

Alrededor de N (109) muestras de velocidades y posiciones son requeridas por la simulación [1],teniendo en cuenta que se calculan datos en coma flotante con doble precisión, se requiere de una memoriaRAM de mas de 40GB. Para reducir el consumo de memoria se divide en secuencias L de tamaño M ,donde N = L×M , eso se indica en la Figura 2, el valor típico de M es igual a 217 y L es igual 104.

Las velocidades calculadas son usadas para comprobar los resultados de la simulación. Se requiere queestas velocidades tengan una distribución gaussiana, con las que se realiza el cálculo de histogramas paraobservar el comportamiento de la simulación.

Figura 2: Trayectoria de una partícula en la dirección z paralela al campo magnético �B.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

3

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

Las posiciones calculadas se emplearan para realizar el análisis estadístico a desarrollarse en la EtapaIII, donde se calcula la función de autocorrelación de las posiciones cada partícula. Dado que esta etapaaún no está implementada se realizará la simulación de trayectoria de partículas para un número deter-minado de secuencias que no excedan la capacidad de memoria disponible en la unidad de procesamiento.

4. Introducción GPGPU - CUDAEn los últimos años ha habido un creciente interés en las oportunidades de computo que las unidades

de procesamiento gráfico ofrecen, las cuales no solo procesan gráficos mediante un lenguaje especializadocon alto desempeño, sino que ahora existe la forma de realizar computo de propósito general en estasunidades, esto se conoce como GPGPU (General Purpose computation on Graphic Processing Unit) porsus siglas en ingles. NVIDIA es la empresa fabricante de GPUs que ha propuesto una arquitectura parafacilitar el computo de propósito general en sus unidades de procesamiento gráfico, esta arquitectura sedenomina CUDA. A continuación se realiza una descripción general de GPGPU y CUDA.

4.1. GPGPU - Computo de Propósito General en GPU

Las GPU o unidades de procesamiento gráfico son de alto rendimiento con capacidad de múltiplesprocesadores y cálculo avanzado de gran cantidad de datos. Inicialmente se creo para procesar gráficoscomputacionales, la interacción con esta unidad se realizaba mediante librerías especializadas, por ejemploOpenGl o DirectX, pero las GPUs modernas, como las de NVIDIA, permiten interacción con el desarro-llador mediante lenguaje C, C++, OpenCL, Fortran, Java y Python; con esta ventaja de por medio esposible delegar a estas unidades computo científico o de propósito general, teniendo mejor control de losrecursos involucrados, lectura/escritura arbitraria de la memoria, selección de bloques de procesamientoy más.

Para la operación de esta tecnología se requiere de un sistema de coprocesamiento heterogéneo, el queconsta de una CPU (Unidad de Procesamiento Central) y al menos una GPU, donde la parte secuencialde la aplicación se ejecuta en la CPU y las partes de mayor desempeño computacional son delegadas a laGPU mediante los kernels, que son funciones ejecutadas en un ambiente GPU.

4.2. CUDA

Por los años 2006 y 2007, NVIDIA revolucionó el mundo de las GPUs al introducir su arquitecturade cálculo paralelo masivo denominada CUDA, la cual consta de cientos de núcleos, con miles de hilosde procesamiento, con los que es posible manejar gran cantidad de datos en un instante de tiempo.

4.2.1. Arquitectura CUDA

La Figura 3, muestra la arquitectura CUDA, donde el chip GPU esta organizado como una colecciónde Multiprocesadores (MP), los cuales están divididos en Stream Processors (SP), cada SP maneja unoo varios threads (hilos de procesamiento), así también los MPs manejan uno o varios bloques de proce-samiento, cada bloque de procesamiento es un conjunto de threads que pueden ser organizados en unamatriz hasta de tres dimensiones; así mismo, los bloques de procesamiento también pueden ser organi-zados en grids que son matrices hasta de dos dimensiones. CUDA se encarga de realizar este proceso deabstracción, con lo cual solo se requiere definir los grids, bloques y threads que se desean en la ejecuciónde una operación.

Entonces, según la Figura 4, se tiene lo siguiente.Thread: Es solo la ejecución de una función (Kernel) con un índice determinado. Cada threadusa este índice para acceder a los elementos de memoria, entonces, con una colección de threads esposible acceder a todo el conjunto de datos en memoria para su procesamiento. El Thread ExecutionManager (Administrador de Ejecución de Threads) es responsable de asignar los threads a cualquierade los SP.Bloques: Es la agrupación de threads, estos se agrupan en matrices hasta de tres dimensiones, puedenser ejecutados de forma concurrente o serial sin ningún orden en particular. Es posible coordinarlos threads, tal que, usando la función __syncthreads() un thread se detiene en un cierto punto delkernel hasta que todos los demás threads dentro de un bloque lleguen a este mismo punto.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

4

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

Figura 3: Arquitectura CUDA

Grid: Es un grupo de bloques, estos se agrupan en una matriz de hasta dos dimensiones.Para un acceso y manejo de los grid, bloques y threads, CUDA entrega las siguientes variables pre-asignadas:

gridDim: contiene las dimensiones del gridblockDim: contiene las dimensiones del bloqueblockIdx : contiene el índice del bloque dentro del gridthreadIdx : contiene el índice del thread dentro del bloque

Figura 4: Grid, bloques y threads

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

5

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

La Figura 5 muestra un ejemplo del uso de las variables pre-asignadas por CUDA usadas para iden-tificar bloques y threads. En esta figura se observa un Grid, con tres bloques unidimensionales, estosson indicados con la variable blockIdx.x, la dimensión de cada bloque es igual a cinco, indicado porla variable blockDim.x, cada bloque tiene agrupados cinco threads donde cada thread tiene un iden-tificador local dentro del bloque, el cual es indicado por threadIdx.x. Los threads también poseen unidentificador global los cuales son definidos mediante el uso compuesto de las variables como indicablockIdx.x ∗ blockDim.x + threadIdx.x, con esto es posible acceder a distintos elementos en memoriadireccionados con estos identificadores.

Figura 5: Identificadores en CUDA

Dentro de la arquitectura también se cuenta con distintos tipos de memoria.global : La memoria global es la de mayor capacidad, y es accedida por todos los threads de todoslos bloques.shared : La memoria compartida es de menor latencia que la memoria global, es accedida por losthreads de un mismo bloque, los threads de bloques diferentes no pueden acceder a esta memoria.constant : La memoria constante se utiliza para datos que no cambian en la ejecución del kernel, sise utiliza en lugar de la global se reduce el ancho de banda de la memoria requerida.texture: La memoria de textura es otra variedad de memoria de solo lectura que se usa para mejorar elrendimiento y reducir el trafico de memoria. Aunque fue diseñada originalmente para las aplicacionesgráficas, también puede ser utilizada en algunas aplicaciones de cálculo en la GPU.

4.2.2. Modelo de Programación

El modelo de programación de CUDA divide los problemas en sub-problemas asignados a los grids,éstos luego son dividos en sub-tareas que son ejecutadas por los bloques. El programador escribe uncódigo C para un programa en CUDA que invoca al kernel, este es ejecutado por miles de threads, queel programador organiza en una jerarquía, ver Figura 6.

En la Figura 7 se describe un programa en CUDA que se compone de dos partes, una parte secuencialque es asignada al host (CPU) y otra parte que presenta alta demanda de paralelismo que se asigna aldevice (GPU). Entonces un programa en CUDA es la unificación de código fuente que abarca tanto alhost y al device.

En un ambiente Linux, el compilador NVCC de NVIDIA separa el lado del host y del device en elproceso de compilación. El código del host está escrito en lenguaje C estándar que es compilado porGCC/G++. El código para el device también está escrito en lenguaje C estándar, con palabras clavespara identificar los kernels y sus estructuras de datos asociadas, esta sección de código es compilado porNVCC.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

6

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

Figura 6: Jerarquía de memoria

Figura 7: Ejecución de un programa CUDA

4.3. Recursos de Hardware GPU

El Radio Observatorio de Jicamarca cuenta con tarjetas Tesla C1060, las características de estastarjetas se presentan en el Cuadro 2.

Estas características son tomadas en cuenta para considerar apropiadamente el número de threads,bloques, grids, la capacidad de computo y recursos en memoria que están disponibles para realizar lasimulación de trayectoria de partículas.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

7

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

Especificación DescripciónChip Tesla T10 GPU

Clock Processor 1296 MHzGlobal Memory 4 GB

Shared Memory/Block 16 KbConstant Memory 64 KbTexture Memory 256 bytes

Register(32 bits)/Block 16384Memory Bandwidth 102 GB/s

Memory I/O 512 bits GDDR3Max. Threads/Block 512

Max. Dim. Block 512x512x64Max. Dim. Grid 65535x65535x1

CUDA Driver Version 3.2CUDA Runtime Version 3.2

CUDA Cores 240Board Power 187.8 W

Cuadro 2: Características NVIDIA Tesla C1060

Ya que se requieren 104 secuencias de 217 muestras de la trayectoria de una partícula es convenienterealizar un previo análisis de los recursos a utilizar en la GPU. Estos recursos implican en primer lugar lacantidad de memoria disponible para el almacenamiento de las posiciones y velocidades de una partícula,esto esta dado por la siguiente ecuación

GM = variables× dim×Nsmp× dataType× nThread× nBlock (3)

donde,GM : cantidad de memoria global requerida por la simulación,variables: son 2 variables: posición y velocidad de la partícula,dim: indica las dimensiones de cada variable, en este caso son 3 dimensiones (x, y, z),Nsmp: número total de muestras de las posiciones y velocidades de la particula, igual a 217,dataType: tipo de dato en coma flotante de doble precision, 8 bytes,nThread : indica el numero threads/bloque,nBlock : indica el numero total de bloques.

Se debe elegir adecuadamente el número threads/bloque y el total de bloques a utilizar:1. nThread, se cuenta con un numero de 16384 registros de 32 bits por cada bloque, estos registros

se asignan como memoria local para los threads de un bloque, ya que nuestros datos a calcularson de tipo coma flotante de doble precisión, el número total de registros disponibles sera de 8192.Entonces,

si nThread igual a 512 —> se tienen disponibles 16 registros por cada thread,si nThread igual a 256 —> se tienen disponibles 32 registros por cada thread,si nThread igual a 128 —> se tienen disponibles 64 registros por cada thread.

2. nBlock, al elegir el número de bloques es necesario tomar en cuenta la cantidad de memoria globalpara almacenar las posiciones y velocidades de la partícula, entonces a partir de la ecuación (3)podemos determinar el valor de nBlock, donde se sabe que la cantidad de memoria global disponibleen la GPU es de 4 GB según el Cuadro 2. Entonces,

si nThread igual a 512 —> nBlock = 1.27,si nThread igual a 256 —> nBlock = 2.54,si nThread igual a 128 —> nBlock = 5.08,

Según los requerimientos de la simulación y las consideraciones de los puntos 1 y 2, se elige nThread =128, nBlock = 4; esto hace un total de 512 threads en operación, donde los threads evalúan posiciones yvelocidades de la partícula independientes entre si.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

8

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

5. Simulación Monte Carlo de Trayectoria de PartículasLa simulación Monte Carlo es una técnica computacional estadística que mediante modelos mate-

máticos simula el comportamiento aleatorio de sistemas reales. Combina conceptos estadísticos con lacapacidad que tienen los computadores para generar números pseudo aleatorios y automatizar cálculos.Este método requiere lo siguiente.

1. Crear un modelo matemático del sistema que se quiere analizar, en nuestro caso la ecuación simpli-ficada de Langevin (1).

2. Identificar las variables cuyo comportamiento aleatorio determina el comportamiento del sistema;las fuerzas de difusión que afectan a la partícula son de naturaleza aleatoria.

3. Se lleva a cabo un experimento consistente en generar muestras aleatorias para determinar las salidasdel sistema, en este caso las variables de salida son las posiciones y velocidades de la partícula.

4. Tras repetir n veces este experimento, dispondremos de n observaciones sobre el comportamientodel sistema.

5. Nuestro análisis será tanto mas preciso cuanto mayor sea el numero de n experimentos que llevemosa cabo.

Para entender lo importante de usar CUDA (Compute Unified Distributed Architecture) es necesariosaber cual es el desempeño de la simulación en el ambiente de una CPU (unidad de procesamiento central),es por ello que esta sección inicia con una breve descripción del proceso de la simulación implementadoen una CPU. Luego se expone el desarrollo de la simulación en un ambiente GPU con los recursos dehardware disponibles en el laboratorio de computo del Radio Observatorio de Jicamarca.

5.1. Simulación Monte Carlo en CPU

Dado que no es posible contar con toda la cantidad total de memoria para almacenar todas las veloci-dades y posiciones de una partícula, éstas se calculan en bloques, es decir, solo un número determinado desecuencias de 217 son calculadas de acuerdo a la capacidad de memoria RAM, los resultados se podríanalmacenar en disco, y la memoria RAM se reutiliza para el siguiente bloque de secuencias. Esta imple-mentación se realizó para evaluar la potencia de computo de la GPU con respecto a la CPU. Si bien escierto que la CPU puede poseer un clock de procesamiento mucho más veloz, no le es posible atender unagran cantidad de datos a la vez ya que su operación es secuencial, es decir se ejecuta una sola operacióna la vez.

Para el caso de la simulación se requiere el uso de múltiples loops, un primer loop para el número desecuencias, un segundo loop para todos las muestras de posición y velocidad de la partícula, y un tercerloop para un bucle interno entre cada posición de la partícula que está determinado por las fuerzas defricción y difusión que afectan la trayectoria de la partícula. Estos loops afectan el costo computacionaldel procesamiento.

5.2. Simulación Monte Carlo en GPU

5.2.1. Generación de Números Aleatorios

Según la ecuación de Langevin descrita en la ecuación (1), se requiere de números aleatorios condistribución gaussiana, media cero y varianza igual a uno para simular el efecto aleatorio de las fuerzasde difusión sobre la partícula. Para este requerimiento de generación de aleatorios se ha visto convenientehacer uso de una técnica denominada Mersenne Twister que ha sido adaptada para procesadores gráficos- MTGP (Mersenne Twister for Graphic Processors) [? ].

Este método genera números pseudo-aleatorios en la memoria global de la GPU. Consta de gene-radores que utilizan la memoria compartida para almacenar sus estados internos, y también utiliza lamemoria constante como una tabla de búsqueda para una transformación lineal. Los formatos de salidadel generador son enteros de 32 bits, coma flotante de simple precisión, y enteros de 64 bits, coma flo-tante en doble precisión. Las ventajas de utilizar este método radican en la velocidad en que se generanlos aleatorios y la alta periodicidad que poseen las secuencias generadas, para el caso implementado laperiodicidad es 211213 − 1.

Para utilizar este método es necesario seguir los siguientes pasos según el código disponible pordescarga desde la web del autor [3].

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

9

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

1. Compilación previa de los archivos mtgp64-fast.c, mtgp64-fast.h, lo cual genera un archivo ejecutablemtgp64-fast.o. Los archivos con la codificación en C serán adjuntados a este informe.

2. Asigna a memoria constante de la GPU los parámetros del generador definidos en mtgp64dc-param-11213.c para un periodo 211213 − 1.

3. Calcula estados iniciales del generador de aleatorios para todos los bloques utilizados en la ejecucióndel kernel, estos son cargados a memoria global antes de la ejecución del kernel.

4. Durante la ejecución del kernel los estados del generador son transferidos desde la memoria globalhacia la memoria compartida.

5. Se generan los números aleatorios deseados y solo el último estado del generador se escribe en lamemoria global, así se reducen los accesos hacia la memoria global y para la siguiente ejecución delkernel se garantiza aleatorios distintos para todos los bloques.

6. Este método genera en paralelo una cantidad de números aleatorios igual a tres veces la cantidadde threads por bloque, ésto es parte de su algoritmo para garantizar aleatoriedad. Cabe mencionarque para la simulación se requiere que en cada iteración se calculen tres números aleatorios paralas fuerzas de difusión en las dimensiones x, y, z, lo cual por coincidencia se ajusta muy bien alrequerimiento de la simulación.

Los aleatorios generados son almacenados en la memoria compartida, de esta forma, se reduce el uso de lamemoria global y los accesos a este tipo de memoria. Sin embargo, la generación de aleatorios se producecon una distribución uniforme, en cambio la simulación requiere de aleatorios con distribución gaussiana,por tanto es necesario una conversión de la distribución, para esto se utilizó el método de Box-Muller [4].La conversión se realiza con las siguientes consideraciones:

1. Se requieren de al menos dos números con distribución uniforme para obtener dos números condistribución gaussiana. Si se tienen 128 threads por bloque y debido a que MTGP genera aleatoriostres veces el número de threads por bloque, 384; los primeros 256 valores son utilizados directamentepara el cálculo de la conversión, pero para los últimos 128 se requiere un tratamiento especial.

2. Los últimos 128 valores deben ser convertidos usando el criterio de reducciones, con este criterio seutiliza la mitad de threads por bloque para acceder a los datos y realizar el proceso de conversiónsegún el requisito expuesto en el punto anterior.

5.2.2. Manejo de memoria y consideraciones de Optimización

La memoria global es la que posee mayor capacidad de almacenamiento pero también es la de ma-yor latencia. Los parámetros del plasma se cargan inicialmente en la memoria global, estos datos sonalmacenados en forma de Estructuras de Arreglos que permiten un patrón de acceso a datos contiguos.

Figura 8: Patrón de Acceso a Datos Contiguos

La Figura 8 presenta un ejemplo de cómo están almacenados los parámetros del plasma. Como estosvalores están almacenados en posiciones contiguas de memoria, los threads de un bloque han de acceder

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

10

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

a éstos sin mayor costo de direccionamiento. Cada thread accede a cada elemento de memoria y lo cargaa una variable local, a partir de esta variable local se realiza la lectura para el cómputo de las fuerzas dedifusión sobre la partícula.

Luego el cálculo de las velocidades y posiciones de la partícula se definen en un bucle interno entrecada muestra del experimento, en este bucle se almacenan los incrementos (delta) de velocidad y posiciónde la partícula. Los parámetros del plasma y la fuerza de difusión determinan la ejecución del bucle.Luego los datos, velocidad y posición de todas las partículas, son almacenadas en memoria global, en unprincipio se almacenaban de la forma indicada por la Figura 8, pero para efectos de la siguiente etapa(Etapa III) de procesamiento que requiere cálculo de FFT de toda la secuencia, se almacenan como loindica la Figura 9.

Si se direccionan los datos como lo indica la Figura 8, es necesario el cálculo de la Transpuesta paraordenar los datos de la forma adecuada, esto consume más recursos de memoria, con lo cual se haceineficiente. Por tanto se decide implementar un direccionamiento tal que los datos se encuentren listospara su procesamiento en la siguiente etapa.

Figura 9: Patrón de Acceso a Datos No Contiguos

6. ResultadosEl presente proyecto busca un alto desempeño para la simulación Monte Carlo de trayectorias de

partículas, este desempeño será expresado como "speed-up", que es la relación entre el tiempo de unproceso secuencial y el tiempo de un proceso paralelizado, cuanto mayor sea el speed-up mayor será eldesempeño alcanzado por el proceso paralelizable el cual ha sido implementado en la GPU.

Primero se exponen las ventajas de desempeño al utilizar MTGP para generación de aleatorios, luegose muestra el desempeño alcanzado de la simulación usando la GPU Tesla C1060 de NVIDIA.

6.1. Generación de Aleatorios

En la Figura 10 se muestra el desempeño alcanzado, speed-up, con el MTGP frente a una implemen-tación secuencial usando la técnica de Ziggurat implementada en un procesador Intel i7 2.26 GHz con12GB RAM. La figura indica el speed-up alcanzado para distintos tamaños de muestra (Nsmp) aleatorias,siendo que a mayor número de threads se tiende a un speed-up mayor. Los threads indicados por el eje xde la figura corresponden al número total de threads a utilizarse en la GPU, para el caso del cálculo enCPU, el número de threads corresponde al número de iteraciones necesarias para calcular Nsmp en unbucle de procesamiento.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

11

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

Figura 10: Speed-up, MTGP/Box-Muller vs. Ziggurat

6.2. Simulación Monte Carlo

El desempeño alcanzado por la simulación Monte Carlo en un ambiente GPU se muestra en la Figura11, donde se logra un speed-up cercano a 16 veces, para 10 mil muestras por cada thread, siendo elnúmero total de threads 8192, esto significa que se ha escogido un mayor número de bloques para reducirel número muestras por thread para ocupar un mayor número de multiprocesadores, una opción frente alrequerimiento expuesto en la sección 4.3. La simulación en el lado del CPU fue realizada en un procesadorIntel i7 2.26 GHz con 12GB RAM.

La Figura 12 muestra las posiciones de una partícula, resultado de la simulación, para un caso deter-minado por el usuario mediante el archivo de configuración, este resultado es acorde a lo esperado.

Figura 11: Speed-up Simulación Monte Carlo, GPU vs CPU

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

12

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

Figura 12: Trayectoria de una partícula, resultado de la simulación en GPU.

7. ConclusionesCUDA es una arquitectura que facilita y hace posible computo de propósito general y de altodesempeño en la unidades de Procesamiento Gráfico.Es necesario conocer adecuadamente los recursos disponibles en cada dispositivo GPU y derivar loscálculos requeridos sobre unidades de memoria que sean las más adecuadas, siendo estas la memorialocal y la memoria compartida, las de más rápido acceso para procesamiento, luego para almace-namiento o escritura de resultados se tiene la memoria global, la memoria constante se recomiendapara lectura de variables o parámetros requeridos por el kernel.Se debe tener en cuenta el direccionamiento de los threads para acceder a los datos en memoriaglobal, el uso adecuado de este direccionamiento facilita el uso de los datos, reduce el ancho debanda en el bus de datos, y evita cálculo intermedio para manejar los datos.La simulación Monte Carlo fue realizada con éxito logrando un mejor desempeño, hasta 16 vecesmas rápido que un procesador tradicional.Aún no se ha aprovechado toda la potencia de CUDA, ya que los requerimientos del proyecto(condiciones de la simulación) limitan el número de multiprocesadores a ocuparse. Se espera quepara las etapas que siguen se alcance un mejor desempeño.

8. RecomendacionesSe recomienda usar CUDA para aplicaciones de alto consumo de cómputo, con un estudio y/oanálisis previo de paralelización de la aplicación deseada.En la actualidad ya se cuenta con la versión 4.0 de CUDA, se recomienda su revisión y actualizaciónpara el cálculo de la simulación.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

13

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

A. Requisitos de Software e Instalación

A.1. Requisitos de Software

CUDA Driver, CUDA SDK, CUDA Toolkit; disponibles en la web www.nvidia.com.MTGP disponible en la pagina web del autorhttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MTGP/index.html.El código ha sido desarrollado para la versión 3.2 de CUDA.Librerías HDF5 v.1.5.6.El sistema operativo empleado para este desarrollo es Linux Ubuntu v.10.04.

A.2. Instalación de CUDA en Linux Ubuntu:

A.2.1. CUDA - Guía de Instalación

Tener instalado el paquete que contiene las librerías de OpenGL (glut-devel): sudo aptitude installfreeglut-devel.x86_64 ghc-GLUT-devel.x86_64.Verificar que este el kernel headers instalado.sudo aptitude install kernel-headers.Editar el archivo /etc/grub.conf, esto se describe en la sección A.2.2.Editar el archivo /etc/modprobe.d/blacklist.conf, el contenido del archivo debe incluir blacklistnouveau. En caso de que no exista el archivo debe ser creado.Ir a una consola vga: ctrl+altF2, [/etc/inittab level 3].Correr en una consola como root: (matar el X server y cambias a modo VGA console) - init 3Empezar la instalación del driver y del toolkit como usuario root :

• ./NVIDIA-Linux-x86_64-260.19.29.run• ./cudatoolkit_3.2.16_linux_64_ubuntu.run

Luego instalar el gpucomputingSDK: - ./gpucomputingsdk_3.2.16_linux.run.Al instalar el gpucomputingsdk en $HOME, éste creará una carpeta NVIDIA_GPU_Computing_SDK,que es donde se encuentran los ejemplos.Finalmente agregar al .bashrc de tu usuario las lineas del $PATH y $LD_LIBRARY_PATH, estose describe en la sección A.2.3.El paso final es correr el make que se encuentra dentro de la carpeta del SDK ($HOME/NVIDIA_GPU_Computing_SDK/C/),revisar sección A.2.3.

A.2.2. Archivo grub.conf

Para Ubuntu v.10.04/kernel Linux 2.6.34.7-63.fc13.x86_64/GNOME 2.30.2/Procesador Intel(R) Co-re(TM) i7 CPU 960 - 3.2GHzkernel /vmlinuz-2.6.33.3-85.fc13.x86_64 ro root=/dev/mapper/vg_daniel-lv_root rd_LVM_LV=vg_daniel/lv_root rd_LVM_LV=vg_daniel/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 rdblacklist=nouveau nouveau.modeset=0

Notas:1. Inicialmente se edita el archivo como se muestra en el párrafo anterior, pero luego desde el BOOT,

no aparece la opción de rdblacklist, se agregó, pero en este caso no funcionó.2. Luego desde el BOOT, edité directamente el kernel y le agregué: rdblacklist=nouveau nouveau.modeset=0.

ESTO SI FUNCIONA.3. Por fin se deshabilitó el nouveau.4. Satisfactoriamente se realizó la instalación del driver de CUDA y del CUDA-toolkit.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

14

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

A.2.3. Archivo bashrc y Makefile

# .bashrc# Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi# User specific aliases and functionsexport PATH=/usr/local/cuda/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:/usr/local/lib

:$LD_LIBRARY_PATH

Luego, en la carpeta $HOME/NVIDIA_GPU_Computing_SDK/C/ se ejecuta: make, en mi caso semostraba el siguiente mensajeError: /usr/bin/ld: cannot find -lXmuLa solución:

Instalar la librería Xmu: sudo aptitude install libXmu libXmu-devel.Ejecutar make y listo.

A.2.4. Listado de tarjetas gráficas que soporten CUDA

http://www.nvidia.com/object/cuda_gpus.html

B. Codificación del algoritmoLos códigos de la aplicación se adjuntan a este informe en una carpeta "MonteCarlo_Simulation".

Donde se ha definido una estructura de folders estándar para el desarrollo de software en el RadioObservatorio de Jicamarca.

C. Programa en Python para visualización de las Trayectorias eHistogramas de Velocidades

Adjunto en la carpeta "MonteCarlo_Simulation" se tiene el folder "test" donde se tiene código pythonpara la visualización de las trayectorias e histogramas de velocidades.

D. Validación de Números AleatoriosMTGP calcula por defecto números aleatorios con distribución uniforme, se le hizo una modificación

tal que estos números son convertidos a una distribución gaussiana usando la técnica de Box-Muller.A continuación se muestra la función de densidad de probabilidad para este proceso de generación de

aleatorios donde se han calculado 50 millones de aleatorios.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

15

INVESTIGACIÓN, DESARROLLO E INNOVACIÓN – RADIO OBSERVATORIO DE JICAMARCA

Figura 13: Densidad de Probabilidad MTGP/Box-Muller.

Bibliografía[1] Marco A. Milla and Erhan Kudeki. Incoherent scatter spectral theories-part ii: Modeling the spectrum

for modes propagating perpendicular to magnetic field. IEEE Transactions on Geoscience and remotesensing, 49(1):329–345, 2011. doi: 10.1109/TGRS.2010.2057253.

[2] M. N. Rosenbluth, W. M. MacDonald, and D. L. Judd. Fokker-planck equation for an inverse-squareforce. Physical Review, 107(1):1–6, 1957. doi: 10.1103/PhysRev.107.1.

[3] Mutsuo Saito. A variant of mersenne twister for graphic processors. arXiv:1005.4973v2 [cs.MS], 2010.

[4] G. E. P. Box and Mervin E. Muller. A note on the generation of random normal deviates. The Annalsof Mathematical Statistics, 29(2):610–611, 1958. doi: 10.1214/aoms/1177706645.

Apartado 13-0207, Lima 13, Perú

Teléfono (+51-1) 317-2313 – Fax (+51-1) 317-2312

16