-
Notifications
You must be signed in to change notification settings - Fork 133
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
EAP efficiency #265
Comments
We can probably do similar improvements that was done with the evp scheme. Currently this is not top priority at DMI but the task should not be too big. |
I have looked at RASM, comparing the current "colpkg" version we're running in production and the latest CICE6 version and see a significant slowdown there as well. PFS.a93_a93_rx1.GNC2all 6.7 s/day => 10.7 s/day Ice timer output for PFS.a93_a93_rx1.GNC2all is as follows for the colpkg and cice6 versions, colpkg: cice6: The timer output in the two cases might not be apples and apples and there are obviously issues with internal load imbalance with regard to understanding where time is really spent, but it's the data we have at this point. It is odd that the standalone model did not show a lot of performance degradation as we updated the implementation, but on aggregate, maybe there is. |
I don't think the timers in the colpkg run here are correct. For instance, Timer 6 (Column) should include all the times in Timers 7-11 (with overlap), and yet shortwave and ridging are each larger than the total column time. I think this problem was fixed in #98, so we'd need to compare timings after that or else go all the way back to v5.1.2. It would be good to get a handle on how the timings have changed since v5, and why. |
Is there a reason why stepa is only called on every 10th iteration? |
I don't know. I'll ping Danny F's group and see if he/they can track it down. |
Hi everyone, I worked on updating the EAP rheology, originally developed/implemented by @mimi1981 I believe that the decision to update the structure tensor for only once in every 10 dynamics iterations was made by David and Michel. I believe this decision was made for two reasons. 1 - The structure tensor will change at a much slower rate than the dynamics terms within the elastic solver due to the constraints set on the rate of change of structure tensor components (hard set parameters). Therefore the changes to the structure tensor need not be solved for at such a high time resolution. I never investigated this part of the solver. However, I did read all the code many times, and the dynamics part of the code is much more computationally heavy than the structure tensor, so solving both at every time step won't add relatively that much computational time. Alternatively, the tensor solution time may be able to be reduced even further (every 20 dynamical steps for example). It is of course possible that this difference in time steps may add strange numerical oscillations to the solutions, though I never noticed anything like that. |
Within the update_stress_rdg there seem to be many if statements. Some of these can be avoided by removing dead code. |
Can you direct me to the code and branch you're reading? |
@hheorton Sorry this slipped my attention. |
@TillRasmussen , thank you for the update. DO you need me to check anything here? Or are you happy to go ahead and undo the hard coding and allow the interpolate option? |
@hheorton I think that my main question is whether the interpolation is ever of need. If not the part of the code should be removed. I dont mind adding the namelist parameter. |
@TillRasmussen, well I always used it as it is much more accurate, particularly for high stress situations. Though I'm probably biased as I wrote the code! I'm not sure who else is actively using the EAP rheology at the moment so can't comment on current needs. It might be of particular use when trouble shooting model implementation as by interpolating and thus getting smoother solutions to the stress tensor one removes one possible source of numerical error. |
The EAP is being used here and there. I will make a namelist parameter. |
Happy to have a look at the if statements. From my memory many of them are there to avoid 1/0 errors and atan2(0,0) situations in order to make the code work for various different compilers. These may be better achieved using different methods. |
EAP is running significantly slower than EVP in v6, even after efficiency improvements in #257 (originally #255). In v5.1.2, EAP TimeLoop was slower than EVP by roughly a factor of 2, now it is a factor of 3. The dynamics itself is showing nearly a factor of 10. This appears to be due to boundary updates, but it looks like both codes have the same calls. Based on the timers unrelated to EAP, the variation due to machine load is around +/-5%. These are 5-year gx1 QC configurations with the halo masks turned on.
EVP
conrad_intel_smoke_gx1_64x1_medium_qc.qc_evp
Timer 1: Total 5838.90 seconds
Timer 2: TimeLoop 5837.01 seconds
Timer 3: Dynamics 1501.73 seconds
Timer 4: Advection 1205.95 seconds
Timer 5: Column 2458.13 seconds
Timer 6: Thermo 2133.05 seconds
Timer 7: Shortwave 590.82 seconds
Timer 8: Ridging 325.01 seconds
Timer 9: Coupling 867.73 seconds
Timer 10: ReadWrite 647.31 seconds
Timer 11: Diags 744.80 seconds
Timer 12: History 467.37 seconds
Timer 13: Bound 3368.04 seconds
Timer 14: BGC 0.00 seconds
EAP
conrad_intel_smoke_gx1_64x1_medium_qc.qc_eap
Timer 1: Total 15796.37 seconds
Timer 2: TimeLoop 15788.08 seconds
Timer 3: Dynamics 11479.76 seconds
Timer 4: Advection 1171.17 seconds
Timer 5: Column 2402.69 seconds
Timer 6: Thermo 2136.43 seconds
Timer 7: Shortwave 583.50 seconds
Timer 8: Ridging 274.81 seconds
Timer 9: Coupling 913.23 seconds
Timer 10: ReadWrite 708.97 seconds
Timer 11: Diags 746.42 seconds
Timer 12: History 510.62 seconds
Timer 13: Bound 12242.84 seconds
Timer 14: BGC 0.00 seconds
The text was updated successfully, but these errors were encountered: