Repository navigation
Precomputed symbols - #443
Conversation
generate_code() used to rediscover the hoisted inteval loads by scanning stack_ and comparing each vertex's symbol against a recomputed "hv_" name. assign_symbols() now records each hoisted local together with the inteval field it is loaded from, and generate_code() declares exactly that list. Vertices that refer to another vertex are not hoisted, since their symbol comes from the referred vertex. The generated library is byte-identical to that of the previous commit.
|
Thanks for this. I validated it locally and measured wall-clock timings. Validation. I built
Timings. Apple M-series, Apple clang
The cc-pVQZ and def2-QZVP numbers match yours. ANO-RCC comes out at 1.20× here rather than 1.41×. The Follow-up commit (200b83e). Previously This comment was agent-generated and human-reviewed. |
libint2's generated recurrence kernels load the same coefficients from memory. Instead we can load them into a scalar once and then reuse it across the recurrence ops. This lets us reduce memory accesses substantially. It appears to be faster cc-pVQZ (1.24x), def2-QZVP (~1.24x), and ANO-RCC (~1.41x) Gaussian basis sets.llvm estimates
masterHappy to benchmark on other machines :)
Edit: Here's the script I used to benchmark
libintusingllvm-mca