Skip to content

mdspan-ify and encapsulate state of C++ miniWeather #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 83 commits into
base: main
Choose a base branch
from

Conversation

mhoemmen
Copy link

cpp-mdspan-encapsulation tag:

Complete mdspan-ification and state encapsulation

  • Use `extents<int, NUM_VARS, dynamic_extent, dynamic_extent>
  • Use mdspan-of-const where possible
    • Separate mutable-after-init and immutable-after-init state

mhoemmen added 30 commits March 3, 2025 16:20
This is NOT COMPLETE YET.

It's a port of cpp/miniWeather_serial.cpp.
Remove some differences (state_tmp allocation and initialization)
between Python and C.  It didn't change the Python output at all.
Extents of flux in Python differed from those in C.
I changed the Python flux allocation to work like C,
but that didn't help the mass balance.
PNetCDF wants an MPI_Info that is not MPI_INFO_NULL.

There are other issues with C output.
mhoemmen added 21 commits March 25, 2025 01:07
The result is gross, because it involves two "god structs."
A better solution would be to separate out the const arrays
from the nonconst arrays.
An even better solution would be a state object
that owns all the allocations, and hands out
const or nonconst views as needed.
Encapsulate global arrays in a class that offers (mdspan) views.

Make functions take mdspan-of-const where possible.
This helps manage mutable state like the output counter and dt.
This will make parallelization easier.
I haven't tested either of these yet.
Also verify that OpenACC builds define _OPENACC.
* Separate out all the loops that can be parallelized
  into their own functions

* miniWeather_mdspan.cpp is the "generic executable"
That is, a single run of `make` can build both of them.
mhoemmen added 3 commits April 9, 2025 01:30
We have a CUB (ForEachInExtents) version,
but it hasn't been tested yet, because HPC SDK 25.1
doesn't have a new enough CUB version yet.

Fix stdpar build by using cartesian_product from
Gonzalo Brito's tutorial.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant