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

PrevUpHomeNext

Comparing Different Compilers

By running our performance test suite multiple times, we can compare the effect of different compilers: as might be expected, the differences are generally small compared to say disabling internal use of long double. However, there are still gains to be main, particularly from some of the commercial offerings:

Table 22.12. Compiler Comparison on Windows x64

Function

Microsoft Visual C++ version 14.2
boost 1.73

GNU C++ version 9.2.0
boost 1.73

GNU C++ version 9.2.0
boost 1.73
promote_double<false>

assoc_laguerre

1.41
(179ns)

1.08
(137ns)

1.00
(127ns)

assoc_legendre

1.76
(248ns)

1.36
(192ns)

1.00
(141ns)

beta

1.00
(123ns)

2.62
(322ns)

1.93
(237ns)

beta (incomplete)

1.00
(470ns)

2.95
(1385ns)

1.58
(741ns)

cbrt

3.40
(51ns)

4.67
(70ns)

1.00
(15ns)

cyl_bessel_i

1.00
(281ns)

3.38
(949ns)

1.38
(387ns)

cyl_bessel_i (integer order)

1.00
(195ns)

3.06
(597ns)

1.00
(195ns)

cyl_bessel_j

1.00
(371ns)

2.39
(886ns)

1.35
(499ns)

cyl_bessel_j (integer order)

1.28
(123ns)

1.92
(184ns)

1.00
(96ns)

cyl_bessel_k

1.11
(385ns)

19.68
(6847ns)

1.00
(348ns)

cyl_bessel_k (integer order)

1.06
(217ns)

18.17
(3724ns)

1.00
(205ns)

cyl_neumann

1.17
(6696ns)

1.76
(10032ns)

1.00
(5715ns)

cyl_neumann (integer order)

1.00
(158ns)

2.20
(348ns)

1.59
(252ns)

digamma

1.00
(20ns)

3.45
(69ns)

2.30
(46ns)

ellint_1

1.57
(390ns)

1.41
(349ns)

1.00
(248ns)

ellint_1 (complete)

1.64
(77ns)

1.64
(77ns)

1.00
(47ns)

ellint_2

1.81
(702ns)

1.50
(583ns)

1.00
(388ns)

ellint_2 (complete)

3.11
(84ns)

2.11
(57ns)

1.00
(27ns)

ellint_3

3.47
(1381ns)

1.68
(670ns)

1.00
(398ns)

ellint_3 (complete)

inf
(802ns)

-nan(ind)
(0ns)

-nan(ind)
(0ns)

ellint_rc

1.55
(59ns)

2.21
(84ns)

1.00
(38ns)

ellint_rd

1.32
(271ns)

1.26
(260ns)

1.00
(206ns)

ellint_rf

1.27
(62ns)

1.94
(95ns)

1.00
(49ns)

ellint_rj

1.46
(264ns)

2.29
(414ns)

1.00
(181ns)

erf

1.30
(43ns)

1.85
(61ns)

1.00
(33ns)

erfc

1.06
(54ns)

1.76
(90ns)

1.00
(51ns)

expint

1.00
(27ns)

3.41
(92ns)

2.22
(60ns)

expint (En)

1.00
(106ns)

1.94
(206ns)

1.29
(137ns)

expm1

1.00
(11ns)

3.00
(33ns)

2.36
(26ns)

gamma_p

1.00
(303ns)

2.00
(605ns)

1.17
(355ns)

gamma_p_inv

1.00
(1266ns)

1.85
(2341ns)

1.15
(1460ns)

gamma_q

1.00
(294ns)

2.10
(618ns)

1.21
(356ns)

gamma_q_inv

1.00
(1194ns)

1.66
(1987ns)

1.14
(1357ns)

ibeta

1.00
(512ns)

2.63
(1344ns)

1.31
(673ns)

ibeta_inv

1.00
(1910ns)

2.49
(4751ns)

1.48
(2822ns)

ibetac

1.00
(525ns)

2.60
(1365ns)

1.27
(668ns)

ibetac_inv

1.00
(1676ns)

2.85
(4778ns)

1.74
(2910ns)

jacobi_cn

1.00
(181ns)

3.10
(561ns)

2.00
(362ns)

jacobi_dn

1.00
(203ns)

3.03
(616ns)

1.93
(392ns)

jacobi_sn

1.00
(202ns)

2.81
(568ns)

1.73
(350ns)

laguerre

1.02
(107ns)

1.07
(112ns)

1.00
(105ns)

legendre

1.11
(283ns)

1.25
(320ns)

1.00
(255ns)

legendre Q

1.00
(309ns)

1.51
(466ns)

1.15
(354ns)

lgamma

1.00
(80ns)

2.67
(214ns)

2.00
(160ns)

log1p

1.00
(14ns)

2.07
(29ns)

1.21
(17ns)

polygamma

1.00
(4193ns)

1.85
(7743ns)

1.91
(8018ns)

sph_bessel

1.01
(668ns)

1.48
(975ns)

