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

Performance Tuning Macros

Boost , Math Toolkit 2.5.0 , Chapter 16. Performance

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

Существует небольшое количество вариантов настройки производительности, которые определяются макросами конфигурации. Они должны быть установлены в boost/math/tools/user.hpp; или же сообщены в список рассылки Boost-Development, чтобы соответствующий параметр для данного компилятора и платформы ОС мог быть установлен автоматически в нашей конфигурации.

Макро

значение

BOOST_MATH_POLY_METHOD

Определяет, как оцениваются полиномы и наиболее рациональные функции. Определите одно из значений 0, 1, 2 или 3: см. ниже значение этих значений.

BOOST_MATH_RATIONAL_METHOD

Определяет, как оцениваются симметричные рациональные функции: в основном это влияет только на то, как оценивается приближение Ланчоса и как ведет себя функция<evaluate_rational>. Определите одно из значений 0, 1, 2 или 3: см. ниже значение этих значений.

BOOST_MATH_MAX_POLY_ORDER

Максимальный порядок полиномиальной или рациональной функции, который будет оцениваться методом, отличным от 0 (простой цикл «для»).

BOOST_MATH_INT_TABLE_TYPE (RT, IT)

Многие из коэффициентов к многочленам и рациональным функциям, используемым этой библиотекой, являются целыми числами. Обычно они хранятся в виде таблиц в виде целых чисел, но если смешанная целочисленная арифметика / арифметика с плавающей точкой намного медленнее, чем обычная арифметика с плавающей точкой, то они могут храниться в виде таблиц значений с плавающей точкой. Если смешанная арифметика медленная, то добавьте:

#define BOOST_MATH_INT_TABLE_TYPE (RT, IT) RT

для boost/math/tools/user.hpp, иначе по умолчанию:

#define BOOST_MATH_INT_TABLE_TYPE (RT, IT) IT

Настройка в boost/math/config.hpp хороша и может привести к уменьшению кода.

Значения, которые могут быть установлены<BOOST_MATH_POLY_METHOD>и<BOOST_MATH_RATIONAL_METHOD>, следующие:

ценность

Эффект

0

Полиномиальная или рациональная функция оценивается с помощью метода Хорнера и простой петли.

Обратите внимание, что если порядок многочлена или рациональной функции является параметром времени выполнения, или порядок больше значения<BOOST_MATH_MAX_POLY_ORDER>, то этот метод всегда используется независимо от значения<BOOST_MATH_POLY_METHOD>или<BOOST_MATH_RATIONAL_METHOD>.

1

Полиномиальная или рациональная функция оценивается без использования петли и методом Хорнера. Это происходит только в том случае, если порядок многочлена известен во время компиляции и меньше или равен<BOOST_MATH_MAX_POLY_ORDER>

.

2

Полиномиальная или рациональная функция оценивается без использования петли и методом Хорнера второго порядка. Теоретически это позволяет проводить две операции параллельно для многочленов и четыре параллельно для рациональных функций. Это происходит только в том случае, если порядок многочлена известен во время компиляции и меньше или равен<BOOST_MATH_MAX_POLY_ORDER>

.

3

Полиномиальная или рациональная функция оценивается без использования петли и методом Хорнера второго порядка. Теоретически это позволяет проводить две операции параллельно для многочленов и четыре параллельно для рациональных функций. Это отличается от метода «2» тем, что код тщательно упорядочен, чтобы сделать параллелизацию более очевидной для компилятора: вместо того, чтобы полагаться на оптимизатор компилятора, чтобы определить возможности параллелизации. Это происходит только в том случае, если порядок многочлена известен во время компиляции и меньше или равен<BOOST_MATH_MAX_POLY_ORDER>

.

Набор тестов производительности генерирует отчет для вашего конкретного компилятора, показывающий, какой метод, вероятно, будет работать лучше всего, следующие таблицы показывают результаты для MSVC-14.0 и GCC-5.1.0 (Linux). Существует не так много, чтобы выбрать между различными методами, но, как правило, петлевые методы работают лучше. Интересно, что заказ кода, чтобы попытаться «второе предположение» возможных оптимизаций, кажется, не такая хорошая идея (метод 3 ниже).

Table 16.3. Polynomial Method Comparison with Microsoft Visual C++ version 14.0 on Windows x64

Функция

Способ 0
(двойные коэффициенты)

Способ 0
(целочисленные коэффициенты)

Способ 1
(Двойные коэффициенты)

Способ 1
(целочисленные коэффициенты)

Способ 2
(Двойные коэффициенты)

