Skip to content

Collected fundamental operation optimizations#1394

Open
mborland wants to merge 18 commits into
developfrom
opt_comp
Open

Collected fundamental operation optimizations#1394
mborland wants to merge 18 commits into
developfrom
opt_comp

Conversation

@mborland
Copy link
Copy Markdown
Member

@mborland mborland commented May 19, 2026

Lots of short circuiting, and the revitalization of direct initialization help us significantly.

Benchmarks at current head:

===== Comparisons =====
comparisons<float        >: 69376      us (s=299999985)
comparisons<double       >: 48137      us (s=299999985)
comparisons<decimal32_t  >: 1121819    us (s=299999985)
comparisons<decimal64_t  >: 1050653    us (s=299999985)
comparisons<decimal128_t >: 2100040    us (s=299999985)
comparisons<dec32_fast   >: 457808     us (s=299999985)
comparisons<dec64_fast   >: 425689     us (s=299999985)
comparisons<dec128_fast  >: 418523     us (s=299999985)

===== Addition =====
Addition<float        >: 11427      us (s=18446744073609551621)
Addition<double       >: 12095      us (s=18446744073609551621)
Addition<decimal32_t  >: 1531348    us (s=1346704632194777589)
Addition<decimal64_t  >: 1337036    us (s=15185976904076359728)
Addition<decimal128_t >: 2449492    us (s=343379103667783520)
Addition<dec32_fast   >: 920156     us (s=1346704632194777589)
Addition<dec64_fast   >: 891290     us (s=15185976904076359728)
Addition<dec128_fast  >: 889484     us (s=343379103667783520)

===== Subtraction =====
Subtraction<float        >: 14211      us (s=18446744073659548966)
Subtraction<double       >: 13689      us (s=18446744073659548961)
Subtraction<decimal32_t  >: 1643943    us (s=4059123726101601672)
Subtraction<decimal64_t  >: 1372428    us (s=13628957610294930046)
Subtraction<decimal128_t >: 2384365    us (s=15500212624985615725)
Subtraction<dec32_fast   >: 940396     us (s=4059123726101601672)
Subtraction<dec64_fast   >: 925618     us (s=13628957610294930046)
Subtraction<dec128_fast  >: 909737     us (s=15500212624985615725)

===== Multiplication =====
Multiplication<float        >: 12198      us (s=18446744073609551621)
Multiplication<double       >: 12243      us (s=18446744073609551621)
Multiplication<decimal32_t  >: 1955406    us (s=13282323798186187586)
Multiplication<decimal64_t  >: 2352767    us (s=8272959584202096614)
Multiplication<decimal128_t >: 6896256    us (s=17382535922206154208)
Multiplication<dec32_fast   >: 1943814    us (s=13282323798186187586)
Multiplication<dec64_fast   >: 2340795    us (s=8272959584200780119)
Multiplication<dec128_fast  >: 6164829    us (s=17382535922206154208)

===== Division =====
Division<float        >: 13860      us (s=889346465)
Division<double       >: 17921      us (s=889346420)
Division<decimal32_t  >: 2699644    us (s=11972246100944077518)
Division<decimal64_t  >: 5588538    us (s=11051429967436580468)
Division<decimal128_t >: 10425350   us (s=5185696363361324687)
Division<dec32_fast   >: 2003501    us (s=11972246100944077518)
Division<dec64_fast   >: 5246047    us (s=11051429967436580468)
Division<dec128_fast  >: 8066989    us (s=5185696363361324687)

This PR:

===== Comparisons =====
comparisons<float        >: 62805      us (s=299999985)
comparisons<double       >: 38461      us (s=299999985)
comparisons<decimal32_t  >: 929050     us (s=299999985)
comparisons<decimal64_t  >: 914809     us (s=299999985)
comparisons<decimal128_t >: 2015205    us (s=299999985)
comparisons<dec32_fast   >: 462219     us (s=299999985)
comparisons<dec64_fast   >: 429917     us (s=299999985)
comparisons<dec128_fast  >: 420875     us (s=299999985)

===== Addition =====
Addition<float        >: 11861      us (s=18446744073609551621)
Addition<double       >: 12219      us (s=18446744073609551621)
Addition<decimal32_t  >: 1025441    us (s=1346704632194777589)
Addition<decimal64_t  >: 769356     us (s=15185976904076359728)
Addition<decimal128_t >: 1411218    us (s=343379103667783520)
Addition<dec32_fast   >: 633930     us (s=1346704632194777589)
Addition<dec64_fast   >: 562879     us (s=15185976904076359728)
Addition<dec128_fast  >: 660342     us (s=343379103667783520)

===== Subtraction =====
Subtraction<float        >: 11977      us (s=18446744073659548966)
Subtraction<double       >: 12487      us (s=18446744073659548961)
Subtraction<decimal32_t  >: 1049595    us (s=4059123726101601672)
Subtraction<decimal64_t  >: 830560     us (s=13628957610294930046)
Subtraction<decimal128_t >: 1431588    us (s=15500212624985615725)
Subtraction<dec32_fast   >: 680528     us (s=4059123726101601672)
Subtraction<dec64_fast   >: 633662     us (s=13628957610294930046)
Subtraction<dec128_fast  >: 722225     us (s=15500212624985615725)

===== Multiplication =====
Multiplication<float        >: 11891      us (s=18446744073609551621)
Multiplication<double       >: 12303      us (s=18446744073609551621)
Multiplication<decimal32_t  >: 1940743    us (s=13282323798186187586)
Multiplication<decimal64_t  >: 2047288    us (s=8272959584202096614)
Multiplication<decimal128_t >: 5014345    us (s=17382535922206154208)
Multiplication<dec32_fast   >: 1415591    us (s=13282323798186187586)
Multiplication<dec64_fast   >: 1845096    us (s=8272959584202096614)
Multiplication<dec128_fast  >: 4613134    us (s=17382535922206154208)

===== Division =====
Division<float        >: 12842      us (s=889346465)
Division<double       >: 17151      us (s=889346420)
Division<decimal32_t  >: 2499043    us (s=11972246100944077518)
Division<decimal64_t  >: 5066342    us (s=11051429967436580468)
Division<decimal128_t >: 9784609    us (s=5185696363361324687)
Division<dec32_fast   >: 1942231    us (s=11972246100944077518)
Division<dec64_fast   >: 5256758    us (s=11051429967436580468)
Division<dec128_fast  >: 8143953    us (s=5185696363361324687)

@mborland mborland changed the title Optimizations for comps and add Collected fundamental operation optimizations May 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant