![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Performance Tuning MacrosBoost , Math Toolkit 2.5.0 , Chapter 16. Performance
|
Макро |
значение |
---|---|
BOOST_MATH_POLY_METHOD |
Определяет, как оцениваются полиномы и наиболее рациональные функции. Определите одно из значений 0, 1, 2 или 3: см. ниже значение этих значений. |
BOOST_MATH_RATIONAL_METHOD |
Определяет, как оцениваются симметричные рациональные функции: в основном это влияет только на то, как оценивается приближение Ланчоса и как ведет себя функция< |
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 |
Полиномиальная или рациональная функция оценивается с помощью метода Хорнера и простой петли. Обратите внимание, что если порядок многочлена или рациональной функции является параметром времени выполнения, или порядок больше значения< |
1 |
Полиномиальная или рациональная функция оценивается без использования петли и методом Хорнера. Это происходит только в том случае, если порядок многочлена известен во время компиляции и меньше или равен< |
2 |
Полиномиальная или рациональная функция оценивается без использования петли и методом Хорнера второго порядка. Теоретически это позволяет проводить две операции параллельно для многочленов и четыре параллельно для рациональных функций. Это происходит только в том случае, если порядок многочлена известен во время компиляции и меньше или равен< |
3 |
Полиномиальная или рациональная функция оценивается без использования петли и методом Хорнера второго порядка. Теоретически это позволяет проводить две операции параллельно для многочленов и четыре параллельно для рациональных функций. Это отличается от метода «2» тем, что код тщательно упорядочен, чтобы сделать параллелизацию более очевидной для компилятора: вместо того, чтобы полагаться на оптимизатор компилятора, чтобы определить возможности параллелизации. Это происходит только в том случае, если порядок многочлена известен во время компиляции и меньше или равен< |
Набор тестов производительности генерирует отчет для вашего конкретного компилятора, показывающий, какой метод, вероятно, будет работать лучше всего, следующие таблицы показывают результаты для 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 |
1.00 |
1.00 |
1.00 |
1.00 |
1.00 |
Приказ 3 |
2.08 |
2,75 |
1.08 |
1.08 |
1.08 |
1.08 |
1.08 |
1.00 |
Приказ 4 |
2.06 |
2,71 |
1.06 |
1.00 |
1.06 |
1.06 |
1.00 |
1.00 |
Приказ 5 |
1.32 |
2.00 |
1.00 |
1.00 |
1.05 |
1.05 |
1.05 |
1.05 |
Приказ 6 |
1.38 |
2.04 |
1.08 |
1.00 |
1.08 |
1.08 |
1.35 |
1.38 |
Приказ 7 |
1.43 |
2.13 |
1.03 |
1.00 |
1.10 |
1.03 |
1.10 |
1.13 |
Приказ 8 |
1,65 |
2.22 |
1.00 |
1.08 |
1.14 |
1.05 |
1.08 |
1.11 |
Приказ 9 |
1.39 |
2.05 |
1.17 |
1.17 |
1.00 |
1.05 |
1.15 |
1.12 |
Приказ 10 |
1.37 |
2.20 |
1.22 |
1.24 |
1.00 |
1.00 |
1.17 |
1.17 |
Приказ 11 |
1.59 |
2.24 |
1.37 |
1.29 |
1.22 |
1.00 |
1.22 |
1.22 |
Приказ 12 |
1.46 |
2.16 |
1.28 |
1.26 |
1.02 |
1.00 |
1.07 |
1.05 |
Приказ 13 |
1.61 |
2,55 |
1.32 |
1.39 |
1.04 |
1.00 |
1.11 |
1.07 |
Приказ 14 |
1.61 |
2.23 |
1.45 |
1.45 |
1.02 |
1.02 |
1.00 |
1.09 |
Приказ 15 |
1.49 |
2.10 |
1.35 |
1.35 |
1.00 |
1.00 |
1.00 |
1.02 |
Приказ 16 |
1.54 |
1.99 |
1.49 |
1.45 |
1.07 |
1.00 |
1.08 |
1.02 |
Приказ 17 |
1.51 |
2.02 |
1.57 |
1.50 |
1.02 |
1.00 |
1.07 |
1.06 |
Приказ 18 |
1.53 |
2.16 |
1.49 |
1.57 |
1.11 |
1.09 |
1.00 |
1.08 |
Приказ 19 |
1.90 |
2.27 |
1.62 |
1.62 |
1.08 |
1.00 |
1.17 |
1.19 |
Приказ 20 |
1,65 |
2.08 |
1.45 |
1.44 |
1.00 |
1.00 |
1.01 |
1.03 |
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 |
1.95 |
1.00 |
1.00 |
1.00 |
1.00 |
Приказ 3 |
2.10 |
2.10 |
2.05 |
2.10 |
1.05 |
1.00 |
1.00 |
1.00 |
Приказ 4 |
2.12 |
2.21 |
1.98 |
2.10 |
1.02 |
1.02 |
1.02 |
1.00 |
Приказ 5 |
1.07 |
1.15 |
1.08 |
1.00 |
1.45 |
1.46 |
1.45 |
1.45 |
Приказ 6 |
1.16 |
1.58 |
1.00 |
1.03 |
1.44 |
1.44 |
1.41 |
1.38 |
Приказ 7 |
1.29 |
1.44 |
1.01 |
1.00 |
1.38 |
1.36 |
1.33 |
1.36 |
Приказ 8 |
1.33 |
1.52 |
1.00 |
1.08 |
1.38 |
1.31 |
1.39 |
1.37 |
Приказ 9 |
1.18 |
1.45 |
1.00 |
1.08 |
1.13 |
1.26 |
1.26 |
1.27 |
Приказ 10 |
1.29 |
1.28 |
1.05 |
1.00 |
1.06 |
1.06 |
1.18 |
1.17 |
Приказ 11 |
1.28 |
1.28 |
1.06 |
1.05 |
1.03 |
1.00 |
1.19 |
1.47 |
Приказ 12 |
1.22 |
1.38 |
1.04 |
1.04 |
1.00 |
1.04 |
1.22 |
1.52 |
Приказ 13 |
1.23 |
1.29 |
1.15 |
1.10 |
1.00 |
1.15 |
1.22 |
1.61 |
Приказ 14 |
1.28 |
1.39 |
1.15 |
1.14 |
1.00 |
1.01 |
1.49 |
1.53 |
Приказ 15 |
1.28 |
1.34 |
1.12 |
1.15 |
1.00 |
1.00 |
1.38 |
1.47 |
Приказ 16 |
1.35 |
1.40 |
1.22 |
1.18 |
1.00 |
1.23 |
1.43 |
1.52 |
Приказ 17 |
1.16 |
1.47 |
1.15 |
1.35 |
1.00 |
1.22 |
1.50 |
1.52 |
Приказ 18 |
1.10 |
1.46 |
1.10 |
1.75 |
1.00 |
1.30 |
1.41 |
1.46 |
Приказ 19 |
1.26 |
1.35 |
1.24 |
1.33 |
1.00 |
1.22 |
1.44 |
1.46 |
Приказ 20 |
1.24 |
1.60 |
1.22 |
1.56 |
1.00 |
1.19 |
1.57 |
1.56 |
[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]
Статья Performance Tuning Macros раздела Math Toolkit 2.5.0 Chapter 16. Performance может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 16. Performance ::
реклама |