SlideShare a Scribd company logo

DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level Languages?

На примере одной специализированной, но значимой для большинства высокопроизводительных систем точки оптимизации исходного кода — работы с кэш-памятью — доклад «Достижима ли в C++ эффективность языка "среднего уровня"?», сделанный на DEV Labs 2013, показывает, какими несложными приемами и техниками можно достичь желаемого уровня эффективности объектно-ориентированного кода, и развеивает миф о языке C++ как языке «архитектурной астронавтики», предлагая аудитории ряд действенных рецептов повышения производительности исходного кода.

1 of 29
Download to read offline
DevLabs
Достижима ли в C++
эффективность языка
«среднего уровня»?

© Luxoft Training 2013

Алексей Петров

education@luxoft.com
1
DevLabs
Достижима ли в C++ эффективность
языка «среднего уровня»?

© Luxoft Training 2013

Алексей Петров

2
© Luxoft Training 2013

Введение

3
Разрешите представиться



Алексей Петров — тренер и консультант, экспертпрактик в области информационного обеспечения
автоматизированных систем, архитектуры и
разработки программного обеспечения на языках
высокого уровня:
 1998 — первая программа на C++
 2009 — первый тренинг по C++
 2012 — начало сотрудничества с Luxoft Training

© Luxoft Training 2013

и НИУ МГТУ им. Н.Э. Баумана

4
О чем пойдет речь?



C++ сегодня. Соображения эффективности



Кэш-память в архитектуре ЭВМ: зачем и что делать?

 Пример оптимизации кода по производительности

© Luxoft Training 2013



Основные направления оптимизации исходного кода

5
Неформальное введение. C++ сегодня



Актуальное состояние:
 Наработанная десятилетиями мощная кодовая база —
требует решения «сопровождать или переписывать»

 Поддержка C++ нескольких парадигм программирования
 Активное использование языков C / C++ в практике
программирования высокопроизводительных приложений

 Неослабевающий интерес индустрии и популярность языка
среди разработчиков — 3 – 4-е место в TIOBE Index c 2001 г.

© Luxoft Training 2013



Перспективы:
 Предсказуемое поступательное развитие языка —
стандарты C++11 / C++14 / C++17
 Ожидаемое внедрение полноценных средств поддержки
параллельных вычислений, работы с дисковыми, сетевыми
ресурсами и т.д.
6

Recommended

INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]Alex V. Petrov
 
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...Alex V. Petrov
 
UML2. Eleven Trivial Tips for BPMN Modellers [1.01, RUS]
UML2. Eleven Trivial Tips for BPMN Modellers [1.01, RUS]UML2. Eleven Trivial Tips for BPMN Modellers [1.01, RUS]
UML2. Eleven Trivial Tips for BPMN Modellers [1.01, RUS]Alex V. Petrov
 
HTP. Business Requirements Elicitation & Documentation [1.01, RUS]
HTP. Business Requirements Elicitation & Documentation [1.01, RUS]HTP. Business Requirements Elicitation & Documentation [1.01, RUS]
HTP. Business Requirements Elicitation & Documentation [1.01, RUS]Alex V. Petrov
 
ISUCT & BSUIR. Successful Communication of the Process Architecture [1.0, RUS]
ISUCT & BSUIR. Successful Communication of the Process Architecture [1.0, RUS]ISUCT & BSUIR. Successful Communication of the Process Architecture [1.0, RUS]
ISUCT & BSUIR. Successful Communication of the Process Architecture [1.0, RUS]Alex V. Petrov
 
CEE-SECR 2015. Systems Engineering for Software Engineers in Top-Ranking Tech...
CEE-SECR 2015. Systems Engineering for Software Engineers in Top-Ranking Tech...CEE-SECR 2015. Systems Engineering for Software Engineers in Top-Ranking Tech...
CEE-SECR 2015. Systems Engineering for Software Engineers in Top-Ranking Tech...Alex V. Petrov
 
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]Alex V. Petrov
 
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...Alex V. Petrov
 

