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

Classification of subroutines to make rules more specific #5

Open
mlange05 opened this issue Nov 10, 2023 · 1 comment
Open

Classification of subroutines to make rules more specific #5

mlange05 opened this issue Nov 10, 2023 · 1 comment
Labels
enhancement New feature or request

Comments

@mlange05
Copy link
Collaborator

One of the common themes with several of the rules added for GPU-adaptation and source-to-source tool compliance is that they only pertain to subroutines that process NPROMA blocks, while others are targeted at routines that spawn parallel sections. This is closely aligned with the previous idea of "single column" format rules.

I propose to extend this idea to define clearly three initial classes of subroutines, using similar nomenclature used in the recent Arpege porting report:

  • Control, Parallel or Driver - Control flow routine that spawn either one or several parallel regions over a list of blocks (either via OpenMP threads for CPU or offloaded for GPU).
  • Vector, NPROMA or kernel - Computing routines that process a single block. The field data declared in these routines contains a single NPROMA block.
  • Communication - Subroutines with inter-process communication via MPI, including packing and unpacking of messages.

Once we pick the initial three classifications, I propose to re-classify some of the L-rules into P|V|C rules, or other abbreviations as appropriate.

In the future we might extend this with rules for other classifications (eg. "setup" or "sequential").

@mlange05
Copy link
Collaborator Author

My personal preference for nomenclature would be PARALLEL | VECTOR | COMM, where "parallel" and "vector" are aligned with the Loki concept of "driver" and "kernel" respectively.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant