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

Comparing Different Compilers
PrevUpHomeNext

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 16.7. Compiler Comparison on Windows x64

Function

Microsoft Visual C++ version 14.0
boost 1.59

Intel C++ C++0x mode version 1500
boost 1.59

GNU C++ version 4.9.2
boost 1.59

GNU C++ version 4.9.2
boost 1.59
promote_double<false>

assoc_laguerre

1.09
(190ns)

1.00
(175ns)

1.29
(225ns)

1.09
(190ns)

assoc_legendre

1.64
(159ns)

1.00
(97ns)

1.84
(178ns)

1.15
(112ns)

beta

1.97
(217ns)

1.00
(110ns)

3.64
(400ns)

2.01
(221ns)

beta (incomplete)

1.41
(520ns)

1.00
(368ns)

3.42
(1259ns)

1.74
(640ns)

cbrt

3.86
(54ns)

1.00
(14ns)

3.43
(48ns)

3.29
(46ns)

cyl_bessel_i

1.12
(402ns)

1.00
(360ns)

2.90
(1045ns)

1.23
(444ns)

cyl_bessel_i (integer order)

1.30
(257ns)

1.00
(198ns)

3.29
(652ns)

1.31
(259ns)

cyl_bessel_j

1.38
(544ns)

1.00
(395ns)

2.10
(828ns)

1.32
(520ns)

cyl_bessel_j (integer order)

1.33
(105ns)

1.00
(79ns)

2.23
(176ns)

1.19
(94ns)

cyl_bessel_k

1.18
(754ns)

1.00
(641ns)

10.67
(6841ns)

1.14
(730ns)

cyl_bessel_k (integer order)

1.26
(419ns)

1.00
(332ns)

10.84
(3600ns)

1.14
(379ns)

cyl_neumann

17.34
(11495ns)

15.24
(10105ns)

2.09
(1384ns)

1.00
(663ns)

cyl_neumann (integer order)

1.21
(328ns)

1.00
(270ns)

2.03
(547ns)

1.29
(348ns)

digamma

1.33
(28ns)

1.00
(21ns)

3.76
(79ns)

2.19
(46ns)

ellint_1

2.23
(386ns)

1.00
(173ns)

2.25
(389ns)

1.45
(251ns)

ellint_1 (complete)

1.78
(57ns)

1.00
(32ns)

2.47
(79ns)

1.53
(49ns)

ellint_2

1.91
(554ns)

1.00
(290ns)

2.35
(681ns)

1.66
(480ns)

ellint_2 (complete)

1.94
(64ns)

1.00
(33ns)

2.09
(69ns)

1.00
(33ns)

ellint_3

2.12
(1279ns)

1.00
(602ns)

3.04
(1828ns)

1.63
(982ns)

ellint_3 (complete)

1.97
(691ns)

1.00
(350ns)

3.21
(1122ns)

1.65
(577ns)

ellint_rc

1.47
(47ns)

1.00
(32ns)

2.66
(85ns)

1.53
(49ns)

ellint_rd

1.62
(318ns)

1.00
(196ns)

1.85
(362ns)

1.34
(262ns)

ellint_rf

1.47
(66ns)

1.00
(45ns)

2.33
(105ns)

1.40
(63ns)

ellint_rj

2.00
(352ns)

1.00
(176ns)

2.62
(461ns)

1.45
(255ns)

erf

1.55
(17ns)

1.00
(11ns)

3.36
(37ns)

2.36
(26ns)

erfc

1.47
(25ns)

1.00
(17ns)

3.24
(55ns)

2.06
(35ns)

expint

1.00
(28ns)

1.00
(28ns)

3.18
(89ns)

2.21
(62ns)

expint (En)

1.12
(118ns)

1.00
(105ns)

2.14
(225ns)

1.50
(157ns)

expm1

1.00
(8ns)

1.00
(8ns)

3.75
(30ns)

3.00
(24ns)

gamma_p

1.26
(187ns)

1.00
(149ns)

2.78
(414ns)

1.70
(254ns)

gamma_p_inv

