Эти измерения производительности сосредоточены вокруг форматирования по умолчанию одного числа с плавающей точкой<double>с использованием различных библиотек и методов. Общие сроки выполнения для этих примеров сравниваются ниже. Мы сравниваем с использованием<sprintf>, C++ iostreams,ФорматиДух. карма.
Полный исходный код теста производительности см. здесь:double_performance.cpp. Все измерения были выполнены путем выполнения<1e6>итераций для каждого типа форматирования (нумерации установлены на<1e6>в коде, показанном ниже).
Код, используемый для измерения производительности<sprintf>:
char buffer[256];
for (int i = 0; i < NUMITERATIONS; ++i) {
sprintf(buffer, "%f", 12345.12345);
}
Код, используемый для измерения производительности стандартных C++ iostreams:
std::stringstream strm;
for (int i = 0; i < NUMITERATIONS; ++i) {
strm.str("");
strm << 12345.12345;
}
Код, используемый для измерения производительностиBoost.Format:
std::string generated;
boost::format double_format("%f");
for (int i = 0; i < NUMITERATIONS; ++i)
generated = boost::str(double_format % 12345.12345);
Следующий код показывает общие определения, используемые всеми.Дух. КармаИзмерения эффективности, перечисленные ниже:
using boost::spirit::karma::double_;
Код, используемый для измерения производительностиДух. Кармас использованием простого буфера символов:
char buffer[256];
for (int i = 0; i < NUMITERATIONS; ++i) {
char *p = buffer;
generate(p, double_, 12345.12345);
*p = '\0';
}
В следующей таблице показаны общие результаты работы, собранные при использовании различных компиляторов. Все время измеряется в секундах для<1e6>итераций (платформа: Windows7, процессор Intel Core Duo(tm), 2,8 ГГц, 4 Гбайт оперативной памяти). Для более читабельного сравнения результатов см. этотрисунок.
Table 6. Performance comparison for a single double (all times in [s],
`1e6` iterations)
|
Библиотека
|
gcc 4.4.0 (32 бит)
|
VC++ 10 (32 бит)
|
Intel 11.1 (32 бит)
|
gcc 4.4.0 (64 бит)
|
VC++ 10 (64 бит)
|
Intel 11.1 (64 бит)
|
|---|
спринтф | 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 |
Формат | 3.188 | 3.737 | 2.878 | 3.217 | 2.672 | 2.011 |
Дух.Кармадвойной | 0.813 | 0,561 | 0.368 | 0.426 | 0,260 | 0.218 |