SlideShare a Scribd company logo
1
C++ optimization techniques
Oleksandr Antsyferov
16.05.18
3
Инструментарий
• Операционная система
- Windows 10
• Компилятор
- Microsoft C/C++ 19.14.26428.1
• Профайлеры
- Intel VTune Amplifier 2018
4
Порядок обхода матрицы
• Задействовано одинаковое количество
памяти
• Одинаковое количество операций
• Разница в производительности в 15 раз
5
Вопросы
• Справедливо ли это утверждение?
• Какой процент производительности должен меня интересовать?
• Каковы причины такой разницы в производительности?
• Влияют ли эти причины на другие аспекты работы продукта?
6
Сумма вертикального/горизонтального обхода
7
8
Вопросы
• Справедливо ли это утверждение?
• Какой процент производительности должен меня интересовать?
• Каковы причины такой разницы в производительности?
• Влияют ли эти причины на другие аспекты работы продукта?
99
“premature optimization is the root
of all evil.”
Knuth, Donald (December 1974)
1010
“We should forget about small
efficiencies, say about 97% of the
time: premature optimization is the
root of all evil. Yet we should not
pass up our opportunities in that
critical 3% statement)”
Knuth, Donald (December 1974)
1111
“In established engineering
disciplines a 12% improvement,
easily obtained, is never considered
marginal and I believe the same
viewpoint should prevail in software
engineering”
Knuth, Donald (December 1974)
12
Вопросы
• Справедливо ли это утверждение?
• Какой процент производительности должен меня интересовать?
• Каковы причины такой разницы в производительности?
• Влияют ли эти причины на другие аспекты работы продукта?
13
Векторизация
• Плюсы
- повышение
производительности
• Минусы
- не все алгоритмы подходят
для векторизации
- зачастую требует ручного
труда программиста
- завязана на целевую
архитектуру и может
требовать нескольких
альтернативных реализаций
14
Векторизация
• Оптимизирующие компиляторы делают автоматическую векторизацию
по мере своих способностей
• Использовать директивы компилятора для указания мест подлежащих
автоматической векторизации
• Использовать флаги компиляции для получения сообщений отладки о
результатах автоматической векторизации
• Писать алгоритмы используя встроенные функции компилятора или
ассемблерные вставки
15
16
Обход без суммирования
17
18
19
Система кэширования
• чтение регистра 0 циклов
• чтение L1 3-4 циклов
• чтение L2 10-12 циклов
• чтение L3 30-70 циклов
• чтение RAM 100-150 циклов
20
• L1 32 KB 8-way set
associative cache
• L2 256 KB 4-way set
associative
• L3 4 MB 16-way set
associative
• 64 B cache line
Частично ассоциативный кэш
21
Подсчет количества промахов(VTune)
22
Вопросы
• Справедливо ли это утверждение?
• Какой процент производительности должен меня интересовать?
• Каковы причины такой разницы в производительности?
• Влияют ли эти причины на другие аспекты работы продукта?
23
24
Последовательное чтение памяти с пропусками
25
х = размер пропуска
26
Чтение флажков в коллекции объектов
27
х = размер неиспользуемой части объекта
28
Пространственная локальность
• Предсказуемое расположение данных в памяти
• Предсказуемое расположения исполняемого кода в памяти
• Оптимальное использования системы кэширования центрального
процессора
29
Проблемы объектно-ориентированный подход
• Поощряет создание иерархии классов удобных для понимания
программистом
• Приводит к неоптимальной пространственной локальности данных в
связи с тем что порядок объявления полей класса напрямую влияет на
их порядок в памяти
• Сосредотачивает исходный код вокруг данных вместо программного.
30
Данно-ориентированный дизайн (DOD)
• Рассматривать программный продукт, как сущность решающую задачу
трансформации данных
• Пространственная локальность данных в памяти выходит на первый план
• Статистические характеристики данных учитываются при их переборе и
трансформации
• Код пишется для наиболее вероятного случая согласно решаемой
задачи в предметной области
31
Параллельное суммирование
• суммируемый массив
константной длины
• 8 потоков
• уменьшается
расстояние между
аккумуляторами
32
Система кэширования
• чтение регистра 0 тактов
• чтение L1 3-4 такта
• чтение L2 10-12 тактов
• чтение L3 30-70 тактов
• чтение RAM 100-150 тактов
33
False sharing
• inline constexpr std::size_t
hardware_destructive_interference_size = /*implementation-defined*/;
• inline constexpr std::size_t
hardware_constructive_interference_size = /*implementation-defined*/;
34
Итоги
• Полная утилизация кэша
• Компактность = скорость
• Предсказуемость = скорость
35
Итоги
• Рассматривать линейный массив или комбинацию линейных массивов,
как первый вариант при выборе контейнеров
• Использовать максимальное количество данных попавших в кэш линию
• Следить за отсутствием False Sharing
36
Итоги
• Следить за тем, что исполняемый код помещается в кэш инструкции
- чем может мешать перебор коллекции с вызовом виртуальных функций членов
класса
• Быстрые пути выполнения кода без проверок
- срезать медленные пути выполнения до вхождения в “быстрый” путь
• Profiler guided optimization
37
К дальнейшему рассмотрению
• Полиморфизм и кэш инструкций
• Полиморфизм и предсказание ветки выполнения

More Related Content

Similar to С++ Optimization Techniques

владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_ha
Elena Ometova
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...Ilya Kosmodemiansky
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
DotNetConf
 
Гидродинамическое моделирование: возможности оптимизации ИТ-инфраструктуры
Гидродинамическое моделирование: возможности оптимизации ИТ-инфраструктурыГидродинамическое моделирование: возможности оптимизации ИТ-инфраструктуры
Гидродинамическое моделирование: возможности оптимизации ИТ-инфраструктуры
Vsevolod Shabad
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Sergey Xek
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Ontico
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
CodeFest
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
Alexey Ermakov
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
supercluster
superclustersupercluster
Автоматизация тестирования как способ получения знаний
Автоматизация тестирования как способ получения знанийАвтоматизация тестирования как способ получения знаний
Автоматизация тестирования как способ получения знаний
SQALab
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
FlyElephant
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev
 
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Ontico
 
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Fwdays
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
etyumentcev
 
кластеры и суперкомпьютеры
кластеры и суперкомпьютерыкластеры и суперкомпьютеры
кластеры и суперкомпьютеры
nastena07051995
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
Yandex
 

Similar to С++ Optimization Techniques (20)

владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_ha
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 
Гидродинамическое моделирование: возможности оптимизации ИТ-инфраструктуры
Гидродинамическое моделирование: возможности оптимизации ИТ-инфраструктурыГидродинамическое моделирование: возможности оптимизации ИТ-инфраструктуры
Гидродинамическое моделирование: возможности оптимизации ИТ-инфраструктуры
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
supercluster
superclustersupercluster
supercluster
 
R-Style Part
R-Style PartR-Style Part
R-Style Part
 
Автоматизация тестирования как способ получения знаний
Автоматизация тестирования как способ получения знанийАвтоматизация тестирования как способ получения знаний
Автоматизация тестирования как способ получения знаний
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
 
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 
кластеры и суперкомпьютеры
кластеры и суперкомпьютерыкластеры и суперкомпьютеры
кластеры и суперкомпьютеры
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
 

More from GlobalLogic Ukraine

GlobalLogic Embedded Community x ROS Ukraine Webinar "Surgical Robots"
GlobalLogic Embedded Community x ROS Ukraine Webinar "Surgical Robots"GlobalLogic Embedded Community x ROS Ukraine Webinar "Surgical Robots"
GlobalLogic Embedded Community x ROS Ukraine Webinar "Surgical Robots"
GlobalLogic Ukraine
 
GlobalLogic Java Community Webinar #17 “SpringJDBC vs JDBC. Is Spring a Hero?”
GlobalLogic Java Community Webinar #17 “SpringJDBC vs JDBC. Is Spring a Hero?”GlobalLogic Java Community Webinar #17 “SpringJDBC vs JDBC. Is Spring a Hero?”
GlobalLogic Java Community Webinar #17 “SpringJDBC vs JDBC. Is Spring a Hero?”
GlobalLogic Ukraine
 
GlobalLogic JavaScript Community Webinar #18 “Long Story Short: OSI Model”
GlobalLogic JavaScript Community Webinar #18 “Long Story Short: OSI Model”GlobalLogic JavaScript Community Webinar #18 “Long Story Short: OSI Model”
GlobalLogic JavaScript Community Webinar #18 “Long Story Short: OSI Model”
GlobalLogic Ukraine
 