Способ 2
(целочисленные коэффициенты)

Способ 3
(двойные коэффициенты)

Способ 3
(целочисленные коэффициенты)

Приказ 2

-

-

1.00
(9нс)

1.00
(9нс)

1.00
(9нс)

1.00
(9нс)

1.00
(9нс)

1.00
(9нс)

Приказ 3

2.08
(25н)

2,75
(33нс)

1.08
(13нс)

1.08
(13нс)

1.08
(13нс)

1.08
(13нс)

1.08
(13нс)

1.00
(12н)

Приказ 4

2.06
(35н)

2,71
(46н)

1.06
(18ns)

1.00
(17ns)

1.06
(18ns)

1.06
(18ns)

1.00
(17ns)

1.00
(17ns)

Приказ 5

1.32
(29ns)

2.00
(44нс)

1.00
(22ns)

1.00
(22ns)

1.05
(23нс)

1.05
(23нс)

1.05
(23нс)

1.05
(23нс)

Приказ 6

1.38
(36н)

2.04
(53н)

1.08
(28н)

1.00
(26н)

1.08
(28н)

1.08
(28н)

1.35
(35н)

1.38
(36н)

Приказ 7

1.43
(43нс)

2.13
(64н)

1.03
(31нс)

1.00
(30н)

1.10
(33нс)

1.03
(31нс)

1.10
(33нс)

1.13
(34ns)

Приказ 8

1,65
(61нс)

2.22
(82нс)

1.00
(37n)

1.08
(40ns)

1.14
(42ns)

1.05
(39н)

1.08
(40ns)

1.11
(41нс)

Приказ 9

1.39
(57н)

2.05
(84н)

1.17
(48н)

1.17
(48н)

1.00
(41нс)

1.05
(43нс)

1.15
(47н)

1.12
(46н)

Приказ 10

1.37
(63нс)

2.20
(101нс)

1.22
(56н)

1.24
(57ns)

1.00
(46н)

1.00
(46н)

1.17
(54ns)

1.17
(54ns)

Приказ 11

1.59
(78н)

2.24
(110н)

1.37
(67н)

1.29
(63нс)

1.22
(60нс)

1.00
(49ns)

1.22
(60нс)

1.22
(60нс)

Приказ 12

1.46
(83нс)

2.16
(123нс)

1.28
(73нс)

1.26
(72ns)

1.02
(58ns)

1.00
(57н)

1.07
(61нс)

1.05
(60нс)

Приказ 13

1.61
(90ns)

2,55
(143н)

1.32
(74н)

1.39
(78н)

1.04
(58ns)

1.00
(56н)

1.11
(62нс)

1.07
(60ns)

Приказ 14

1.61
(106н)

2.23
(147н)

1.45
(96н)

1.45
(96н)

1.02
(67ns)

1.02
(67ns)

1.00
(66н)

1.09
(72н)

Приказ 15

1.49
(119ns)

2.10
(168н)

1.35
(108нс)

1.35
(108нс)

1.00
(80н)

1.00
(80н)

1.00
(80н)

1.02
(82нс)

Приказ 16

1.54
(129ns)

1.99
(167н)

1.49
(125н)

1.45
(122ns)

1.07
(90ns)

1.00
(84n)

1.08
(91нс)

1.02
(86н)

Приказ 17

1.51
(133ns)

2.02
(178н)

1.57
(138ns)

1.50
(132ns)

1.02
(90ns)

1.00
(88н)

1.07
(94ns)

1.06
(93нс)

Приказ 18

1.53
(148н)

2.16
(210н)

1.49
(145н)

1.57
(152н)

1.11
(108нс)

1.09
(106н)

1.00
(97ns)

1.08
(105н)

Приказ 19

1.90
(194ns)

2.27
(232ns)

1.62
(165ns)

1.62
(165ns)

1.08
(110н)

1.00
(102н)

1.17
(119ns)

1.19
(121нс)

Приказ 20

1,65
(206нс)

2.08
(260нс)

1.45
(181нс)

1.44
(180нс)

1.00
(125н)

1.00
(125н)

1.01
(126н)

1.03
(129ns)


Table 16.4. Rational Method Comparison with Microsoft Visual C++ version 14.0 on Windows x64

Функция

Способ 0
(двойные коэффициенты)

Способ 0
(целочисленные коэффициенты)

Способ 1
(Двойные коэффициенты)

Способ 1
(целочисленные коэффициенты)

Способ 2
(Двойные коэффициенты)

Способ 2
(целочисленные коэффициенты)

