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

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

  • Upload
    ontico

  • View
    296

  • Download
    1

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

True Sharing

False Sharing

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

• Instruction Level Parallelism• SIMD

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

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

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

[email protected]