1.26
(659ns)

1.00
(524ns)

2.31
(1212ns)

1.89
(989ns)

gamma_q

1.27
(181ns)

1.00
(143ns)

2.78
(398ns)

1.60
(229ns)

gamma_q_inv

1.36
(689ns)

1.00
(507ns)

2.38
(1208ns)

1.97
(1000ns)

ibeta

1.27
(520ns)

1.00
(408ns)

3.13
(1276ns)

1.72
(701ns)

ibeta_inv

1.32
(1866ns)

1.00
(1409ns)

2.92
(4120ns)

1.79
(2520ns)

ibetac

1.51
(599ns)

1.00
(397ns)

3.27
(1297ns)

1.76
(698ns)

ibetac_inv

1.26
(1985ns)

1.00
(1576ns)

2.66
(4198ns)

1.69
(2666ns)

jacobi_cn

1.20
(177ns)

1.00
(148ns)

3.67
(543ns)

2.15
(318ns)

jacobi_dn

1.17
(213ns)

1.00
(182ns)

3.19
(581ns)

1.84
(335ns)

jacobi_sn

1.31
(202ns)

1.00
(154ns)

3.17
(488ns)

1.81
(279ns)

laguerre

1.00
(121ns)

1.00
(121ns)

1.17
(142ns)

1.10
(133ns)

legendre

1.05
(348ns)

1.15
(380ns)

1.24
(410ns)

1.00
(330ns)

legendre Q

1.00
(415ns)

1.12
(464ns)

1.23
(512ns)

1.05
(437ns)

lgamma

1.28
(88ns)

1.00
(69ns)

3.46
(239ns)

2.03
(140ns)

log1p

1.10
(11ns)

1.00
(10ns)

3.00
(30ns)

1.60
(16ns)

polygamma

1.15
(3952ns)

1.00
(3443ns)

1.12
(3848ns)

2.24
(7699ns)

sph_bessel

1.18
(1002ns)

1.00
(852ns)

1.61
(1372ns)

1.13
(966ns)

sph_neumann

1.23
(1910ns)

1.00
(1557ns)

2.28
(3557ns)

1.12
(1746ns)

tgamma

1.70
(109ns)

1.00
(64ns)

3.33
(213ns)

2.14
(137ns)

tgamma (incomplete)

1.13
(247ns)

1.00
(219ns)

2.53
(553ns)

1.81
(396ns)

trigamma

2.12
(36ns)

1.00
(17ns)

2.88
(49ns)

1.76
(30ns)

zeta

1.81
(161ns)

1.00
(89ns)

3.93
(350ns)

2.60
(231ns)


Table 16.8. Compiler Comparison on linux

Function

GNU C++ version 5.1.0
boost 1.59

GNU C++ version 5.1.0
boost 1.59
promote_double<false>

Intel C++ C++0x mode version 1500
boost 1.59

Intel C++ C++0x mode version 1500
boost 1.59
promote_double<false>

Clang version 3.7.0 (trunk 236512)
boost 1.59

Clang version 3.7.0 (trunk 236512)
boost 1.59
promote_double<false>

assoc_laguerre

1.23
(218ns)

1.05
(186ns)

1.21
(215ns)

1.00
(177ns)

1.23
(217ns)

1.25
(222ns)

assoc_legendre

2.84
(241ns)

1.14
(97ns)

1.92
(163ns)

1.00
(85ns)

2.98
(253ns)

1.18
(100ns)

beta

8.62
(698ns)

1.86
(151ns)

5.99
(485ns)

1.00
(81ns)

9.21
(746ns)

1.86
(151ns)

beta (incomplete)

4.74
(1746ns)

1.51
(555ns)

3.36
(1235ns)

1.00
(368ns)

4.97
(1828ns)

1.51
(554ns)

cbrt

2.56
(41ns)

1.06
(17ns)

2.31
(37ns)

1.12
(18ns)

2.81
(45ns)

1.00
(16ns)

cyl_bessel_i

4.41
(1354ns)

1.24
(381ns)