Штучний інтелект як допомога в навчанні, а не замінник.pptx
Штучний інтелект як допомога в навчанні, а не замінник.pptxШтучний інтелект як допомога в навчанні, а не замінник.pptx
Штучний інтелект як допомога в навчанні, а не замінник.pptx
GlobalLogic Ukraine
 
Задачі AI-розробника як застосовується штучний інтелект.pptx
Задачі AI-розробника як застосовується штучний інтелект.pptxЗадачі AI-розробника як застосовується штучний інтелект.pptx
Задачі AI-розробника як застосовується штучний інтелект.pptx
GlobalLogic Ukraine
 
Що треба вивчати, щоб стати розробником штучного інтелекту та нейромереж.pptx
Що треба вивчати, щоб стати розробником штучного інтелекту та нейромереж.pptxЩо треба вивчати, щоб стати розробником штучного інтелекту та нейромереж.pptx
Що треба вивчати, щоб стати розробником штучного інтелекту та нейромереж.pptx
GlobalLogic Ukraine
 
GlobalLogic Java Community Webinar #16 “Zaloni’s Architecture for Data-Driven...
GlobalLogic Java Community Webinar #16 “Zaloni’s Architecture for Data-Driven...GlobalLogic Java Community Webinar #16 “Zaloni’s Architecture for Data-Driven...
GlobalLogic Java Community Webinar #16 “Zaloni’s Architecture for Data-Driven...
GlobalLogic Ukraine
 
JavaScript Community Webinar #14 "Why Is Git Rebase?"
JavaScript Community Webinar #14 "Why Is Git Rebase?"JavaScript Community Webinar #14 "Why Is Git Rebase?"
JavaScript Community Webinar #14 "Why Is Git Rebase?"
GlobalLogic Ukraine
 
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
GlobalLogic Ukraine
 
Страх і сила помилок - IT Inside від GlobalLogic Education
Страх і сила помилок - IT Inside від GlobalLogic EducationСтрах і сила помилок - IT Inside від GlobalLogic Education
Страх і сила помилок - IT Inside від GlobalLogic Education
GlobalLogic Ukraine
 
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
GlobalLogic Ukraine
 
GlobalLogic QA Webinar “What does it take to become a Test Engineer”
GlobalLogic QA Webinar “What does it take to become a Test Engineer”GlobalLogic QA Webinar “What does it take to become a Test Engineer”
GlobalLogic QA Webinar “What does it take to become a Test Engineer”
GlobalLogic Ukraine
 
“How to Secure Your Applications With a Keycloak?
“How to Secure Your Applications With a Keycloak?“How to Secure Your Applications With a Keycloak?
“How to Secure Your Applications With a Keycloak?
GlobalLogic Ukraine
 
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
GlobalLogic Ukraine
 
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
GlobalLogic Ukraine
 
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
GlobalLogic Ukraine
 
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
GlobalLogic Ukraine
 
GlobalLogic Webinar "Introduction to Embedded QA"
GlobalLogic Webinar "Introduction to Embedded QA"GlobalLogic Webinar "Introduction to Embedded QA"
GlobalLogic Webinar "Introduction to Embedded QA"
GlobalLogic Ukraine
 
C++ Webinar "Why Should You Learn C++ in 2021-22?"
C++ Webinar "Why Should You Learn C++ in 2021-22?"C++ Webinar "Why Should You Learn C++ in 2021-22?"
C++ Webinar "Why Should You Learn C++ in 2021-22?"
GlobalLogic Ukraine
 
GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...
GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...
GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...
GlobalLogic Ukraine
 

More from GlobalLogic Ukraine (20)

GlobalLogic Embedded Community x ROS Ukraine Webinar "Surgical Robots"
GlobalLogic Embedded Community x ROS Ukraine Webinar "Surgical Robots"GlobalLogic Embedded Community x ROS Ukraine Webinar "Surgical Robots"
GlobalLogic Embedded Community x ROS Ukraine Webinar "Surgical Robots"
 
GlobalLogic Java Community Webinar #17 “SpringJDBC vs JDBC. Is Spring a Hero?”
GlobalLogic Java Community Webinar #17 “SpringJDBC vs JDBC. Is Spring a Hero?”GlobalLogic Java Community Webinar #17 “SpringJDBC vs JDBC. Is Spring a Hero?”
GlobalLogic Java Community Webinar #17 “SpringJDBC vs JDBC. Is Spring a Hero?”
 
