Skip to content
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

Rewriting Parts of the IO in SeisSol [Tracking PR] #1103

Draft
wants to merge 73 commits into
base: master
Choose a base branch
from

Conversation

davschneller
Copy link
Contributor

@davschneller davschneller commented May 7, 2024

The IO has mainly suffered under one flaw: having an additional thread or additional IO rank requires the IO part to be programmed in a special way: it is not easily possible to convey a structure to write to the IO ranks. As a result, it became cumbersome to add new data to the output.

To solve this issue, we introduce a primitive serialization mechanism via the already-used YAML module. That is, we collect all write commands (i.e. specify the file, and for HDF5 also the datatype) and assign them buffer IDs. Currently, this new IO structure supports Hdf5 only. However, adding a direct binary file writing option should be easily doable. Apart from that, we tackle the checkpointing and high-order output issues with this PR (cf. WP2 and WP3 of our IO Konwihr proposal). That is, the old checkpointing backend is removed completely since it was already obsolete. The new checkpointing is currently still WIP, but already works on one rank for wavepropagation. For now, it'll focus on dumping and reading the necessary memory. We also add the VTK high-order output options—subdivision for the new output is not yet implemented. Same also for vertex filtering—if it should be needed at all with higher orders.

Draft PR due to the design of the module being a bit chaotic at the moment—that may need to be cleaned up first.
(but PR at all, since it's beginning to be usable already)

Some tracking points:

  • Write command serialization, integration with ASYNC (also includes support for multiple output writers at the same time; with different output frequencies)
  • Adjust ASYNC to work with GPU-only buffers (or mixed GPU-CPU buffers). Cf. also Semi-Transparent Buffers #1016 and General Code Overhaul TUM-I5/ASYNC#3
  • VTKHDF writer implemented, working
  • Add zero-th order output (with refinement)
  • High-order volume IO working
  • High-order fault IO working
  • High-order surface IO working (change: interpolation, no averaging)
  • Write-and-dump checkpointing writing
  • Checkpoint reading, single rank
  • Data repartitioning mechanism
  • Checkpoint reading, multi-rank
  • Checkpoint memory buckets (needed for face displacement)
  • Aggregated point output
  • HDF5 compression
  • Code cleanup
  • Documentation

Currently, to enable the high-order IO, add wavefieldvtkorder=N (in the output section), where N is the polynomial degree you want the output to have. Similarly, surfacevtkorder=N (in the output section) for high-order free-surface output, and vtkorder=N in the elementwise section for high-order fault output. Negative values will resort to the well-known Xdmf output. Note that N=0 is still unsupported at the moment—but you can resort for Xdmf for that.

Feel free to use/test.

@davschneller davschneller linked an issue May 8, 2024 that may be closed by this pull request
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.

checkpointing issues
1 participant