Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Comparing the performance of a sequence of several generators

Boost , Spirit 2.5.2 , Performance of Numeric Generators

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

Эти измерения производительности сосредоточены вокруг форматирования последовательности различных элементов, включая числа с плавающей точкой 2<double>с использованием различных библиотек и методов. Общие сроки выполнения для этих примеров сравниваются ниже. Мы сравниваем с использованием<sprintf>, C++ iostreams,ФорматиДух. карма.

Полный исходный код теста производительности см. здесь:format_performance.cpp. Все измерения были выполнены с помощью<1e6>итераций для каждого типа форматирования (НУМЕРЕНИЯ установлены на<1e6>).

Код, используемый для измерения производительности для sprintf:

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

Код, используемый для измерения производительности стандартных iostreams:

std::stringstream strm;
for (int i = 0; i < NUMITERATIONS; ++i) {
    strm.str("");
    strm << '['
      << std::setiosflags(std::ios::fixed)
      << std::left
      << std::setprecision(3)
      << std::setw(14)
      << 12345.12345
      << std::setw(14)
      << 12345.12345
      << ']';
}

Код, используемый для измерения производительностиBoost.Format:

std::string generated;
boost::format outformat("[%-14.3f%-14.3f]");
for (int i = 0; i < NUMITERATIONS; ++i)
    generated = boost::str(outformat % 12345.12345 % 12345.12345);

Следующий код показывает общие определения, используемые всеми.Дух. КармаИзмерения эффективности, перечисленные ниже:

template <typename T>
struct double3_policy : boost::spirit::karma::real_policies<T>
{
    //  we want to generate up to 3 fractional digits
    static unsigned int precision(T) { return 3; }
};
typedef boost::spirit::karma::real_generator<double, double3_policy<double> >
    double3_type;
double3_type const double3 = double3_type();

Код, используемый для измерения производительностиДух. Кармас использованием простого буфера символов:

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

В следующей таблице показаны общие результаты работы, собранные при использовании различных компиляторов. Все время измеряется в секундах для<1e6>итераций (платформа: Windows7, процессор Intel Core Duo(tm), 2,8 ГГц, 4 ГБ ОЗУ). Для более читабельного сравнения результатов см. этотрисунок.

Table 7. Performance comparison for a sequence of several items (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 бит)

спринтф

1.725

1.892

1.903

1.469

1.608

1.493

iostreams

4.827

5.287

4.444

3.112

3.319

2.877

Формат

5.881

7.089

5.801

5.455

5.254

4.164

Дух. Карма

1.942

1.242

0.999

1.334

0.758

0.686


Figure 5. Performance comparison for a sequence of several items

Performance comparison for a sequence of several items



PrevUpHomeNext

Статья Comparing the performance of a sequence of several generators раздела Spirit 2.5.2 Performance of Numeric Generators может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Performance of Numeric Generators ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:26:40/0.025674819946289/1