## Abstract

Presented is the application of the Split Harten, Lax and van Leer (SHLL) technique applied to parallel computation using a hybrid OpenMP/AVX parallelization paradigm for the Shallow Water Equations and Euler Equations. The key behind the ease of parallelization of the SHLL method for both governing equations is the mathematical/vector splitting in each coordinate direction - this splitting results in a high degree of locality, producing a scheme which is embarrassingly parallel and well suited for the vectorization capacities offered by vector-computing architectures. Here we demonstrate this capacity using the SIMD capacities of modern CPUs, namely the Advanced Vector eXtensions (AVX) capability of recent CPUs. The main feature of AVX is the capacity to perform SIMD operations on 8 floating point variables in parallel - an increase from 4 floating point variables as possible using the previous SIMD Streaming Extensions (SSE). Furthermore, since modern CPU's employ a large number of cores, we further extend the performance by using AVX on each available CPU core using shared memory (OpenMP) parallelization. We present a direction-split higher order extension to both the SHLL method and apply it to AVX through the use of intrinsic functions in the flux computation and state computation modules. High performance is obtained by ensuring that all flux computations are performed using only AVX intrinsic functions - no computations are performed in serial. Through this approach, a single workstation with 2× Xeon CPU's (16 physical cores) allows a performance increase of over 117 times that of a single core alone in the flux evaluation kernel.

Original language | English |
---|---|

Pages (from-to) | 181-188 |

Number of pages | 8 |

Journal | Computers and Fluids |

Volume | 110 |

DOIs | |

State | Published - 1 Mar 2015 |

## Keywords

- AVX
- Advanced vector eXtensions
- Euler equations
- Finite volume method
- HLL
- Integral balance
- OpenMP
- Parallel computing
- SHLL
- Shallow water equations
- Vectorization