https://github.com/parthenon-hpc-lab/parthenon
Parthenon AMR infrastructure
https://github.com/parthenon-hpc-lab/parthenon
amr high-performance-computing kokkos parthenon
Last synced: 7 months ago
JSON representation
Parthenon AMR infrastructure
- Host: GitHub
- URL: https://github.com/parthenon-hpc-lab/parthenon
- Owner: parthenon-hpc-lab
- License: other
- Created: 2020-01-29T20:29:38.000Z (over 5 years ago)
- Default Branch: develop
- Last Pushed: 2025-02-27T18:47:04.000Z (7 months ago)
- Last Synced: 2025-03-02T18:12:56.662Z (7 months ago)
- Topics: amr, high-performance-computing, kokkos, parthenon
- Language: C++
- Homepage: https://parthenon-hpc-lab.github.io/parthenon/
- Size: 98.1 MB
- Stars: 131
- Watchers: 19
- Forks: 37
- Open Issues: 271
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Parthenon
[](https://github.com/parthenon-hpc-lab/parthenon/actions/workflows/ci-short.yml)
[](https://github.com/parthenon-hpc-lab/parthenon/actions/workflows/ci-extended.yml)
[](https://github.com/psf/black)
[](https://app.element.io/#/room/#parthenon-general:matrix.org)
[](https://parthenon-hpc-lab.github.io/parthenon/develop/index.html)Parthenon -- a performance portable block-structured adaptive mesh refinement framework
# Key features
* High performance by
* device first/device resident approach (work data only in device memory to prevent expensive transfers between host and device)
* transparent packing of data across blocks (to reduce/hide kernel launch latency)
* direct device-to-device communication via asynchronous MPI communication
* Intermediate abstraction layer to hide complexity of device kernel launches
* Flexible, plug-in package system
* Abstract variables controlled via metadata flags
* Support for particles
* Support for cell-, node-, face-, and edge-centered fields
* Multi-stage drivers/integrators with support for task-based parallelism# Community
* [Chat room on matrix.org](https://app.element.io/#/room/#parthenon-general:matrix.org)# Dependencies
## Required
* CMake 3.16 or greater
* C++17 compatible compiler
* Kokkos 4.4.1 or greater## Optional (enabling features)
* MPI
* OpenMP
* HDF5 (for outputs)
* Ascent (for in situ visualization and analysis)## Other
* catch2 (for unit tests)
* python3 (for regression tests)
* numpy (for regression tests)
* matplotlib (optional, for plotting results of regression tests)# Quick start guide
For detailed instructions for a given system, see our [build doc](https://parthenon-hpc-lab.github.io/parthenon/develop/src/building.html).
## Basics
mkdir build
cd build
cmake ../
cmake --build . -j 8
ctest## Import Into Your Code
```c++
// Imports all of parthenon's public interface
#include// You can use one of the following headers instead if you want to limit how
// much you import. They import Parthenon's Driver and Package APIs,
// respectively
#include
#include// The following namespaces are good short-hands to import commonly used names
// for each set of Parthenon APIs.
using namespace parthenon::driver::prelude;
using namespace parthenon::package::prelude;
```## Parallel_for wrapper options
Following options are available to configure the default behavior of the `par_for` wrappers.
- `PAR_LOOP_LAYOUT` (sets default layout)
- `MANUAL1D_LOOP` maps to `Kokkos::RangePolicy` (default for CUDA backend)
- `MDRANGE` maps to `Kokkos::MDRangePolicy`
- `SIMDFOR_LOOP` maps to standard `for` loops with `#pragma omp simd` (default for OpenMP backend)
- `TPTTR_LOOP` maps to double nested loop with `Kokkos::TeamPolicy` and `Kokkos::ThreadVectorRange`
- `TPTVR_LOOP` maps to double nested loop with `Kokkos::TeamPolicy` and `Kokkos::ThreadVectorRange`
- `TPTTRTVR_LOOP` maps to triple nested loop with `Kokkos::TeamPolicy`, `Kokkos::TeamThreadRange` and `Kokkos::ThreadVectorRange`Similarly, for explicit nested paralellism the `par_for_outer` and `par_for_inner` wrappers are available.
`par_for_outer` always maps to a `Kokkos::TeamPolicy` and the `par_for_inner` mapping is controlled by the
- `PAR_LOOP_INNER_LAYOUT` (sets default innermost loop layout for `par_for_inner`)
- `SIMDFOR_INNER_LOOP` maps to standard `for` loops with `#pragma omp simd` (default for OpenMP backend)
- `TVR_INNER_LOOP` maps to `Kokkos::TeamVectorRange` (default for CUDA backend)## Kokkos options
Kokkos can be configured through `cmake` options, see https://github.com/kokkos/kokkos/wiki/CompilingFor example to build with the OpenMP backend for Intel Skylake architecture using Intel compilers
mkdir build-omp-skx && cd build-omp-skx
cmake -DKokkos_ENABLE_OPENMP=ON -DCMAKE_CXX_COMPILER=icpc -DKokkos_ARCH_SKX=ON ../or to build for NVIDIA V100 GPUs (using `nvcc` compiler for GPU code, which is automatically picked up by `Kokkos`)
mkdir build-cuda-v100 && cd build-cuda-v100
cmake -DKokkos_ENABLE_CUDA=ON -DKokkos_ARCH_VOLTA70=On ../or to build for AMD MI100 GPUs (using `hipcc` compiler)
mkdir build-hip-mi100 && cd build-hip-mi100
cmake -DKokkos_ENABLE_HIP=ON -DCMAKE_CXX_COMPILER=hipcc -DKokkos_ARCH_Vega908=ON ../# Developing/Contributing
Please see the [developer guidelines](CONTRIBUTING.md) for additional information.
# Documentation
Please see the [docs](https://parthenon-hpc-lab.github.io/parthenon) for additional documentation on features and
how to use them.# Contributors
| Name | Handle | Team |
|----------|--------------|------------|
| Jonah Miller | @Yurlungur | LANL Physics |
| Josh Dolence | @jdolence | LANL Physics |
| Andrew Gaspar | @AndrewGaspar | LANL Computer Science |
| Philipp Grete | @pgrete | Athena Physics |
| Forrest Glines | @forrestglines | Athena Physics |
| Jim Stone | @jmstone | Athena Physics |
| Jonas Lippuner | @jlippuner | LANL Computer Science |
| Joshua Brown | @JoshuaSBrown | LANL Computer Science |
| Christoph Junghans | @junghans | LANL Computer Science |
| Sriram Swaminarayan | @nmsriram | LANL Computer Science |
| Daniel Holladay | @dholladay00 | LANL Computer Science |
| Galen Shipman | @gshipman | LANL Computer Science |
| Ben Ryan | @brryan | LANL Physics |
| Clell J. (CJ) Solomon | @clellsolomon | LANL Physics |
| Luke Roberts | @lroberts36 | LANL Physics |
| Ben Prather | @bprather | LANL Physics |