GlobalLogic JavaScript Community Webinar #18 “Long Story Short: OSI Model”
GlobalLogic JavaScript Community Webinar #18 “Long Story Short: OSI Model”GlobalLogic JavaScript Community Webinar #18 “Long Story Short: OSI Model”
GlobalLogic JavaScript Community Webinar #18 “Long Story Short: OSI Model”
 
Штучний інтелект як допомога в навчанні, а не замінник.pptx
Штучний інтелект як допомога в навчанні, а не замінник.pptxШтучний інтелект як допомога в навчанні, а не замінник.pptx
Штучний інтелект як допомога в навчанні, а не замінник.pptx
 
Задачі AI-розробника як застосовується штучний інтелект.pptx
Задачі AI-розробника як застосовується штучний інтелект.pptxЗадачі AI-розробника як застосовується штучний інтелект.pptx
Задачі AI-розробника як застосовується штучний інтелект.pptx
 
Що треба вивчати, щоб стати розробником штучного інтелекту та нейромереж.pptx
Що треба вивчати, щоб стати розробником штучного інтелекту та нейромереж.pptxЩо треба вивчати, щоб стати розробником штучного інтелекту та нейромереж.pptx
Що треба вивчати, щоб стати розробником штучного інтелекту та нейромереж.pptx
 
GlobalLogic Java Community Webinar #16 “Zaloni’s Architecture for Data-Driven...
GlobalLogic Java Community Webinar #16 “Zaloni’s Architecture for Data-Driven...GlobalLogic Java Community Webinar #16 “Zaloni’s Architecture for Data-Driven...
GlobalLogic Java Community Webinar #16 “Zaloni’s Architecture for Data-Driven...
 
JavaScript Community Webinar #14 "Why Is Git Rebase?"
JavaScript Community Webinar #14 "Why Is Git Rebase?"JavaScript Community Webinar #14 "Why Is Git Rebase?"
JavaScript Community Webinar #14 "Why Is Git Rebase?"
 
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
 
Страх і сила помилок - IT Inside від GlobalLogic Education
Страх і сила помилок - IT Inside від GlobalLogic EducationСтрах і сила помилок - IT Inside від GlobalLogic Education
Страх і сила помилок - IT Inside від GlobalLogic Education
 
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
 
GlobalLogic QA Webinar “What does it take to become a Test Engineer”
GlobalLogic QA Webinar “What does it take to become a Test Engineer”GlobalLogic QA Webinar “What does it take to become a Test Engineer”
GlobalLogic QA Webinar “What does it take to become a Test Engineer”
 
“How to Secure Your Applications With a Keycloak?
“How to Secure Your Applications With a Keycloak?“How to Secure Your Applications With a Keycloak?
“How to Secure Your Applications With a Keycloak?
 
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
 
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
 
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
 
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
 
GlobalLogic Webinar "Introduction to Embedded QA"
GlobalLogic Webinar "Introduction to Embedded QA"GlobalLogic Webinar "Introduction to Embedded QA"
GlobalLogic Webinar "Introduction to Embedded QA"
 
C++ Webinar "Why Should You Learn C++ in 2021-22?"
C++ Webinar "Why Should You Learn C++ in 2021-22?"C++ Webinar "Why Should You Learn C++ in 2021-22?"
C++ Webinar "Why Should You Learn C++ in 2021-22?"
 
GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...
GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...
GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...
 

