GMP «Arithmetic without limitations» GMP performance guard
Last modified: 2016-12-17


We're working on an automated performance regression avoidance mechanism for GMP. The goal is to make GMP improve monotonously, for all operand sizes.



function should be faster than...
T(mpn_addlsh_n(i)) T(mpn_addmul_1(i))
T(mpn_mul_2(i)) T(mpn_mul_1(i)) + T(mpn_addmul_1(i))
T(mpn_addmul_2(i)) 2 × T(mpn_addmul_1(i))
T(mpn_lshift(i)) T(mpn_mul_1(i))
T(mpn_ANY(i)) T(mpn_ANY(i+1))
Normal speed checks. The expression in the left column should never be greater than the expression in the right column, for any i.


Performance data from previous measurements are kept in a database. To be stored: System identifier, system data, source repository identifier, source revision, and actual measurements.

To avoid data base poisoning, each test run are assigned an encrypted salted string, which is decrypted by the report reception system. If it doesn't decrypt to "This is a benevolent report XXX" the report is just discarded.

Reporting results

Large regressions for individual (functions × i). Threshold: ≈ 10% worse than the all-time-low.

Regressions of A, B, C as per the polynomial fitting.

Regressions of the weighted mean performance. Threshold: ≈ 2% worse than the all-time-low.