Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

646 views

Published on

В современном мире многие разработчики перестали стараться писать высокопроизводительный код. Порой их можно понять: в наше время прекрасных облачных решений дешевле докупить дополнительных серверов, чем тратить время на оптимизацию кода. Но что, если у вас нет такой возможности? Что, если для текущей задачи вы ограничены одной машиной или даже одним потоком?

В этом докладе мы обсудим некоторые подходы, которые помогают выжимать максимум производительности из современного железа и позволяют разгонять программы, которые, казалось бы, разогнать нельзя. В числе прочего будем обсуждать следующие вещи: CPU cache, Instruction Level Parallelism, False sharing, Branch Prediction, SEE/AVX instructions и т.д.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Оптимизации уровня CPU Андрей Акиньшин, JetBrains
  2. 2. Перед началом оптимизационных работ • Понять, что есть проблема • Определить метрики и поставить задачи • Научиться измерять эти метрики • Убедиться в корректности измерений • Найти узкое место • Подумать
  3. 3. О чём стоит подумать сначала • Грамотное масштабирование • Разумный параллелизм • Хорошая архитектура • Эффективные алгоритмы • Правильные структуры данных • Вдумчивое использование стандартных библиотек и вашего любимого языка программирования • Аккуратная работа с памятью • I/O, Работа с сетью • …
  4. 4. Пара слов про микробенчмарки
  5. 5. Задачка: ускорить код
  6. 6. Числа, которые нужно знать
  7. 7. CPU Cache Последовательный доступ лучше непоследовательного
  8. 8. Задачка: ускорить код
  9. 9. Задачка: ускорить код (Улучшение №1)
  10. 10. Branch prediction Ветвления могут стоить очень дорого
  11. 11. Задачка: ускорить код (Улучшение №1)
  12. 12. Задачка: ускорить код (Улучшение №2)
  13. 13. Физическое устройство CPU
  14. 14. True Sharing
  15. 15. False Sharing
  16. 16. Про что ещё стоит помнить? • Out-of-order execution • Reorder buffer in Sandy Bridge: 168, in Haswell: 192, in Skylake: 224 • Instruction Level Parallelism • SIMD
  17. 17. Мораль • Знать устройство компьютера — важно • Отсутствие знаний может стать источником проблем • Присутствие знаний может помочь сильно разогнать код
  18. 18. Андрей Акиньшин, JetBrains http://aakinshin.net https://github.com/AndreyAkinshin https://twitter.com/andrey_akinshin andrey.akinshin@gmail.com

×