С++ Optimization Techniques

  • 2. 3 Инструментарий • Операционная система - Windows 10 • Компилятор - Microsoft C/C++ 19.14.26428.1 • Профайлеры - Intel VTune Amplifier 2018
  • 3. 4 Порядок обхода матрицы • Задействовано одинаковое количество памяти • Одинаковое количество операций • Разница в производительности в 15 раз
  • 4. 5 Вопросы • Справедливо ли это утверждение? • Какой процент производительности должен меня интересовать? • Каковы причины такой разницы в производительности? • Влияют ли эти причины на другие аспекты работы продукта?
  • 6. 7
  • 7. 8 Вопросы • Справедливо ли это утверждение? • Какой процент производительности должен меня интересовать? • Каковы причины такой разницы в производительности? • Влияют ли эти причины на другие аспекты работы продукта?
  • 8. 99 “premature optimization is the root of all evil.” Knuth, Donald (December 1974)
  • 9. 1010 “We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3% statement)” Knuth, Donald (December 1974)
  • 10. 1111 “In established engineering disciplines a 12% improvement, easily obtained, is never considered marginal and I believe the same viewpoint should prevail in software engineering” Knuth, Donald (December 1974)
  • 11. 12 Вопросы • Справедливо ли это утверждение? • Какой процент производительности должен меня интересовать? • Каковы причины такой разницы в производительности? • Влияют ли эти причины на другие аспекты работы продукта?
  • 12. 13 Векторизация • Плюсы - повышение производительности • Минусы - не все алгоритмы подходят для векторизации - зачастую требует ручного труда программиста - завязана на целевую архитектуру и может требовать нескольких альтернативных реализаций
  • 13. 14 Векторизация • Оптимизирующие компиляторы делают автоматическую векторизацию по мере своих способностей • Использовать директивы компилятора для указания мест подлежащих автоматической векторизации • Использовать флаги компиляции для получения сообщений отладки о результатах автоматической векторизации • Писать алгоритмы используя встроенные функции компилятора или ассемблерные вставки
  • 14. 15
  • 16. 17
  • 17. 18
  • 18. 19 Система кэширования • чтение регистра 0 циклов • чтение L1 3-4 циклов • чтение L2 10-12 циклов • чтение L3 30-70 циклов • чтение RAM 100-150 циклов
  • 19. 20 • L1 32 KB 8-way set associative cache • L2 256 KB 4-way set associative • L3 4 MB 16-way set associative • 64 B cache line Частично ассоциативный кэш
  • 21. 22 Вопросы • Справедливо ли это утверждение? • Какой процент производительности должен меня интересовать? • Каковы причины такой разницы в производительности? • Влияют ли эти причины на другие аспекты работы продукта?
  • 22. 23
  • 24. 25 х = размер пропуска
  • 25. 26 Чтение флажков в коллекции объектов
  • 26. 27 х = размер неиспользуемой части объекта
  • 27. 28 Пространственная локальность • Предсказуемое расположение данных в памяти • Предсказуемое расположения исполняемого кода в памяти • Оптимальное использования системы кэширования центрального процессора
  • 28. 29 Проблемы объектно-ориентированный подход • Поощряет создание иерархии классов удобных для понимания программистом • Приводит к неоптимальной пространственной локальности данных в связи с тем что порядок объявления полей класса напрямую влияет на их порядок в памяти • Сосредотачивает исходный код вокруг данных вместо программного.
  • 29. 30 Данно-ориентированный дизайн (DOD) • Рассматривать программный продукт, как сущность решающую задачу трансформации данных • Пространственная локальность данных в памяти выходит на первый план • Статистические характеристики данных учитываются при их переборе и трансформации • Код пишется для наиболее вероятного случая согласно решаемой задачи в предметной области
  • 30. 31 Параллельное суммирование • суммируемый массив константной длины • 8 потоков • уменьшается расстояние между аккумуляторами
  • 31. 32 Система кэширования • чтение регистра 0 тактов • чтение L1 3-4 такта • чтение L2 10-12 тактов • чтение L3 30-70 тактов • чтение RAM 100-150 тактов
  • 32. 33 False sharing • inline constexpr std::size_t hardware_destructive_interference_size = /*implementation-defined*/; • inline constexpr std::size_t hardware_constructive_interference_size = /*implementation-defined*/;
  • 33. 34 Итоги • Полная утилизация кэша • Компактность = скорость • Предсказуемость = скорость
  • 34. 35 Итоги • Рассматривать линейный массив или комбинацию линейных массивов, как первый вариант при выборе контейнеров • Использовать максимальное количество данных попавших в кэш линию • Следить за отсутствием False Sharing
  • 35. 36 Итоги • Следить за тем, что исполняемый код помещается в кэш инструкции - чем может мешать перебор коллекции с вызовом виртуальных функций членов класса • Быстрые пути выполнения кода без проверок - срезать медленные пути выполнения до вхождения в “быстрый” путь • Profiler guided optimization
  • 36. 37 К дальнейшему рассмотрению • Полиморфизм и кэш инструкций • Полиморфизм и предсказание ветки выполнения