3.72
(1142ns)

1.00
(307ns)

4.76
(1461ns)

1.28
(394ns)

cyl_bessel_i (integer order)

3.62
(752ns)

1.11
(231ns)

3.38
(702ns)

1.00
(208ns)

4.13
(859ns)

1.17
(243ns)

cyl_bessel_j

3.26
(1029ns)

1.21
(382ns)

2.94
(930ns)

1.00
(316ns)

3.55
(1123ns)

1.33
(420ns)

cyl_bessel_j (integer order)

3.49
(258ns)

1.31
(97ns)

2.92
(216ns)

1.00
(74ns)

3.80
(281ns)

1.30
(96ns)

cyl_bessel_k

7.29
(4416ns)

1.06
(643ns)

7.21
(4370ns)

1.00
(606ns)

7.96
(4826ns)

1.22
(741ns)

cyl_bessel_k (integer order)

10.29
(3456ns)

1.00
(336ns)

11.07
(3721ns)

1.01
(338ns)

15.39
(5170ns)

1.12
(377ns)

cyl_neumann

2.90
(1418ns)

1.17
(574ns)

2.74
(1338ns)

1.00
(489ns)

3.51
(1714ns)

1.21
(594ns)

cyl_neumann (integer order)

2.19
(532ns)

1.06
(258ns)

2.29
(557ns)

1.00
(243ns)

2.93
(713ns)

1.11
(269ns)

digamma

2.79
(67ns)

1.50
(36ns)

2.21
(53ns)

1.00
(24ns)

2.92
(70ns)

1.46
(35ns)

ellint_1

2.03
(349ns)

1.04
(179ns)

2.19
(377ns)

1.00
(172ns)

4.26
(732ns)

1.01
(173ns)

ellint_1 (complete)

2.52
(53ns)

1.19
(25ns)

1.95
(41ns)

1.00
(21ns)

2.29
(48ns)

1.29
(27ns)

ellint_2

2.74
(779ns)

1.19
(339ns)

3.30
(936ns)

1.00
(284ns)

4.79
(1359ns)

1.16
(329ns)

ellint_2 (complete)

2.07
(56ns)

1.19
(32ns)

2.22
(60ns)

1.00
(27ns)

2.00
(54ns)

1.19
(32ns)

ellint_3

3.42
(2031ns)

1.26
(748ns)

3.40
(2016ns)

1.00
(593ns)

4.84
(2873ns)

1.22
(726ns)

ellint_3 (complete)

3.21
(1131ns)

1.29
(455ns)

3.07
(1080ns)

1.00
(352ns)

4.12
(1452ns)

1.27
(447ns)

ellint_rc

2.34
(75ns)

1.44
(46ns)

1.59
(51ns)

1.00
(32ns)

2.38
(76ns)

1.25
(40ns)

ellint_rd

2.58
(488ns)

1.19
(225ns)

2.15
(407ns)

1.00
(189ns)

3.72
(703ns)

1.17
(222ns)

ellint_rf

2.24
(92ns)

1.51
(62ns)

1.63
(67ns)

1.00
(41ns)

2.51
(103ns)

1.37
(56ns)

ellint_rj

3.03
(460ns)

1.30
(198ns)

2.95
(448ns)

1.00
(152ns)

3.89
(591ns)

1.21
(184ns)

erf

2.77
(36ns)

1.00
(13ns)

2.38
(31ns)

1.00
(13ns)

2.77
(36ns)

1.00
(13ns)

erfc

2.79
(53ns)

1.00
(19ns)

2.37
(45ns)

1.00
(19ns)

2.79
(53ns)

1.00
(19ns)

expint

2.87
(89ns)

1.10
(34ns)

2.26
(70ns)

1.00
(31ns)

2.71
(84ns)

1.10
(34ns)

expint (En)

2.20
(244ns)

1.20
(133ns)

1.95
(217ns)

1.00
(111ns)

2.39
(265ns)

1.39
(154ns)

expm1

1.50
(12ns)

1.25
(10ns)

1.50
(12ns)

