Top Banner
Оптимизации уровня CPU Андрей Акиньшин, JetBrains
18

Оптимизации уровня CPU, Андрей Акиньшин (JetBrains)

Apr 16, 2017

Download

Engineering

Ontico
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Оптимизации уровня CPUАндрей Акиньшин, JetBrains

Page 2: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Перед началом оптимизационных работ• Понять, что есть проблема• Определить метрики и поставить задачи• Научиться измерять эти метрики• Убедиться в корректности измерений• Найти узкое место• Подумать

Page 3: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

О чём стоит подумать сначала• Грамотное масштабирование• Разумный параллелизм• Хорошая архитектура• Эффективные алгоритмы• Правильные структуры данных• Вдумчивое использование стандартных библиотек и

вашего любимого языка программирования• Аккуратная работа с памятью• I/O, Работа с сетью• …

Page 4: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Пара слов про микробенчмарки

Page 5: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Задачка: ускорить код

Page 6: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Числа, которые нужно знать

Page 7: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

CPU CacheПоследовательный доступ лучше непоследовательного

Page 8: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Задачка: ускорить код

Page 9: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Задачка: ускорить код (Улучшение №1)

Page 10: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Branch predictionВетвления могут стоить очень дорого

Page 11: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Задачка: ускорить код (Улучшение №1)

Page 12: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Задачка: ускорить код (Улучшение №2)

Page 13: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Физическое устройство CPU

Page 14: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

True Sharing

Page 15: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

False Sharing

Page 16: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Про что ещё стоит помнить?• Out-of-order execution• Reorder buffer in Sandy Bridge: 168, in Haswell: 192, in Skylake: 224

• Instruction Level Parallelism• SIMD

Page 17: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Мораль• Знать устройство компьютера — важно• Отсутствие знаний может стать источником проблем• Присутствие знаний может помочь сильно разогнать код

Page 18: Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)

Андрей Акиньшин, JetBrainshttp://aakinshin.net

https://github.com/AndreyAkinshinhttps://twitter.com/andrey_akinshin

[email protected]