More Related Content

What's hot

SPb BA & SA Night. Stakeholder Management Essentials [1.01, RUS]
SPb BA & SA Night. Stakeholder Management Essentials [1.01, RUS]SPb BA & SA Night. Stakeholder Management Essentials [1.01, RUS]
SPb BA & SA Night. Stakeholder Management Essentials [1.01, RUS]Alex V. Petrov
 
SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]
SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]
SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]Alex V. Petrov
 
ITGM #5. What Is Enterprise Architecture [1.0, RUS]
ITGM #5. What Is Enterprise Architecture [1.0, RUS]ITGM #5. What Is Enterprise Architecture [1.0, RUS]
ITGM #5. What Is Enterprise Architecture [1.0, RUS]Alex V. Petrov
 
Архитектурное описание для корпоративных и инженерных информационных систем
Архитектурное описание для корпоративных и инженерных информационных системАрхитектурное описание для корпоративных и инженерных информационных систем
Архитектурное описание для корпоративных и инженерных информационных системMarcus Akoev
 
Задачи системного аналитика (конспект лекций Школы системного анализа)
Задачи системного аналитика (конспект лекций Школы системного анализа)Задачи системного аналитика (конспект лекций Школы системного анализа)
Задачи системного аналитика (конспект лекций Школы системного анализа)Anton Konstantinov
 
Базовые принципы и понятия технологии разработки объектно-ориентированных инф...
Базовые принципы и понятия технологии разработки объектно-ориентированных инф...Базовые принципы и понятия технологии разработки объектно-ориентированных инф...
Базовые принципы и понятия технологии разработки объектно-ориентированных инф...DEVTYPE
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation processDima Dzuba
 
Собираем кубик Рубика
Собираем кубик РубикаСобираем кубик Рубика
Собираем кубик РубикаCEE-SEC(R)
 
Практический анализ по RUP
Практический анализ по RUPПрактический анализ по RUP
Практический анализ по RUPSQALab
 
DDD requirements AnalystDays-2014 Tsepkov
DDD requirements AnalystDays-2014 TsepkovDDD requirements AnalystDays-2014 Tsepkov
DDD requirements AnalystDays-2014 TsepkovMaxim Tsepkov
 
DDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодDDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодCUSTIS
 
Domain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требованийDomain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требованийCUSTIS
 
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологий
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологийСпецифика работы бизнес-аналитика в зависимости от типов проектов и методологий
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологийSQALab
 
Бизнес весна 2014 лекция 3
Бизнес весна 2014 лекция 3Бизнес весна 2014 лекция 3
Бизнес весна 2014 лекция 3Technopark
 
Itgm #9. dmn. как моделировать принимаемые решения
Itgm #9. dmn. как моделировать принимаемые решенияItgm #9. dmn. как моделировать принимаемые решения
Itgm #9. dmn. как моделировать принимаемые решенияSPbCoA
 
Ответственность за качество в разных ИТ-проектах: в чем она и как ее разделять
Ответственность за качество в разных ИТ-проектах: в чем она и как ее разделятьОтветственность за качество в разных ИТ-проектах: в чем она и как ее разделять
Ответственность за качество в разных ИТ-проектах: в чем она и как ее разделятьCUSTIS
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLNikolai Kireev
 
DDD-secon-2014-tsepkov
DDD-secon-2014-tsepkovDDD-secon-2014-tsepkov
DDD-secon-2014-tsepkovMaxim Tsepkov
 
DDD - модель вместо требований
DDD - модель вместо требованийDDD - модель вместо требований
DDD - модель вместо требованийSQALab
 

What's hot (20)

SPb BA & SA Night. Stakeholder Management Essentials [1.01, RUS]
SPb BA & SA Night. Stakeholder Management Essentials [1.01, RUS]SPb BA & SA Night. Stakeholder Management Essentials [1.01, RUS]
SPb BA & SA Night. Stakeholder Management Essentials [1.01, RUS]
 
SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]
SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]
SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]
 
ITGM #5. What Is Enterprise Architecture [1.0, RUS]
ITGM #5. What Is Enterprise Architecture [1.0, RUS]ITGM #5. What Is Enterprise Architecture [1.0, RUS]
ITGM #5. What Is Enterprise Architecture [1.0, RUS]
 
Архитектурное описание для корпоративных и инженерных информационных систем
Архитектурное описание для корпоративных и инженерных информационных системАрхитектурное описание для корпоративных и инженерных информационных систем
Архитектурное описание для корпоративных и инженерных информационных систем
 
Задачи системного аналитика (конспект лекций Школы системного анализа)
Задачи системного аналитика (конспект лекций Школы системного анализа)Задачи системного аналитика (конспект лекций Школы системного анализа)
Задачи системного аналитика (конспект лекций Школы системного анализа)
 
Базовые принципы и понятия технологии разработки объектно-ориентированных инф...
Базовые принципы и понятия технологии разработки объектно-ориентированных инф...Базовые принципы и понятия технологии разработки объектно-ориентированных инф...
Базовые принципы и понятия технологии разработки объектно-ориентированных инф...
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation process
 
Собираем кубик Рубика
Собираем кубик РубикаСобираем кубик Рубика
Собираем кубик Рубика
 
Практический анализ по RUP
Практический анализ по RUPПрактический анализ по RUP
Практический анализ по RUP
 
SECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Максим Цепков - DDD: от требований до кодаSECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Максим Цепков - DDD: от требований до кода
 
DDD requirements AnalystDays-2014 Tsepkov
DDD requirements AnalystDays-2014 TsepkovDDD requirements AnalystDays-2014 Tsepkov
DDD requirements AnalystDays-2014 Tsepkov
 
DDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодDDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в код
 
Domain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требованийDomain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требований
 
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологий
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологийСпецифика работы бизнес-аналитика в зависимости от типов проектов и методологий
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологий
 
Бизнес весна 2014 лекция 3
Бизнес весна 2014 лекция 3Бизнес весна 2014 лекция 3
Бизнес весна 2014 лекция 3
 
Itgm #9. dmn. как моделировать принимаемые решения
Itgm #9. dmn. как моделировать принимаемые решенияItgm #9. dmn. как моделировать принимаемые решения
Itgm #9. dmn. как моделировать принимаемые решения
 
Ответственность за качество в разных ИТ-проектах: в чем она и как ее разделять
Ответственность за качество в разных ИТ-проектах: в чем она и как ее разделятьОтветственность за качество в разных ИТ-проектах: в чем она и как ее разделять
Ответственность за качество в разных ИТ-проектах: в чем она и как ее разделять
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
 
DDD-secon-2014-tsepkov
DDD-secon-2014-tsepkovDDD-secon-2014-tsepkov
DDD-secon-2014-tsepkov
 
DDD - модель вместо требований
DDD - модель вместо требованийDDD - модель вместо требований
DDD - модель вместо требований
 

Similar to DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level Languages?

Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняLuxoftTraining
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernelsDenis Efremov
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
06 vasenin roganov siis_2013
06 vasenin roganov siis_201306 vasenin roganov siis_2013
06 vasenin roganov siis_2013Marina_creautor
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковCodeFest
 
Sql server clr integration
Sql server clr integration Sql server clr integration
Sql server clr integration Alex Tumanoff
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаTatyanazaxarova
 
Технологии создания публичного облака DEPO Cloud на базе платформы Intel для ...
Технологии создания публичного облака DEPO Cloud на базе платформы Intel для ...Технологии создания публичного облака DEPO Cloud на базе платформы Intel для ...
Технологии создания публичного облака DEPO Cloud на базе платформы Intel для ...DEPO Computers
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Alex Tutubalin
 
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...oleg gubanov
 
Параллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартахПараллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартахAlex Tutubalin
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
 
