flatsurf / e-antic

Embedded algebraic number fields
https://flatsurf.github.io/e-antic/libeantic/
GNU Lesser General Public License v3.0
12 stars 11 forks source link

Avoid std::function() overhead in arithmetic #179

Closed saraedum closed 3 years ago

saraedum commented 3 years ago

This saves a few cycles with rather trivial number field elements.

Before:

TrivialAddition<renf_elem_class>             63.9 ns         63.9 ns     10316432
TrivialMultiplication<renf_elem_class>       56.8 ns         56.8 ns     13335032
TrivialSubtraction<renf_elem_class>          68.4 ns         68.4 ns     11463610
TrivialDivision<renf_elem_class>              126 ns          126 ns      5095247

After:

TrivialAddition<renf_elem_class>             56.6 ns         56.6 ns     12140297
TrivialMultiplication<renf_elem_class>       48.2 ns         48.2 ns     14852299
TrivialSubtraction<renf_elem_class>          52.4 ns         52.4 ns     14056737
TrivialDivision<renf_elem_class>              118 ns          118 ns      5972146
codecov[bot] commented 3 years ago

Codecov Report

Merging #179 (068c866) into master (32abc34) will not change coverage. The diff coverage is 100.00%.

Impacted file tree graph

@@           Coverage Diff           @@
##           master     #179   +/-   ##
=======================================
  Coverage   90.21%   90.21%           
=======================================
  Files         105      105           
  Lines        1952     1952           
=======================================
  Hits         1761     1761           
  Misses        191      191           
Impacted Files Coverage Δ
libeantic/srcxx/renf_elem_class.cpp 90.49% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update 32abc34...068c866. Read the comment docs.