Resolución de las ecuaciones de Navier-Stokes utilizando CUDA
Abstract
En este trabajo se propone una resolución de las ecuaciones de
Navier-Stokes para el caso de fluidos Newtonianos incompresibles
utilizando la arquitectura CUDA1 provista por NVIDIA2 . Se utiliza
para la discretización espacial un esquema de diferencias finitas en
grillas staggered (para evitar el desacople en la presión), y el
método de Pasos Fraccionados (Fractional-Step) para la integración
temporal. El paso predictor (problema de advección para las ecuaciones
de cantidad de movimiento) se resuelve utilizando el esquema de
Adams-Bashforth de segundo orden estabilizando los términos
convectivos con el método QUICK. Además, el paso de Poisson (para
imponer la incompresibilidad) es resuelto iterativamente mediante el
método de Gradientes Conjugados precondicionando al sistema utilizando
transformadas rápidas de Fourier. En presente el desarrollo se
utilizan librería estándar de CUDA para el manejo de matrices y
vectores, como ser Thrust3 y CUSP4, además de CUFFT5 para las
transformadas rápidas de Fourier. De esta forma, mediante las
herramientas aportadas por las anteriores se confeccionan los kernels
necesarios enfatizando la utilización de memoria shared, accesos
fusionados a la memoria global, reduciendo al mínimo la cantidad de
registros por thread, entre otros. A continuación se presenta una
serie de casos de estudio con el objetivo de validar el desarrollo y
de, posteriormente, comparar las performances obtenidas con
implementaciones en otras arquitecturas (CPU, unicore y multicore).
Navier-Stokes para el caso de fluidos Newtonianos incompresibles
utilizando la arquitectura CUDA1 provista por NVIDIA2 . Se utiliza
para la discretización espacial un esquema de diferencias finitas en
grillas staggered (para evitar el desacople en la presión), y el
método de Pasos Fraccionados (Fractional-Step) para la integración
temporal. El paso predictor (problema de advección para las ecuaciones
de cantidad de movimiento) se resuelve utilizando el esquema de
Adams-Bashforth de segundo orden estabilizando los términos
convectivos con el método QUICK. Además, el paso de Poisson (para
imponer la incompresibilidad) es resuelto iterativamente mediante el
método de Gradientes Conjugados precondicionando al sistema utilizando
transformadas rápidas de Fourier. En presente el desarrollo se
utilizan librería estándar de CUDA para el manejo de matrices y
vectores, como ser Thrust3 y CUSP4, además de CUFFT5 para las
transformadas rápidas de Fourier. De esta forma, mediante las
herramientas aportadas por las anteriores se confeccionan los kernels
necesarios enfatizando la utilización de memoria shared, accesos
fusionados a la memoria global, reduciendo al mínimo la cantidad de
registros por thread, entre otros. A continuación se presenta una
serie de casos de estudio con el objetivo de validar el desarrollo y
de, posteriormente, comparar las performances obtenidas con
implementaciones en otras arquitecturas (CPU, unicore y multicore).