E3SM-Project / E3SM-Project/scream

Remaining issues in the ACI code

Open
#2,858 0 comments 0 reactions 0 assignees View on GitHub
EAGLES
Dominant language
No language data
Stars
79
Forks
54
PR merge metrics
No merged PRs in 30d

Description

Here is the list of issues that must be fixed in the ACI code after the PR #2794 is merged:
1. Only eddy diffusivity of heat should be an additional added output from SHOC. We should remove `w_variance` and `cldfrac_liq_prev` from the SHOC interface.
2. Combine kernels (if possible) and create lambda functions for the inner parallel_for loops.
@bartgol's comment:
```
I see you have plenty of functions that have 2 versions, one to dispatch the outer loop, and one to be called
from inside the loop. If the inner one is only used in the outer one, you could consider just using a lambda in
the outer one, to keep the code smaller.

OTOH, dispatching lots of kernels is not great. If in all outer loops you just do

const int icol = team.league_rank();
inner_function_name(...);
you could consider merging all these kernels together, and doing all these calculations at once,
if possible (it may not be, if they must happen at different times during the ACI step).
```
3. Change the assignment of qqcw (and other arrays) so that memory access is coalesced
@bartgol's comment:
```
These for loops will deteriorate performance on GPU, due to non-coalesced access. You should try to rework the code,
with multiple TeamVectorRange loops (that's fine, especially if there are no deps among them, so no barriers needed).
E.g., this for loop could be a TVR over nlevs*num_aero_mods, where inside you do modulo arithmetic to recover
ilev/imode (in a way that still ensures coalesced access)
```
4. Currently `top_lev` is a namelist variable. We should add code to compute it based on pressure levels.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.