Skip to content

Add Analysis design doc#446

Open
brian-oneill wants to merge 1 commit into
E3SM-Project:developfrom
brian-oneill:omega/analysis-design-doc
Open

Add Analysis design doc#446
brian-oneill wants to merge 1 commit into
E3SM-Project:developfrom
brian-oneill:omega/analysis-design-doc

Conversation

@brian-oneill

Copy link
Copy Markdown

Add Analysis module design document. Compiled here.

Describes the configurable operator framework for in-situ analysis computation, including:

  • Templated operators with type-safe runtime dispatch
  • Operator factory and registration system
  • Compute scheduling driven by dependency-based alarms
  • Bundled analysis groups integrated with IOStream output
  • Future fully composable operator chains (target design)

Checklist

```

The factory registers all combinations of scalar type (I4/I8/R4/R8), rank
(1–5), and memory location (Device/Host/Both) for each operator template:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For my understanding, why is it important to support both device and host locations? Is it that the actual operations would be conducted on the device but we would accept inputs that originate on the host and are copied to device within the operator?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, after thinking it over, I'm leaning towards not supporting HostArray types. Given that the compute work is currently done almost exclusively with ArrayDDTT types (ArrayMemLoc::Device arrays for GPU builds and ArrayMemLoc::Both for CPU-only builds), supporting HostArrayDDTT (ArrayMemLoc::Host) seems unnecessary right now, especially given deadlines.

Adding HostArray support to the analysis code would significantly increase code bloat and complexity. This would require either:

  • memory transfers (as you mention). This would also complicate the operator templating, since output arrays could no longer be straightforwardly templated off the input arrays
  • branching compute methods. Each operator compute method would require if-else branches, with duplicate code for kokkos kernels or ordinary loops depending on ArrayMemLoc.

If a compelling need comes up later, we can add this support then. The analysis module will continue to evolve after the immediate delivery, so I think we can avoid adding in this extra complexity prematurely.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good. I support this simpler path.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants