Skip to content

[Benchmark X64] [stephentoub] Rewrite BigInteger internals to use native-wid ... #1830

Open

Description

@MihuBot

Job completed in 1 hour 39 minutes (remote runner delay: 1 minute 15 seconds).
dotnet/runtime#125799
Using arguments: benchmark BigInteger -medium
Main commit: dotnet/runtime@aeffb4c
PR commit: stephentoub/runtime@d480a31

System.Numerics.Tests.Perf_BigInteger
BenchmarkDotNet v0.16.0-nightly.20260302.459, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.60GHz, 1 CPU, 8 logical and 4 physical cores
Memory: 31.34 GB Total, 5.4 GB Available
MediumRun : .NET 11.0.0 (11.0.0-dev, 42.42.42.42424), X64 RyuJIT x86-64-v4
Job=MediumRun  IterationCount=15  LaunchCount=2
WarmupCount=10
Method Toolchain numberString arguments Mean Error Ratio Allocated Alloc Ratio
Ctor_ByteArray Main -2147483648 ? 11.172 ns 0.0317 ns 1.00 - NA
Ctor_ByteArray PR -2147483648 ? 11.310 ns 0.0270 ns 1.01 - NA
ToByteArray Main -2147483648 ? 9.405 ns 0.0090 ns 1.00 32 B 1.00
ToByteArray PR -2147483648 ? 13.884 ns 0.0945 ns 1.48 32 B 1.00
Parse Main -2147483648 ? 92.217 ns 0.2665 ns 1.00 - NA
Parse PR -2147483648 ? 96.036 ns 0.0502 ns 1.04 - NA
ToStringX Main -2147483648 ? 48.010 ns 0.0655 ns 1.00 40 B 1.00
ToStringX PR -2147483648 ? 54.346 ns 0.0511 ns 1.13 40 B 1.00
ToStringD Main -2147483648 ? 71.490 ns 0.1587 ns 1.00 48 B 1.00
ToStringD PR -2147483648 ? 53.538 ns 0.1550 ns 0.75 48 B 1.00
Add Main ? 1024,1024 bits 60.242 ns 0.2658 ns 1.00 160 B 1.00
Add PR ? 1024,1024 bits 56.239 ns 0.0513 ns 0.93 160 B 1.00
Subtract Main ? 1024,1024 bits 59.608 ns 0.0459 ns 1.00 152 B 1.00
Subtract PR ? 1024,1024 bits 57.278 ns 0.4483 ns 0.96 152 B 1.00
GreatestCommonDivisor Main ? 1024,1024 bits 4,432.629 ns 0.4544 ns 1.00 - NA
GreatestCommonDivisor PR ? 1024,1024 bits 4,623.695 ns 3.0054 ns 1.04 - NA
Multiply Main ? 1024,1024 bits 789.083 ns 0.6645 ns 1.00 280 B 1.00
Multiply PR ? 1024,1024 bits 446.559 ns 1.6992 ns 0.57 280 B 1.00
ModPow Main ? 1024,1024,64 bits 59,358.962 ns 122.2159 ns 1.00 32 B 1.00
ModPow PR ? 1024,1024,64 bits 24,540.236 ns 71.7314 ns 0.41 32 B 1.00
Divide Main ? 1024,512 bits 362.883 ns 0.8123 ns 1.00 96 B 1.00
Divide PR ? 1024,512 bits 241.610 ns 0.1503 ns 0.67 96 B 1.00
Remainder Main ? 1024,512 bits 376.420 ns 0.5621 ns 1.00 88 B 1.00
Remainder PR ? 1024,512 bits 251.726 ns 2.3174 ns 0.67 88 B 1.00
Multiply Main ? 1024,512 bits 465.757 ns 0.8628 ns 1.00 216 B 1.00
Multiply PR ? 1024,512 bits 238.014 ns 0.3201 ns 0.51 216 B 1.00
Ctor_ByteArray Main 123 ? 8.570 ns 0.0024 ns 1.00 - NA
Ctor_ByteArray PR 123 ? 8.613 ns 0.0054 ns 1.01 - NA
ToByteArray Main 123 ? 7.565 ns 0.0149 ns 1.00 32 B 1.00
ToByteArray PR 123 ? 8.411 ns 0.0142 ns 1.11 32 B 1.00
Parse Main 123 ? 63.764 ns 0.0416 ns 1.00 - NA
Parse PR 123 ? 68.774 ns 0.1331 ns 1.08 - NA
ToStringX Main 123 ? 41.757 ns 0.3771 ns 1.00 32 B 1.00
ToStringX PR 123 ? 43.691 ns 0.3632 ns 1.05 32 B 1.00
ToStringD Main 123 ? 21.285 ns 0.0179 ns 1.00 - NA
ToStringD PR 123 ? 21.683 ns 0.0237 ns 1.02 - NA
Ctor_ByteArray Main 123456789012(...)901234567890 [200] ? 15.518 ns 0.0340 ns 1.00 112 B 1.00
Ctor_ByteArray PR 123456789012(...)901234567890 [200] ? 16.042 ns 0.0470 ns 1.03 112 B 1.00
ToByteArray Main 123456789012(...)901234567890 [200] ? 13.209 ns 0.0376 ns 1.00 112 B 1.00
ToByteArray PR 123456789012(...)901234567890 [200] ? 15.443 ns 0.0162 ns 1.17 112 B 1.00
Parse Main 123456789012(...)901234567890 [200] ? 904.236 ns 1.7544 ns 1.00 112 B 1.00
Parse PR 123456789012(...)901234567890 [200] ? 913.443 ns 0.7270 ns 1.01 112 B 1.00
ToStringX Main 123456789012(...)901234567890 [200] ? 191.975 ns 0.7438 ns 1.00 360 B 1.00
ToStringX PR 123456789012(...)901234567890 [200] ? 196.321 ns 0.4323 ns 1.02 360 B 1.00
ToStringD Main 123456789012(...)901234567890 [200] ? 638.099 ns 3.5865 ns 1.00 424 B 1.00
ToStringD PR 123456789012(...)901234567890 [200] ? 648.584 ns 3.7462 ns 1.02 424 B 1.00
Ctor_ByteArray Main 12345678901(...)00000000000 [20000] ? 299.312 ns 1.8388 ns 1.00 8336 B 1.00
Ctor_ByteArray PR 12345678901(...)00000000000 [20000] ? 301.172 ns 3.6368 ns 1.01 8336 B 1.00
ToByteArray Main 12345678901(...)00000000000 [20000] ? 305.703 ns 3.3963 ns 1.00 8336 B 1.00
ToByteArray PR 12345678901(...)00000000000 [20000] ? 298.559 ns 0.9298 ns 0.98 8336 B 1.00
Parse Main 12345678901(...)00000000000 [20000] ? 510,650.561 ns 880.4476 ns 1.00 8336 B 1.00
Parse PR 12345678901(...)00000000000 [20000] ? 323,565.851 ns 524.3145 ns 0.63 8336 B 1.00
ToStringX Main 12345678901(...)00000000000 [20000] ? 11,994.519 ns 49.7575 ns 1.00 33248 B 1.00
ToStringX PR 12345678901(...)00000000000 [20000] ? 11,943.769 ns 38.7860 ns 1.00 33248 B 1.00
ToStringD Main 12345678901(...)00000000000 [20000] ? 1,164,839.605 ns 1,228.1964 ns 1.00 40024 B 1.00
ToStringD PR 12345678901(...)00000000000 [20000] ? 554,266.448 ns 795.3574 ns 0.48 40024 B 1.00
Ctor_ByteArray Main 12345678901(...)01234567890 [20000] ? 302.707 ns 4.6337 ns 1.00 8336 B 1.00
Ctor_ByteArray PR 12345678901(...)01234567890 [20000] ? 305.049 ns 4.8384 ns 1.01 8336 B 1.00
ToByteArray Main 12345678901(...)01234567890 [20000] ? 298.442 ns 2.3341 ns 1.00 8336 B 1.00
ToByteArray PR 12345678901(...)01234567890 [20000] ? 305.536 ns 3.1002 ns 1.02 8336 B 1.00
Parse Main 12345678901(...)01234567890 [20000] ? 788,348.823 ns 1,904.8741 ns 1.00 8336 B 1.00
Parse PR 12345678901(...)01234567890 [20000] ? 453,240.665 ns 321.2609 ns 0.57 8336 B 1.00
ToStringX Main 12345678901(...)01234567890 [20000] ? 12,017.180 ns 48.5948 ns 1.00 33248 B 1.00
ToStringX PR 12345678901(...)01234567890 [20000] ? 11,983.923 ns 25.6282 ns 1.00 33248 B 1.00
ToStringD Main 12345678901(...)01234567890 [20000] ? 1,585,266.249 ns 4,584.6829 ns 1.00 40024 B 1.00
ToStringD PR 12345678901(...)01234567890 [20000] ? 792,352.493 ns 1,094.1976 ns 0.50 40024 B 1.00
Add Main ? 16,16 bits 3.274 ns 0.0013 ns 1.00 - NA
Add PR ? 16,16 bits 3.277 ns 0.0014 ns 1.00 - NA
Subtract Main ? 16,16 bits 3.275 ns 0.0018 ns 1.00 - NA
Subtract PR ? 16,16 bits 3.275 ns 0.0021 ns 1.00 - NA
GreatestCommonDivisor Main ? 16,16 bits 21.270 ns 0.0065 ns 1.00 - NA
GreatestCommonDivisor PR ? 16,16 bits 21.265 ns 0.0040 ns 1.00 - NA
Multiply Main ? 16,16 bits 3.274 ns 0.0014 ns 1.00 - NA
Multiply PR ? 16,16 bits 3.275 ns 0.0038 ns 1.00 - NA
ModPow Main ? 16,16,16 bits 50.498 ns 0.0100 ns 1.00 - NA
ModPow PR ? 16,16,16 bits 61.361 ns 0.7693 ns 1.22 - NA
Divide Main ? 16,8 bits 16.192 ns 3.1308 ns 1.00 - NA
Divide PR ? 16,8 bits 11.828 ns 0.0027 ns 0.79 - NA
Remainder Main ? 16,8 bits 11.548 ns 0.0160 ns 1.00 - NA
Remainder PR ? 16,8 bits 11.429 ns 0.0915 ns 0.99 - NA
Multiply Main ? 16,8 bits 3.274 ns 0.0016 ns 1.00 - NA
Multiply PR ? 16,8 bits 3.273 ns 0.0021 ns 1.00 - NA
ModPow Main ? 16384,16384,64 bits 1,679,327.043 ns 1,767.9715 ns 1.00 32 B 1.00
ModPow PR ? 16384,16384,64 bits 403,060.848 ns 2,315.8781 ns 0.24 32 B 1.00
Equals Main ? 259 bytes, DiffFirstByte 2.259 ns 0.0093 ns 1.00 - NA
Equals PR ? 259 bytes, DiffFirstByte 2.263 ns 0.0069 ns 1.00 - NA
Equals Main ? 259 bytes, DiffLastByte 6.147 ns 0.0369 ns 1.00 - NA
Equals PR ? 259 bytes, DiffLastByte 5.896 ns 0.0230 ns 0.96 - NA
Equals Main ? 259 bytes, DiffMiddleByte 4.625 ns 0.1217 ns 1.00 - NA
Equals PR ? 259 bytes, DiffMiddleByte 4.462 ns 0.0210 ns 0.97 - NA
Equals Main ? 259 bytes, Same 6.048 ns 0.0799 ns 1.00 - NA
Equals PR ? 259 bytes, Same 5.673 ns 0.0302 ns 0.94 - NA
Divide Main ? 65536,32768 bits 458,333.410 ns 1,379.2191 ns 1.00 4128 B 1.00
Divide PR ? 65536,32768 bits 273,226.925 ns 203.9525 ns 0.60 4128 B 1.00
Remainder Main ? 65536,32768 bits 460,300.666 ns 1,717.3428 ns 1.00 4120 B 1.00
Remainder PR ? 65536,32768 bits 274,707.368 ns 1,064.5532 ns 0.60 4120 B 1.00
Multiply Main ? 65536,32768 bits 425,541.744 ns 564.6115 ns 1.00 12312 B 1.00
Multiply PR ? 65536,32768 bits 277,840.518 ns 2,162.5177 ns 0.65 12312 B 1.00
Add Main ? 65536,65536 bits 2,101.383 ns 9.7707 ns 1.00 8224 B 1.00
Add PR ? 65536,65536 bits 1,816.524 ns 6.4593 ns 0.86 8224 B 1.00
Subtract Main ? 65536,65536 bits 2,135.898 ns 13.5537 ns 1.00 8216 B 1.00
Subtract PR ? 65536,65536 bits 1,819.194 ns 9.4846 ns 0.85 8216 B 1.00
GreatestCommonDivisor Main ? 65536,65536 bits 4,087,784.838 ns 968.0474 ns 1.00 - NA
GreatestCommonDivisor PR ? 65536,65536 bits 4,094,046.987 ns 1,130.4961 ns 1.00 - NA
Multiply Main ? 65536,65536 bits 622,608.653 ns 914.4125 ns 1.00 16408 B 1.00
Multiply PR ? 65536,65536 bits 387,694.439 ns 1,372.3194 ns 0.62 16408 B 1.00
Equals Main ? 67 bytes, DiffFirstByte 2.255 ns 0.0072 ns 1.00 - NA
Equals PR ? 67 bytes, DiffFirstByte 2.255 ns 0.0078 ns 1.00 - NA
Equals Main ? 67 bytes, DiffLastByte 3.345 ns 0.0194 ns 1.00 - NA
Equals PR ? 67 bytes, DiffLastByte 3.343 ns 0.0196 ns 1.00 - NA
Equals Main ? 67 bytes, DiffMiddleByte 2.259 ns 0.0092 ns 1.00 - NA
Equals PR ? 67 bytes, DiffMiddleByte 2.254 ns 0.0080 ns 1.00 - NA
Equals Main ? 67 bytes, Same 3.271 ns 0.0241 ns 1.00 - NA
Equals PR ? 67 bytes, Same 2.816 ns 0.0181 ns 0.86 - NA

Artifacts:

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions