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

Click here to view the latest version of this page.
PrevUpHomeNext
Comparing the performance of a single double_ generator

These performance measurements are centered around default formatting of a single double floating point number using different libraries and methods. The overall execution times for those examples are compared below. We compare using sprintf, C++ iostreams, Boost.Format, and Spirit.Karma.

For the full source code of the performance test please see here: double_performance.cpp. All the measurements have been done by executing 1e6 iterations for each formatting type (NUMITERATIONS is set to 1e6 in the code shown below).

Code used to measure the performance for sprintf:

char buffer[256];
for (int i = 0; i < NUMITERATIONS; ++i) {
    sprintf(buffer, "%f", 12345.12345);
}

Code used to measure the performance for standard C++ iostreams:

std::stringstream strm;
for (int i = 0; i < NUMITERATIONS; ++i) {
    strm.str("");
    strm << 12345.12345;
}

Code used to measure the performance for Boost.Format:

std::string generated;
boost::format double_format("%f");
for (int i = 0; i < NUMITERATIONS; ++i) 
    generated = boost::str(double_format % 12345.12345);

The following code shows the common definitions used by all Spirit.Karma performance measurements as listed below:

using boost::spirit::karma::double_;

Code used to measure the performance for Spirit.Karma using a plain character buffer:

char buffer[256];
for (int i = 0; i < NUMITERATIONS; ++i) {
    char *p = buffer;
    generate(p, double_, 12345.12345);
    *p = '\0';
}

The following table shows the overall performance results collected while using different compilers. All times are in seconds measured for 1e6 iterations (platform: Windows7, Intel Core Duo(tm) Processor, 2.8GHz, 4GByte RAM). For a more readable comparison of the results see this figure.

Table 6. Performance comparison for a single double (all times in [s], `1e6` iterations)

Library

gcc 4.4.0 (32 bit)

VC++ 10 (32 bit)

Intel 11.1 (32 bit)

gcc 4.4.0 (64 bit)

VC++ 10 (64 bit)

Intel 11.1 (64 bit)

sprintf

0.755

0.965

0.880

0.713

0.807

0.694

iostreams

2.316

2.624

1.964

1.634

1.468

1.354

Boost.Format

3.188

3.737

2.878

3.217

2.672

2.011

Spirit.Karma double_

0.813

0.561

0.368

0.426

0.260

0.218


Figure 4. Performance comparison for a single double

Performance comparison for a single double



PrevUpHomeNext