1.00
(8ns)

1.12
(9ns)

1.25
(10ns)

gamma_p

3.13
(454ns)

1.30
(189ns)

2.54
(369ns)

1.00
(145ns)

3.26
(473ns)

1.30
(188ns)

gamma_p_inv

3.11
(1497ns)

1.42
(684ns)

2.29
(1100ns)

1.00
(481ns)

3.13
(1506ns)

1.41
(678ns)

gamma_q

3.43
(466ns)

1.38
(188ns)

2.66
(362ns)

1.00
(136ns)

3.44
(468ns)

1.36
(185ns)

gamma_q_inv

4.93
(1756ns)

1.92
(683ns)

2.85
(1016ns)

1.00
(356ns)

4.87
(1734ns)

1.94
(691ns)

ibeta

4.52
(1641ns)

1.61
(584ns)

3.33
(1208ns)

1.00
(363ns)

4.75
(1725ns)

1.56
(566ns)

ibeta_inv

3.57
(5230ns)

1.43
(2093ns)

2.92
(4275ns)

1.00
(1465ns)

3.82
(5597ns)

1.43
(2098ns)

ibetac

4.62
(1650ns)

1.64
(586ns)

3.30
(1177ns)

1.00
(357ns)

4.83
(1724ns)

1.59
(566ns)

ibetac_inv

3.58
(5308ns)

1.45
(2141ns)

2.92
(4329ns)

1.00
(1481ns)

3.85
(5703ns)

1.42
(2106ns)

jacobi_cn

3.73
(466ns)

1.33
(166ns)

2.76
(345ns)

1.00
(125ns)

3.85
(481ns)

1.36
(170ns)

jacobi_dn

3.46
(457ns)

1.25
(165ns)

2.74
(362ns)

1.00
(132ns)

3.58
(472ns)

1.27
(167ns)

jacobi_sn

3.75
(465ns)

1.34
(166ns)

2.55
(316ns)

1.00
(124ns)

3.84
(476ns)

1.38
(171ns)

laguerre

1.21
(142ns)

1.03
(121ns)

1.20
(140ns)

1.00
(117ns)

1.18
(138ns)

1.28
(150ns)

legendre

1.16
(385ns)

1.00
(332ns)

1.36
(450ns)

1.14
(377ns)

1.15
(381ns)

1.08
(358ns)

legendre Q

1.21
(466ns)

1.00
(384ns)

1.39
(534ns)

1.19
(457ns)

1.21
(464ns)

1.03
(396ns)

lgamma

3.70
(244ns)

1.68
(111ns)

2.76
(182ns)

1.00
(66ns)

3.95
(261ns)

1.67
(110ns)

log1p

1.00
(11ns)

1.00
(11ns)

1.18
(13ns)

1.09
(12ns)

1.00
(11ns)

1.00
(11ns)

polygamma

10.22
(2791ns)

2.64
(722ns)

5.34
(1459ns)

1.00
(273ns)

10.25
(2798ns)

2.65
(723ns)

sph_bessel

1.81
(1520ns)

1.05
(883ns)

1.69
(1413ns)

1.00
(838ns)

1.92
(1605ns)

1.05
(880ns)

sph_neumann

2.16
(3368ns)

1.01
(1575ns)

2.25
(3514ns)

1.00
(1559ns)

2.42
(3772ns)

1.04
(1620ns)

tgamma

6.28
(333ns)

1.75
(93ns)

3.83
(203ns)

1.00
(53ns)

6.68
(354ns)

1.77
(94ns)

tgamma (incomplete)

3.34
(691ns)

1.42
(293ns)

2.39
(495ns)

1.00
(207ns)

3.51
(726ns)

1.40
(289ns)

trigamma

1.58
(30ns)

1.00
(19ns)

1.74
(33ns)

1.05
(20ns)

1.89
(36ns)

1.11
(21ns)

zeta

4.35
(492ns)

1.61
(182ns)

2.98
(337ns)

1.00
(113ns)

4.11
(464ns)

1.54
(174ns)



PrevUpHomeNext