Способ 3
(двойные коэффициенты)

Способ 3
(целочисленные коэффициенты)

Приказ 2

-

-

2.12
(89ns)

1.95
(82ns)

1.00
(42ns)

1.00
(42ns)

1.00
(42ns)

1.00
(42ns)

Приказ 3

2.10
(88ns)

2.10
(88ns)

2.05
(86н)

2.10
(88ns)

1.05
(44н)

1.00
(42ns)

1.00
(42ns)

1.00
(42ns)

Приказ 4

2.12
(89ns)

2.21
(93нс)

1.98
(83н)

2.10
(88ns)

1.02
(43нс)

1.02
(43нс)

1.02
(43нс)

1.00
(42ns)

Приказ 5

1.07
(90ns)

1.15
(97ns)

1.08
(91нс)

1.00
(84n)

1.45
(122ns)

1.46
(123нс)

1.45
(122ns)

1.45
(122ns)

Приказ 6

1.16
(102н)

1.58
(139ns)

1.00
(88н)

1.03
(91нс)

1.44
(127ns)

1.44
(127ns)

1.41
(124н)

1.38
(121ns)

Приказ 7

1.29
(121нс)

1.44
(135n)

1.01
(95ns)

1.00
(94ns)

1.38
(130ns)

1.36
(128н)

1.33
(125н)

1.36
(128н)

Приказ 8

1.33
(134ns)

1.52
(154ns)

1.00
(101н)

1.08
(109нс)

1.38
(139ns)

1.31
(132ns)

1.39
(140ns)

1.37
(138ns)

Приказ 9

1.18
(141нс)

1.45
(172ns)

1.00
(119ns)

1.08
(128нс)

1.13
(135ns)

1.26
(150н)

1.26
(150н)

1.27
(151ns)

Приказ 10

1.29
(180нс)

1.28
(178ns)

1.05
(146ns)

1.00
(139н)

1.06
(147н)

1.06
(147н)

1.18
(164н)

1.17
(163ns)

Приказ 11

1.28
(187нс)

1.28
(187нс)

1.06
(155ns)

1.05
(154ns)

1.03
(151ns)

1.00
(146ns)

1.19
(174ns)

1.47
(215н)

Приказ 12

1.22
(197нс)

1.38
(223ns)

1.04
(168ns)

1.04
(169ns)

1.00
(162н)

1.04
(169ns)

1.22
(198нс)

1.52
(246ns)

Приказ 13

1.23
(209ns)

1.29
(220ns)

1.15
(196нс)

1.10
(187нс)

1.00
(170н)

1.15
(196нс)

1.22
(208н)

1.61
(273нс)

Приказ 14

1.28
(242ns)

1.39
(262н)

1.15
(218ns)

1.14
(216ns)

1.00
(189ns)

1.01
(191нс)

1.49
(282н)

1.53
(290ns)

Приказ 15

1.28
(260н)

1.34
(273нс)

1.12
(227ns)

1.15
(233нс)

1.00
(203н)

1.00
(203н)

1.38
(280н)

1.47
(298ns)

Приказ 16

1.35
(288ns)

1.40
(300ns)

1.22
(261нс)

1.18
(252н)

1.00
(214ns)

1.23
(264н)

1.43
(305ns)

1.52
(325н)

Приказ 17

1.16
(259ns)

1.47
(328н)

1.15
(256н)

1.35
(302нс)

1.00
(223н)

1.22
(273нс)

1.50
(334ns)

1.52
(339ns)

Приказ 18

1.10
(273нс)

1.46
(363нс)

1.10
(273нс)

1.75
(434ns)

1.00
(248н)

1.30
(322ns)

1.41
(349ns)

1.46
(363нс)

Приказ 19

1.26
(330н)

1.35
(352ns)

1.24
(324ns)

1.33
(348ns)

1.00
(261нс)

1.22
(319ns)

1.44
(377ns)

1.46
(381нс)

Приказ 20

1.24
(330ns)

1.60
(427ns)

1.22
(327ns)

1.56
(416ns)

1.00
(267н)

1.19
(317ns)

1.57
(418ns)

1.56
(416ns)


[table_Polynomial_Method_Comparison_with_GNU_C_version_5_1_0_on_linux]

[table_Rational_Method_Comparison_with_GNU_C_version_5_1_0_on_linux]


PrevUpHomeNext

Статья Performance Tuning Macros раздела Math Toolkit 2.5.0 Chapter 16. Performance может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 16. Performance ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 05:12:32/0.0069780349731445/0