1.00
(661ns)

sph_neumann

1.07
(1138ns)

2.96
(3153ns)

1.00
(1064ns)

tgamma

1.00
(74ns)

3.50
(259ns)

2.14
(158ns)

tgamma (incomplete)

1.00
(208ns)

2.30
(478ns)

1.64
(342ns)

trigamma

1.00
(12ns)

2.83
(34ns)

1.17
(14ns)

zeta

1.00
(117ns)

2.65
(310ns)

1.89
(221ns)


Table 22.13. Compiler Comparison on linux

Function

GNU C++ version 9.2.1 20191008
boost 1.73

GNU C++ version 9.2.1 20191008
boost 1.73
promote_double<false>

Clang version 9.0.0 (tags/RELEASE_900/final)
boost 1.73

Clang version 9.0.0 (tags/RELEASE_900/final)
boost 1.73
promote_double<false>

Intel C++ C++0x mode version 1910
boost 1.73

Intel C++ C++0x mode version 1910
boost 1.73
promote_double<false>

assoc_laguerre

1.17
(156ns)

1.08
(143ns)

1.72
(229ns)

1.31
(174ns)

1.15
(153ns)

1.00
(133ns)

assoc_legendre

2.91
(279ns)

1.78
(171ns)

2.86
(275ns)

1.00
(96ns)

2.79
(268ns)

2.16
(207ns)

beta

10.52
(789ns)

1.40
(105ns)

10.56
(792ns)

1.73
(130ns)

6.07
(455ns)

1.00
(75ns)

beta (incomplete)

4.98
(2076ns)

1.26
(524ns)

5.44
(2267ns)

1.00
(417ns)

3.15
(1315ns)

1.16
(484ns)

cbrt

2.52
(58ns)

1.09
(25ns)

2.35
(54ns)

1.22
(28ns)

1.91
(44ns)

1.00
(23ns)

cyl_bessel_i

5.05
(1182ns)

1.02
(239ns)

10.73
(2511ns)

1.74
(406ns)

3.99
(933ns)

1.00
(234ns)

cyl_bessel_i (integer order)

4.41
(767ns)

1.00
(174ns)

5.09
(886ns)

1.03
(179ns)

3.63
(631ns)

1.12
(195ns)

cyl_bessel_j

3.80
(1067ns)

1.28
(359ns)

4.72
(1327ns)

1.55
(436ns)

3.05
(857ns)

1.00
(281ns)

cyl_bessel_j (integer order)

3.10
(319ns)

1.05
(108ns)

4.73
(487ns)

1.00
(103ns)

2.30
(237ns)

1.12
(115ns)

cyl_bessel_k

10.37
(3962ns)

1.00
(382ns)

11.55
(4414ns)

1.52
(582ns)

12.41
(4739ns)

1.09
(416ns)

cyl_bessel_k (integer order)

19.23
(3289ns)

1.06
(181ns)

19.78
(3382ns)

1.27
(217ns)

20.02
(3423ns)

1.00
(171ns)

cyl_neumann

2.18
(8826ns)

1.19
(4814ns)

3.23
(13059ns)

1.31
(5275ns)

2.35
(9503ns)

1.00
(4041ns)

cyl_neumann (integer order)

3.67
(466ns)

1.35
(172ns)

4.49
(570ns)

1.15
(146ns)

2.87
(364ns)

1.00
(127ns)

digamma

2.30
(62ns)

1.30
(35ns)

3.11
(84ns)

1.33
(36ns)

1.85
(50ns)

1.00
(27ns)

ellint_1

2.26
(310ns)

1.12
(154ns)

6.96
(954ns)

1.25
(171ns)

3.22
(441ns)

1.00
(137ns)

ellint_1 (complete)

4.65
(93ns)

3.15
(63ns)

6.00
(120ns)

1.15
(23ns)

1.90
(38ns)

1.00
(20ns)

ellint_2

3.81
(704ns)

1.28
(236ns)

8.95
(1655ns)

1.36
(251ns)

4.36
(807ns)

1.00
(185ns)

ellint_2 (complete)

1.83
(44ns)

1.04
(25ns)

6.25
(150ns)

1.25
(30ns)

2.00
(48ns)

1.00
(24ns)

ellint_3

3.27
(609ns)

1.17
(217ns)

5.37
(998ns)

1.32
(245ns)

2.84
(528ns)

1.00
(186ns)

ellint_3 (complete)

-nan
(0ns)

-nan
(0ns)

-nan
(0ns)

-nan
(0ns)

-nan
(0ns)

-nan
(0ns)

ellint_rc

2.75
(66ns)

1.29
(31ns)

4.71
(113ns)

1.42
(34ns)

1.83
(44ns)

1.00
(24ns)

ellint_rd

4.37
(428ns)

1.31
(128ns)

9.24
(906ns)

1.31
(128ns)

4.17
(409ns)

1.00
(98ns)

ellint_rf

2.47
(84ns)

1.44
(49ns)

4.62
(157ns)

1.32
(45ns)

