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 el presente desarrollo se utilizan librerías 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).
1http://developer.nvidia.com/cuda-downloads
2http://arg.nvidia.com/page/home.html
3http://code.google.com/p/thrust/
4http://code.google.com/p/cusp-library/
5http://developer.nvidia.com/cufft
En el presente desarrollo se utilizan librerías 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).
1http://developer.nvidia.com/cuda-downloads
2http://arg.nvidia.com/page/home.html
3http://code.google.com/p/thrust/
4http://code.google.com/p/cusp-library/
5http://developer.nvidia.com/cufft
Full Text:
PDFAsociación Argentina de Mecánica Computacional
Güemes 3450
S3000GLN Santa Fe, Argentina
Phone: 54-342-4511594 / 4511595 Int. 1006
Fax: 54-342-4511169
E-mail: amca(at)santafe-conicet.gov.ar
ISSN 2591-3522