Why memory acess is designed not continuous in AERO?

Hello, there~ :blush:
I’m trying to optimize aero module recently.After some perf work and code analysis, i locate an possiblely hotpoint in aero module. But, i got no idea how to optimize it.
It’s seems like that aero module’s core calc is ISOROPIA, and it is related to some complex branches. Let’s chain one branch in it:
ISOROPIA → ISRP1F->CALCC1->FUNCC1(used in bisection)->CALCACT->CALCACT1->KMTAB->KM198
I observed that almost all ISOROPIA’s branch’s tail are related to KMTAB, and in KMTAB, there exist an skipstep mem access which is BNC01M to BNC23M.They are prepared for the assignment of G0 matrix.
I tried some memory reordering optimize in BNCs to continuous memory access, in which i turn BNC01M-BNC23M to BNC(23,561) or BNC(6,4,561)(directly assign G0) or BNC(6,4,561,6)(turn all BNC in six temperators in one matrix), but it turns out a negative optimize, can someone tell me why? Theoretically, this operation should turn the memory access from skipstep to continuous, and will have some optimization.
Any sugguestion is appreciated.

While this does not answer your query directly, you may find these prior studies on optimizing ISORROPIA to be of interest:

https://doi.org/10.1016/S1352-2310(03)00074-8

1 Like

Hi, D.R. mathur. Thank you for your reply.
I met most part of optimize point in this paper, include bisection way, and poly3, It enlight me a lot.
The bisection to ITP optimization in the paper is very interesting for me. I tried secant method before, but get little perform advantage.I will try HETP latter.
Maybe there exist some precision problem in transition from ISOROPIA to HETP in HPC aspect, but i will learn more from the paper.
It helps a lot~Thank you for your help again~ :blush:
Cheers, rzbbc.