Преимущества серверного оборудования DEPO Сomputers и ПО Windows Server
Преимущества серверного оборудования DEPO Сomputers и ПО Windows ServerПреимущества серверного оборудования DEPO Сomputers и ПО Windows Server
Преимущества серверного оборудования DEPO Сomputers и ПО Windows ServerDEPO Computers
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language RuntimeSQALab
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentationsef2009
 

Similar to DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level Languages? (20)

Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровня
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
06 vasenin roganov siis_2013
06 vasenin roganov siis_201306 vasenin roganov siis_2013
06 vasenin roganov siis_2013
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
Sql server clr integration
Sql server clr integration Sql server clr integration
Sql server clr integration
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
 
Технологии создания публичного облака DEPO Cloud на базе платформы Intel для ...
Технологии создания публичного облака DEPO Cloud на базе платформы Intel для ...Технологии создания публичного облака DEPO Cloud на базе платформы Intel для ...
Технологии создания публичного облака DEPO Cloud на базе платформы Intel для ...
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
 
Параллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартахПараллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартах
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
Преимущества серверного оборудования DEPO Сomputers и ПО Windows Server
Преимущества серверного оборудования DEPO Сomputers и ПО Windows ServerПреимущества серверного оборудования DEPO Сomputers и ПО Windows Server
Преимущества серверного оборудования DEPO Сomputers и ПО Windows Server
 
McAfee Encryption 2015
McAfee Encryption 2015McAfee Encryption 2015
McAfee Encryption 2015
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentation
 
DATA CLUSTER
DATA CLUSTERDATA CLUSTER
DATA CLUSTER
 

DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level Languages?

  • 1. DevLabs Достижима ли в C++ эффективность языка «среднего уровня»? © Luxoft Training 2013 Алексей Петров education@luxoft.com 1
  • 2. DevLabs Достижима ли в C++ эффективность языка «среднего уровня»? © Luxoft Training 2013 Алексей Петров 2
  • 3. © Luxoft Training 2013 Введение 3
  • 4. Разрешите представиться  Алексей Петров — тренер и консультант, экспертпрактик в области информационного обеспечения автоматизированных систем, архитектуры и разработки программного обеспечения на языках высокого уровня:  1998 — первая программа на C++  2009 — первый тренинг по C++  2012 — начало сотрудничества с Luxoft Training © Luxoft Training 2013 и НИУ МГТУ им. Н.Э. Баумана 4
  • 5. О чем пойдет речь?  C++ сегодня. Соображения эффективности  Кэш-память в архитектуре ЭВМ: зачем и что делать?  Пример оптимизации кода по производительности © Luxoft Training 2013  Основные направления оптимизации исходного кода 5
  • 6. Неформальное введение. C++ сегодня  Актуальное состояние:  Наработанная десятилетиями мощная кодовая база — требует решения «сопровождать или переписывать»  Поддержка C++ нескольких парадигм программирования  Активное использование языков C / C++ в практике программирования высокопроизводительных приложений  Неослабевающий интерес индустрии и популярность языка среди разработчиков — 3 – 4-е место в TIOBE Index c 2001 г. © Luxoft Training 2013  Перспективы:  Предсказуемое поступательное развитие языка — стандарты C++11 / C++14 / C++17  Ожидаемое внедрение полноценных средств поддержки параллельных вычислений, работы с дисковыми, сетевыми ресурсами и т.д. 6
  • 7. Соображения эффективности  C++ — компилируемый язык:  сохранивший эффективность своего C-подмножества:  более эффективный, чем языки с промежуточной трансляцией и интерпретируемые языки. В активе C++ — множество оптимизирующих компиляторов для основных программноаппаратных платформ:  GCC: g++;  Intel® Composer XE Suites: Intel® C++ Compiler и др.  © Luxoft Training 2013  Язык и инструментальные средства позволяют писать код эффективно. 7
  • 8. © Luxoft Training 2013 Кэш-память процессора в архитектуре… и в C++ 8
  • 9. Кэш-память в архитектуре современных ЭВМ: зачем?  Проблема:  многократное отставание системной шины [и модулей оперативной памяти (DRAM)] от ядра ЦП по внутренней частоте; простой ЦП.  Решение:  включение в архитектуру небольших модулей сверхоперативной памяти (SRAM), полностью контролируемой ЦП (не пользователем и ОС!). © Luxoft Training 2013  Условия эффективности:  локальность данных и кода в пространстве-времени.  Схема организации кэш-памяти:  см. рис. Оперативная память Системная шина Кэш-память 3-го уровня Кэш 2-го уровня Кэш команд 1го уровня Кэш данных 1-го уровня Ядро ЦП, регистры 9
  • 10. Кэш-память в архитектуре современных ЭВМ: что делать?  Обеспечивать локальность данных и кода в пространстве и времени:  совместно хранить совместно используемые данные или код;  не нарушать эмпирические правила написания эффективного исходного кода.  Обеспечивать эффективность загрузки кэш- © Luxoft Training 2013 памяти данных и кода:  полагаться на оптимизирующие возможности компилятора;  помогать компилятору в процессе написания кода.   Знать основы организации аппаратного обеспечения. Экспериментировать! 10
  • 11. Пример: постановка задачи   Задача. Рассчитать сумму столбцов заданной целочисленной матрицы. Оптимизировать найденное решение с точки зрения загрузки кэшпамяти данных. Найти: 𝐴= 𝑎 𝑖𝑗 𝐵 = 𝑏𝑗 Варианты решения: ❶ © Luxoft Training 2013 Дано: ❷ или 11
  • 12. Пример: порядок анализа вариантов  Размерность задачи:  набор данных: 28 x 28 (216 элементов, 218 байт);  количество тестов: 100;  выбираемое время: минимальное.  Инфраструктура тестирования:  x86: Intel® Core™ i5 460M, 2533 МГц, L1d: 2 x 32 Кб;  x86-64: AMD® E-450, 1650 МГц, L1d: 2 x 32 Кб / ядро;  ОС: Ubuntu Linux 12.04 LTS; компилятор: GCC 4.8.x. © Luxoft Training 2013  Порядок обеспечения независимости тестов — 2-фазная программная инвалидация памяти L1d:  последовательная запись массива (106 элементов, ≈222 байт);  рандомизированная модификация элементов. 12
  • 13. Пример: сравнительная эффективность вариантов Эффективность вариантов, такты ЦП Intel x86 932 769 -O0 630 553 677 245 -O1 303 901 Вариант 1 Вариант 2 680 627 -O2 302 663 -O3 303 769 662 449 0 200000 400000 600000 800000 1000000 Эффективность вариантов, такты ЦП AMD x86-64 1 790 547 -O0 980 592 1 079 601 © Luxoft Training 2013 -O1 398 505 Вариант 1 Вариант 2 1 014 795 -O2 279 510 1 056 003 -O3 279 435 0 500000 1000000 1500000 2000000 13
  • 14. Пример: результаты оптимизации  Время решения задачи за счет оптимизации обхода данных (без применения SSE-расширений) снижается в 2 – 3 раза:  для ЦП Intel x86: от 1,5 до 2,2 раза;  для ЦП AMD x86-64: от 1,8 до 3,8 раза.  При компиляции с флагами -О0, -O1 результат характеризуется высокой повторяемостью на ЦП с выбранной архитектурой (Intel x86 / AMD x86-64):  относительный рост эффективности колеблется в пределах 20 – 25%%. © Luxoft Training 2013  Применение векторных SIMD-инструкций из наборов команд SSE, SSE2, SSE3 позволяет улучшить полученный результат еще на 15 – 20%%. 14
  • 15. Почему оптимизация работы с кэш-памятью того стоит?  Несложная трансформация вычислительноемких фрагментов кода позволяет добиться серьезного роста скорости выполнения.  разбиение на квадраты (англ. square blocking) и пр.  Причина — высокая «стоимость» кэш-промахов:  на рис. — оценки для одного из ЦП Intel. Время доступа, такты ЦП Регистровая память 1 © Luxoft Training 2013 Кэш-память 1-го уровня ЦП @ 3 ГГц: 1 такт ≈ 0,33 нс → 10 см 3 Кэш-память 2-го уровня 14 240 Оперативная память 1 10 100 15
  • 16. Преимущества встроенного замера времени. Реализация класса-таймера  Преимущества встроенного замера:  полный контроль над запуском и © Luxoft Training 2013    остановом таймеров, счетчиков; минимальные накладные расходы; более надежные результаты; возможность получения результатов, не достижимых стандартными инструментами. Timer::Timer() : _start_time(0L), _end_time(0L), if(!_scheduled) { cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(0, &mask); _total_time(0L), _min_time(0L) { // attach this (NULL) process to CPU #0 _scheduled = (sched_setaffinity((pid_t)NULL, sizeof(mask), &mask) == 0); } } 16
  • 17. © Luxoft Training 2013 Что еще можно оптимизировать? 17
  • 18. Основные направления оптимизации  Предсказание переходов:  устранение ветвлений;  развертывание (линеаризация) циклов;  встраивание функций (методов) и др.  Критические секции:  устранение цепочек зависимости для внеочередного исполнения инструкций;  использование поразрядных операций, INC (++), DEC (--), векторизация (SIMD) и т.д. © Luxoft Training 2013  Обращение к памяти:  выполнение потоковых операций;  выравнивание и упаковка данных и пр. 18
  • 19. Выравнивание данных  Вопрос выравнивания:  актуален для переменных простых и составных типов;  актуален для объектов хранения как в стеке функций, так и в куче процесса.  Проблема: данные выровнены слабее, чем это необходимо для эффективной загрузки в кэш-память:  длина линии L1d в современных ЦП — 64 байта.  Решение:  принудительное выравнивание: GCC-атрибут aligned в © Luxoft Training 2013 определении типа или объекта данных и пр. // выравнивание, регулируемое на уровне объекта uint64_t qwd __attribute((aligned(64))); // выравнивание, регулируемое на уровне типа typedef int __attribute((aligned(128))) al128int_t; al128int_t aln; 19
  • 20. Упаковка переменных составных типов  Вопрос упаковки данных:  характерен для структур (struct) и классов (class);  обусловлен наличием у элементов структур (атрибутов классов) индивидуальных характеристик выравнивания.  Проблема: смежные (перечисленные подряд, в том числе на разных уровнях иерархии наследования) элементы физически не «примыкают» друг к другу.  Причины:  архитектура ЦП (напр., x86 © Luxoft Training 2013 или x86-64);  оптимизирующие действия компилятора;  выбранный программистом Потери: 4 байта из 32 (13%) typedef struct { // для x86 int id; // 4 байта char name[15]; // 15 байт double amount; // 8 байт bool active; // 1 байт } account; // 28 байт (не 32 байта!) порядок следования элементов. 20
  • 21. Реорганизация структур данных  Направления:  декомпозиция типов данных на более мелкие, которые при  решении задачи используются полностью либо не используются вообще; устранение лакун, обусловленных характеристиками выравнивания типов их элементов.  Желательно:  переносить наиболее востребованные элементы структуры © Luxoft Training 2013   (класса) к началу; обходить структуру в порядке определения элементов, если иное не требуется задачей или прочими обстоятельствами. Недостатки:  снижение удобства чтения и сопровождения кода;  риск размещения совместно используемых элементов на разных линиях кэш-памяти. 21
  • 22. Устранение ветвлений   Проблема:  статистическое смещение условия в ложную сторону;  нелинейное исполнение кода;  загрязнение кэш-памяти L1i неиспользуемым кодом;  трудности с предсказанием переходов. Желательно:  изымать реже исполняемый код с основного вычислительного © Luxoft Training 2013   пути; реорганизовать блоки так, чтобы в заголовке операторов фигурировала проверка на более вероятный исход, а среди операндов логической операции первыми следовали более предсказуемые, для && — ложные, для || — истинные. Альтернативные решения:  использование функции __builtin_expect и др. 22
  • 23. Встраивание функций и методов  Преимущества:  способность компилятора оптимизировать бóльшие кодовые фрагменты;  порождаемый код способен лучше задействовать конвейерную микроархитектуру ЦП.  Недостатки:  увеличение объема кода и бóльшая нагрузка на кэш-память команд всех уровней (L1i, L2i, …);  возможное общее снижение производительности. © Luxoft Training 2013  Желательно:  всегда встраивать функции, вызываемые однократно;  избегать встраивания функций, многократно вызываемых из разных точек программы. 23
  • 24. Выводы  Язык C++ не уступает в эффективности «родительскому» языку C  Грамматика современных диалектов C++ и ее расширения переносимыми компиляторами (напр. GCC) позволяют выражать тонкие аспекты работы с памятью на всех уровнях © Luxoft Training 2013  Правильное использование прагматики языка позволяет добиться серьезной оптимизации кода, на которую самостоятельно не способны современные компиляторы (иногда ограниченные в действиях стандартом на язык программирования) 24
  • 25. Дополнительные материалы и информация Автор выражает благодарность за участие в подготовке материалов г-же Эльвире Джураевой (кафедра «Системы обработки информации и управления», Московский государственный технический университет им. Н.Э. Баумана). При подготовке презентации использовались: 1. AMD E-Series E-450 specifications. URL: http://www.cpuworld.com/CPUs/Bobcat/AMD-E%20Series%20E-450.html © Luxoft Training 2013 2. Intel® Developer Zone: Intel® Composer XE Suites. URL: http://software.intel.com/ru-ru/intel-composer-xe 3. Standard C++: Current Status. URL: http://isocpp.org/std/status 4. TIOBE Index for December 2013. URL: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 25
  • 26. © Luxoft Training 2013 Рекомендуемая литература 1. Drepper, U. What Every Programmer Should Know About Memory (Nov. 2007). — Имеется русский перевод: http://ruslinux.net/lib.php?name=/MyLDP/hard/memory/memory.html 2. Fog, A. Optimizing Software in C++: An Optimization Guide for Windows, Linux and Mac platforms (Oct. 2013). URL: http://www.agner.org/optimize/optimizing_cpp.pdf 3. Goedecker, S., Hoisie, A. Performance Optimization of Numerically Intensive Codes (SIAM, 2001). 4. Intel® 64 and IA-32 Architectures Optimization Reference Manual (July 2013). URL: http://www.intel.com/content/dam/www/public/us/en/documents/manu als/64-ia-32-architectures-optimization-manual.pdf 5. Wise, D.S., Frens, J.D. Auto-Blocking Matrix-Multiplication or Tracking BLAS3 Performance from Source Code. In Proc. 1997 ACM Symp. on Principles and Practice of Parallel Programming, SIGPLAN Not. 32, 7 (July 1997), 206-216. 26
  • 27. Дополнительные материалы и информация Эффективность оптимизации AMD x86-64, вар. 1 2000000 1500000 1000000 500000 © Luxoft Training 2013 Intel x86, вар. 2 0 AMD x86-64, вар. 2 -O0 -O1 -O2 -O3 Intel x86, вар. 1 27
  • 28. Благодарю за внимание! © Luxoft Training 2013 Вопросы? 28
  • 29. Информационные ресурсы Luxoft Training Внутренние ресурсы Расписание, курсы, IntHR тренеры Luxtown Условия обучения, Luxtown логистика, контакты Информация об учебном центре www.luxoft-training.ru/about Расписание www.luxoft-training.ru/timetable Каталог курсов www.luxoft-training.ru/training/catalog_directions Контакты © Luxoft Training 2013 www.luxoft-training.ru/contacts www.facebook.com/TrainingCenterLuxoft 29