Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
PrevUpHomeNext

Integer Real World Tests

The first set of tests measure the times taken to execute the multiprecision part of the Voronoi-diagram builder from Boost.Polygon. The tests mainly create a large number of temporaries "just in case" multiprecision arithmetic is required, for comparison, also included in the tests is Boost.Polygon's own partial-multiprecision integer type which was custom written for this specific task:

Integer Type

Relative Performance (Actual time in parenthesis)

checked_int1024_t

1.53714(0.0415328s)

checked_int256_t

1.20715(0.0326167s)

checked_int512_t

1.2587(0.0340095s)

cpp_int

1.80575(0.0487904s)

extended_int

1.35652(0.0366527s)

int1024_t

1.36237(0.0368107s)

int256_t

1(0.0270196s)

int512_t

1.0779(0.0291243s)

mpz_int

3.83495(0.103619s)

tom_int

41.6378(1.12504s)

Note how for this use case, any dynamic allocation is a performance killer.

The next tests measure the time taken to generate 1000 128-bit random numbers and test for primality using the Miller Rabin test. This is primarily a test of modular-exponentiation since that is the rate limiting step:

Integer Type

Relative Performance (Actual time in parenthesis)

checked_uint1024_t

9.52301(0.0422246s)

cpp_int

11.2194(0.0497465s)

cpp_int (1024-bit cache)

10.7941(0.0478607s)

cpp_int (128-bit cache)

11.0637(0.0490558s)

cpp_int (256-bit cache)

11.5069(0.0510209s)

cpp_int (512-bit cache)

10.3303(0.0458041s)

cpp_int (no Expression templates)

16.1792(0.0717379s)

mpz_int

1.05106(0.00466034s)

mpz_int (no Expression templates)

1(0.00443395s)

tom_int

5.10595(0.0226395s)

tom_int (no Expression templates)

61.9684(0.274765s)

uint1024_t

9.32113(0.0413295s)

It's interesting to note that expression templates have little effect here - perhaps because the actual expressions involved are relatively trivial in this case - so the time taken for multiplication and division tends to dominate. The much quicker times from GMP and tommath are down to their much better modular-exponentiation algorithms (GMP's is about 5x faster). That's an issue which needs to be addressed in a future release for cpp_int.

Table 1.17. Platform Details

Version

Compiler

GNU C++ version 10.3.0

GMP

6.2.0

MPFR

262146

Boost

107800

Run date

Sep 30 2021



PrevUpHomeNext