1.85
(63ns)

1.00
(34ns)

ellint_rj

4.14
(426ns)

1.36
(140ns)

7.18
(740ns)

1.31
(135ns)

3.33
(343ns)

1.00
(103ns)

erf

1.69
(54ns)

1.28
(41ns)

2.56
(82ns)

1.38
(44ns)

1.34
(43ns)

1.00
(32ns)

erfc

1.65
(89ns)

1.20
(65ns)

2.46
(133ns)

1.26
(68ns)

1.22
(66ns)

1.00
(54ns)

expint

2.93
(85ns)

1.45
(42ns)

2.90
(84ns)

1.31
(38ns)

2.21
(64ns)

1.00
(29ns)

expint (En)

2.42
(242ns)

1.14
(114ns)

2.76
(276ns)

1.19
(119ns)

1.84
(184ns)

1.00
(100ns)

expm1

1.90
(19ns)

1.60
(16ns)

1.50
(15ns)

1.40
(14ns)

1.80
(18ns)

1.00
(10ns)

gamma_p

2.43
(618ns)

1.02
(260ns)

2.95
(749ns)

1.00
(254ns)

2.15
(545ns)

1.03
(262ns)

gamma_p_inv

2.37
(2328ns)

1.06
(1038ns)

2.73
(2676ns)

1.06
(1045ns)

1.92
(1883ns)

1.00
(982ns)

gamma_q

2.49
(629ns)

1.00
(253ns)

3.28
(831ns)

1.11
(280ns)

2.18
(551ns)

1.04
(263ns)

gamma_q_inv

2.73
(2016ns)

1.30
(958ns)

3.22
(2381ns)

1.30
(962ns)

1.73
(1275ns)

1.00
(739ns)

ibeta

4.56
(1979ns)

1.21
(524ns)

4.60
(1996ns)

1.00
(434ns)

3.35
(1453ns)

1.13
(491ns)

ibeta_inv

3.22
(5552ns)

1.10
(1902ns)

3.49
(6013ns)

1.03
(1781ns)

2.58
(4437ns)

1.00
(1722ns)

ibetac

4.34
(2008ns)

1.27
(590ns)

4.34
(2008ns)

1.00
(463ns)

3.11
(1438ns)

1.17
(543ns)

ibetac_inv

3.32
(5533ns)

1.11
(1853ns)

3.55
(5915ns)

1.03
(1722ns)

2.48
(4131ns)

1.00
(1666ns)

jacobi_cn

3.74
(483ns)

1.26
(163ns)

4.98
(643ns)

1.61
(208ns)

2.67
(345ns)

1.00
(129ns)

jacobi_dn

3.64
(503ns)

1.25
(173ns)

4.70
(648ns)

1.49
(206ns)

2.72
(375ns)

1.00
(138ns)

jacobi_sn

4.99
(614ns)

1.46
(180ns)

5.20
(640ns)

1.72
(212ns)

2.57
(316ns)

1.00
(123ns)

laguerre

1.11
(92ns)

1.08
(90ns)

1.41
(117ns)

1.11
(92ns)

1.17
(97ns)

1.00
(83ns)

legendre

1.12
(282ns)

1.00
(251ns)

1.21
(304ns)

1.30
(326ns)

1.39
(349ns)

1.08
(270ns)

legendre Q

1.24
(390ns)

1.00
(314ns)

1.29
(404ns)

1.14
(358ns)

1.42
(445ns)

1.11
(347ns)

lgamma

2.65
(265ns)

1.17
(117ns)

3.86
(386ns)

1.24
(124ns)

1.90
(190ns)

1.00
(100ns)

log1p

1.11
(20ns)

1.22
(22ns)

1.06
(19ns)

1.00
(18ns)

1.06
(19ns)

1.00
(18ns)

polygamma

16.70
(8883ns)

1.42
(756ns)

6.56
(3491ns)

1.00
(532ns)

7.49
(3985ns)

1.05
(559ns)

sph_bessel

2.36
(1122ns)

1.24
(588ns)

3.31
(1574ns)

1.41
(673ns)

2.12
(1010ns)

1.00
(476ns)

sph_neumann

3.40
(2842ns)

1.21
(1015ns)

3.59
(3009ns)

1.21
(1012ns)

3.14
(2627ns)

1.00
(837ns)

tgamma

4.72
(472ns)

1.44
(144ns)

5.70
(570ns)

1.05
(105ns)

2.29
(229ns)

1.00
(100ns)

tgamma (incomplete)

3.28
(669ns)

1.13
(231ns)

3.88
(792ns)

1.14
(232ns)

2.21
(451ns)

1.00
(204ns)

trigamma

2.08
(25ns)

1.00
(12ns)

4.00
(48ns)

1.50
(18ns)

2.00
(24ns)

1.08
(13ns)

zeta

4.21
(455ns)

1.00
(108ns)

5.77
(623ns)

1.20
(130ns)

2.98
(322ns)

1.08
(117ns)



PrevUpHomeNext