0% encontró este documento útil (0 votos)
16 vistas24 páginas

Método de Vórtices en GPU para Simulaciones

El documento presenta el método de vórtices aplicado en GPUs, destacando su eficiencia en comparación con CPUs y el uso de APIs como CUDA C y OpenCL. Se discuten las ecuaciones de difusión y vorticidad, así como técnicas de transporte y advección semi-lagrangiana. Además, se muestra un ejemplo de implementación de un kernel CUDA para resolver ecuaciones de calor en un entorno de programación paralela.

Cargado por

juliansagredo
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
16 vistas24 páginas

Método de Vórtices en GPU para Simulaciones

El documento presenta el método de vórtices aplicado en GPUs, destacando su eficiencia en comparación con CPUs y el uso de APIs como CUDA C y OpenCL. Se discuten las ecuaciones de difusión y vorticidad, así como técnicas de transporte y advección semi-lagrangiana. Además, se muestra un ejemplo de implementación de un kernel CUDA para resolver ecuaciones de calor en un entorno de programación paralela.

Cargado por

juliansagredo
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Método de Vórtices en el GPU

Julián T. Becerra Sagredo

Carlos Málaga
Motivación
A lo largo de la última década, los GPUs (Graphics Processing Units)
se volvieron órdenes de magnitud más rápidos que los CPUs

APIs: CUDA C, OpenCL


CPU y GPU
Memoria 3D
Programación Ideal en GPU
Uso masivo de L2 - Operaciones locales - Un resultado a RAM

L2 fetch

Operaciones locales en registers

GPU RAM
Templete @T 2
=r T
Ecuación de difusión (calor) @t
Diferencias finitas centradas y avance explícito en t

MPI-CUDA C

MPI-OpenCL

MPI = message passing interface para CPUs


GPU GPU GPU GPU
GPU GPU GPU GPU
CPU CPU CPU CPU

MPI
CUDA Kernel
__global__ void solveheat_kernel (int ni, int nj, float kcond, float dt,
float dx, float dy, float *t_data, float *t_data_old)
{
int i, j, i2d, i2d2, i2d3, i2d4, i2d5;
float told,tnow,tip1,tim1,tjp1,tjm1;

i = blockIdx.x*TILE_I + threadIdx.x;
j = blockIdx.y*TILE_J + threadIdx.y;

i2d = i + j*ni;
i2d2 = (i+1) + (j)*ni;
i2d3 = (i-1) + (j)*ni;
i2d4 = (i) + (j+1)*ni;
i2d5 = (i) + (j-1)*ni;

told = t_data_old[i2d];
tip1 = t_data_old[i2d2];
tim1 = t_data_old[i2d3];
tjp1 = t_data_old[i2d4];
tjm1 = t_data_old[i2d5];

tnow = told + dt*kcond*((tip1-2.0f*told+tim1)/(dx*dx)


+ (tjp1-2.0f*told+tjm1)/(dy*dy));
t_data[i2d] = tnow;
}
Ecuaciones de Vorticidad en 2D
Dω 2 2
= ν∇ ω ∇ ψ = −ω
Dt
Flujo de Vorticidad

@! @
⌫ = (v · s)
@n @t
Vórtices y Partículas
Transporte

Volumen finito multidimensional (MoT)

Finite Volumes Method of Transport


(a) (b)
Ecuaciones de Transporte

Derivada Total del Tiempo (Derivada Material)

Posición Trayectoria

Velocidad
Advección Semi-lagrangiana de Alta Resolución

t+∆ t

t
Mapeo No Lineal
Z-Splines (Base de Colocación de Diferencias Finitas Compactas)
Transporte de un Escalar

D↵
=0
Dt

dx
=v
dt
Multigrid

@
2
∇ ψ = −ω = (r2 + !)
@t
Multigrid
Dipolos
Doubly periodic shear layer
Re = 10,000
Doubly periodic shear layer
Vortex Method

KRLNS - 1200s en 311GHz


VM -1190s en 345GHz

77.6s (15.4X) en 3945GHz


(3584 cuda cores)
Motivación
Motivación

También podría gustarte