Pull to refresh

Оптимизации в компиляторах. Часть 1

Reading time 7 min
Views 28K
Compilers *
Копаясь в дебрях LLVM, я неожиданно обнаружил для себя: насколько всё же интересная штука — оптимизация кода. Поэтому решил поделиться с вами своими наблюдениями в виде серии обзорных статей про оптимизации в компиляторах. В этих статьях я попытаюсь «разжевать» принципы работы оптимизаций и обязательно рассмотреть примеры.
Я попытаюсь выстроить оптимизации в порядке возрастания «сложности понимания», но это исключительно субъективно.
И ещё: некоторые названия и термины не являются устоявшимися и их используют «кто-как», поэтому я буду приводить несколько вариантов, но настоятельно рекомендую использовать именно англоязычные термины.
Начнём...
Total votes 114: ↑110 and ↓4 +106
Comments 36

«Зачем обновлять GCC компилятор?» или «Производительность GCC компилятора на Intel Atom от версии к версии»

Reading time 3 min
Views 15K
Intel corporate blog Programming *Compilers *

Давайте попытаемся понять, что нового сделано в GCC компиляторе для процессоров архитектуры Intel Atom и как это влияет на производительность и размер кода известного бенчмарка EEMBC CoreMark.
Выше приведен график, отображающий производительность CoreMark, откомпилированного с пиковым и базовым набором опций разными версиями GCC относительно производительности базового набора опций для GCC версии 4.4.6 (выше – лучше).
За счет чего получен такой прирост?
Total votes 49: ↑46 and ↓3 +43
Comments 18

Оптимизации WordPress. Конкурс «ВПС на год за лучшие идеи!»

Reading time 9 min
Views 28K
Infobox corporate blog
По данным HackerTarget.com 20.9% сайтов из списка Alexa (104 684 из 500 000) работают на CMS WordPress. Из небольшого движка для блогов WordPress вырос в универсальную платформу для разработки сайтов, породив целую экосистему.

Компания Aberdeen Group провела исследование, согласно которому увеличение времени загрузки сайта на 1 секунду имеет следующие последствия:
  • уменьшение количества просмотров страницы на 11%;
  • снижение удовлетворенности покупателей на 16%;
  • снижение рейта конверсии посетителей в покупателей на 7%.

40% мобильных покупателей покинут интернет магазин, страницы которого загружаются дольше 3 секунд.

В этой статье мы затронем тему оптимизации WordPress. Для лучшего раскрытия темы в будущих статьях мы проводим конкурс: пришлите нам рекомендации по оптимизации WordPress, не вошедшие в эту статью. Автору наиболее полных и полезных советов по оптимизации будет предоставлена VPS 1024 на год. В конце статьи ссылка на регистрацию бесплатной Cloud VPS для экспериментов с оптимизацией WordPress.

Тестирование производительности WordPress до оптимизаций


Давайте определим время загрузки сайта. Для тестирования воспользуемся сервисом GTMetrix.

Infobox GTMetrix VPS

Получено время загрузки страницы по сети 2.62 секунды.
Читать дальше →
Total votes 25: ↑21 and ↓4 +17
Comments 16

Оптимизации Joomla. Конкурс «ВПС на год за лучшие идеи!»

Reading time 7 min
Views 14K
Infobox corporate blog
Joomla – одна из самых популярных opensource CMS в мире. Уже который год она успешно конкурирует с Wordpress за звание самой популярной.


Увеличение времени загрузки сайта на 1 секунду имеет следующие последствия:
  • уменьшение количества просмотров страницы на 11%;
  • снижение удовлетворенности покупателей на 16%;
  • снижение рейта конверсии посетителей в покупателей на 7%.
  • 40% мобильных покупателей покинут интернет магазин, страницы которого загружаются дольше 3 секунд.

В этой статье мы затронем тему оптимизации Joomla. Для лучшего раскрытия темы в будущих статьях мы проводим конкурс: пришлите нам рекомендации по оптимизации Joomla, не вошедшие в эту статью. Автору наиболее полных и полезных советов по оптимизации будет предоставлена VPS 1024 на год (результат конкурса по Wordpress будет объявлен совсем скоро). В конце статьи ссылка на регистрацию бесплатной Cloud VPS от Infobox для экспериментов с оптимизацией Joomla.
Читать дальше →
Total votes 25: ↑17 and ↓8 +9
Comments 6

Улучшаем производительность: полезные советы и приёмы в .NET

Reading time 8 min
Views 32K
High performance *.NET *C# *
Эта статья входит в серию статей по улучшению производительности в .NET. Первую статью можно найти здесь.

В этой статье, как и в прошлой, будут рассмотрены неочевидные особенности в работе платформы, и приемы, с помощью которых можно с этими особенностями мирно сосуществовать. Проще говоря, тут будут записаны очередные всякие хаки из жизни нашей лавки, которые хоть немного (или много, как всегда все зависит от контекста), но экономят драгоценные ресурсы в условиях высокой нагрузки. Хаки предельно просты и не влияют на конечную функциональность.

Открывая очередную статью о производительности, пожалуй каждый резонно ищет ответ на вопросы «а как это может помочь в моих проектах» и «бросать ли все и начинать ли срочно исправлять свой код как описано». Исправлю ошибку прошлой статьи, отвечу сразу и подробнее. На мой взгляд, есть смысл использовать наши хаки в следующих случаях:

  • Вы пишете новый код и решили делать это немного лучше и с экономией
  • Вы дошли до этапа, когда начались оптимизации и рефакторинг, поэтому просматриваете и меняете участки кода, которые выполняются очень часто
  • Вы пишете высокопроизводительную систему и экономите на спичках

Я ни в коем случае не призываю вас бежать и исправлять весь код в ваших проектах. Более того, я призываю вас не делать этого, потому что это простые хаки, и скорее всего они будут вноситься бездумно в большое количество кода, а это может повлечь за собой появление новых ошибок. Это не те хаки, которые скинут бабу с воза вашего приложения и заставят кобылу-сервак бежать в десять раз быстрее. В лучшем случае удастся выжать процентов десять. Но с миру по нитке — голому рубашка.
Читать дальше →
Total votes 44: ↑44 and ↓0 +44
Comments 19

Оптимизации WordPress. Часть 2. Итоги конкурсa «ВПС на год за лучшие идеи!»

Reading time 4 min
Views 18K
Infobox corporate blog
В первой части статьи мы рассказали об оптимизации Wordpress. Наши читатели продолжили эксперименты и составили расширенный набор рекомендаций, результаты которых опубликованы в этой статье. За это время мы добавили шаблоны для WordPress и Joomla в облачные VPS, позволяющие быстро развернуть нужную CMS на мощных и быстрых облачных серверах.

Спасибо всем, принявшим участие в конкурсе. Лучшему автору мы подарим год VPS 1024 от Infobox. Кому из участников конкурса подарить VPS 1024 на год — решаете вы. Голосование в конце статьи. Так же можно принять участие в аналогичном конкурсе по Joomla. Если у вас есть другие идеи по оптимизации — пишите в комментариях и получайте 300 рублей на облачный хостинг Infobox Jelastic за хорошие советы.



Под катом советы читателей по оптимизации Wordpress (без изменений), ссылка на бесплатное тестирование облачных VPS, a так же возможность выбрать лучшего автора.
Читать дальше →
Total votes 38: ↑23 and ↓15 +8
Comments 37

Секреты скорости Swift

Reading time 8 min
Views 34K
Programming *Swift *
Translation
С момента анонса языка Swift скорость была ключевым элементом маркетинга. Еще бы – она упоминается в самом названии языка (swift, англ. — «быстрый»). Было заявлено, что он быстрее динамических языков наподобие Python и Javascript, потенциально быстрее Objective C, а в некоторых случаях даже быстрее, чем C! Но как именно они это сделали?

Спекуляции


Несмотря на то, что сам язык предоставляет огромные возможности для оптимизации, у нынешней версии компилятора с этим не все в порядке, и получить хоть какие-то успехи в тестах производительности стоило мне немало сил. В основном это происходит из-за того, что компилятор генерирует массу излишних действий retain-release. Думаю, что это быстро поправят в следующих версиях, но пока мне придется говорить о том, благодаря чему Swift может быть потенциально быстрее Objective C в будущем.

Более быстрая диспетчеризация методов


Как известно, каждый раз, когда мы вызываем метод в Objective C, компилятор транслирует его в вызов функции objc_msgSend, которая занимается поиском и вызовом нужного метода в рантайме. Она получает селектор метода и объект, в таблицах методов которого производится поиск непосредственного куска кода, который будет обрабатывать этот вызов. Функция работает очень быстро, но зачастую делает куда больше работы, чем действительно нужно.

Передача сообщений удобна тем, что компилятор не делает никаких предположений относительно того, какой объект попадется ему в рантайме. Это может быть экземпляр типа выражения, дочерний класс, или вообще абсолютно другой класс. Компилятор можно обмануть, и все будет работать как положено.

С другой стороны, в 99.999% случаев вы не будете врать компилятору. Когда объект объявлен как NSView *, это либо непосредственно NSView, либо дочерний класс. Динамическая диспетчеризация необходима, а вот настоящая пересылка сообщений практически не нужна, но природа Objective C заставляет всегда использовать самый «дорогой» вид вызовов.
Читать дальше →
Total votes 46: ↑37 and ↓9 +28
Comments 13

Обзор CentOS 7. Часть 5: оптимизации производительности сети

Reading time 4 min
Views 34K
Infobox corporate blog
В предыдущих статьях по CentOS 7 было рассмотрено:
Часть 1: контейнеры Linux
Часть 2: управление идентификацией
Часть 3: NFS, FedFS, pNFS
Часть 4: смягчение DDoS атак TCP SYN Flood

В этой статье мы поговорим об улучшениях сети в CentOS 7:
  • оптимизации производительности сети;
  • поддержки сокетов с низкими задержками;
  • высокоточной синхронизации времени.
  • улучшениях безопасности;



В конце статьи ссылки на бесплатное тестирование CentOS 7 в облаке InfoboxCloud и в VPS от Infobox.
Читать дальше →
Total votes 28: ↑26 and ↓2 +24
Comments 8

Оптимизация производительности Drupal. Тестирование VPS и Cloud VPS от Infobox

Reading time 3 min
Views 8.8K
Infobox corporate blog
Drupal – третья по популярности в мире система управления сайтами (CMS), после Wordpress и Joomla.

B предыдущих статьях мы уже рассмотрели оптимизации производительности Wordpress и Joomla.

В этой статье мы рассмотрим базовые оптимизации производительности Drupal, которые позволили значительно увеличить производительность оптимизируемого сайта и могут быть применены очень быстро.

Увеличение времени загрузки сайта на 1 секунду имеет следующие последствия:
  • уменьшение количества просмотров страницы на 11%;
  • снижение удовлетворенности покупателей на 16%;
  • снижение рейта конверсии посетителей в покупателей на 7%.
  • 40% мобильных покупателей покинут интернет магазин, страницы которого загружаются дольше 3 секунд.

Infobox Drupal VPS

В конце статьи ссылка и промо-код на бесплатную регистрацию пробной версии VPS или Cloud VPS от Infobox.
Читать дальше →
Total votes 6: ↑4 and ↓2 +2
Comments 1

Что каждый программист должен знать про оптимизации компилятора

Reading time 17 min
Views 76K
Enterra corporate blog .NET *C++ *Compilers *C *
Translation
Высокоуровневые языки программирования содержат в себе много абстрактных программистских конструкций, таких как функции, условные операторы и циклы — они делают нас удивительно продуктивными. Однако одним из недостатков написания кода на высокоуровневом языке является потенциальное значительное снижение скорости работы программы. Поэтому компиляторы стараются автоматически оптимизировать код и увеличить скорость работы. В наши дни логика оптимизации стала очень сложной: компиляторы преобразуют циклы, условные выражения и рекурсивные функции; удаляют целые блоки кода. Они оптимизируют код под процессорную архитектуру, чтобы сделать его действительно быстрым и компактным. И это очень здорово, ведь лучше фокусироваться на написании читабельного кода, чем заниматься ручными оптимизациями, которые будет сложно понимать и поддерживать. Кроме того, ручные оптимизации могут помешать компилятору выполнить дополнительные и более эффективные автоматические оптимизации. Вместо того чтобы писать оптимизации руками, лучше бы сосредоточиться на дизайне архитектуры и на эффективных алгоритмах, включая параллелизм и использование особенностей библиотек.

Данная статья посвящена оптимизациям компилятора Visual C++. Я собираюсь обсудить наиболее важные техники оптимизаций и решения, которые приходится применить компилятору, чтобы правильно их применить. Моя цель не в том, чтобы рассказать вам как вручную оптимизировать код, а в том, чтобы показать, почему стоит доверять компилятору оптимизировать ваш код самостоятельно.
Читать дальше →
Total votes 46: ↑42 and ↓4 +38
Comments 4

Как я эволюцию админов в программистов измерял

Reading time 13 min
Views 27K
*nix *Database Administration *SQLite *
Недавно мой знакомый Karl (имя изменено) проходил собеседование на должность DevOps и обратился ко мне с просьбой проверить его решение. Я почитал условие задачи и решил, что из нее бы вышел неплохой тест, поэтому немного расширил задачу и написал свою реализацию, а заодно попросил коллегу Alex подумать о своей реализации. Когда все три варианта были готовы, я сделал еще две сравнительные версии на C# и сел писать эту статью. Задача довольно проста, а соискатели находятся на неких ступенях эволюции из админов в программисты, которые я и хотел оценить.

Кому интересны грязные детали, необъективные тесты и субъективные оценки — прошу под кат.
Читать дальше →
Total votes 19: ↑17 and ↓2 +15
Comments 39

Триллион маленьких шинглов

Reading time 14 min
Views 17K
«Антиплагиат» corporate blog Programming *.NET *Algorithms *C# *


Источник изображения:www.nikonsmallworld.com


Антиплагиат – это специализированный поисковик, о чем уже писали ранее. А любому поисковику, как ни крути, чтобы работать быстро, нужен свой индекс, который учитывает все особенности области поиска. В своей первой статье на Хабре я расскажу о текущей реализации нашего поискового индекса, истории его развития и причинах выбора того или иного решения. Эффективные алгоритмы на .NET — это не миф, а жесткая и продуктивная реальность. Мы погрузимся в мир хеширования, побитового сжатия и многоуровневых кешей с приоритетами. Что делать, если нужен поиск быстрее, чем за O(1)?


Если кто-то еще не знает, где на этой картинке шинглы, добро пожаловать…


Читать полностью
Total votes 36: ↑34 and ↓2 +32
Comments 41

Возможно, вам не нужен Svelte, чтобы уменьшить ваш JavaScript

Reading time 4 min
Views 12K
Website development *JavaScript *SvelteJS *

Сейчас популярно мнение, что текущие Javascript-фреймворки непомерно большие, а новый фреймворк Svelte очень компактный. Поэтому всем нужно переходить на него, и проблема размера JavaScript решится сама собой.


Недавно вышла статья "Хороший ли выбор Svelte для реализации виджета?" с опытом реализации проекта с критичным размером бандла. Это отличный повод проверить обещания пиарщиков Svelte на реальном проекте.


Давайте его проанализируем!

Читать дальше →
Total votes 54: ↑48 and ↓6 +42
Comments 26

Ещё больше строковых оптимизаций

Reading time 7 min
Views 3.7K
Programming *Java *

В продолжение своей предыдущей статьи о строках (напоминаю, это была текстовая версия доклада на ДжиПоинте-2020) решил дописать ещё одну заметку, куда вошли некоторые оптимизации, обнаруженные уже после вёрстки презентации.

Читать далее
Total votes 18: ↑18 and ↓0 +18
Comments 6

Проблемы с производительностью в игре XCOM 2

Reading time 5 min
Views 14K
Gaijin Entertainment corporate blog Game development *

Привет! Меня зовут Александр, я руководитель программистов компьютерной графики в Gaijin в проектах CRSED и Enlisted. Иногда, в свободное время, я исследую как устроена графика в других играх и нахожу там что-то интересное.

Недавно я решил разобраться, почему XCOM 2 тормозит на моём ноутбуке. В ходе изучения рендера этой игры я нашёл ряд мест, которые можно было бы без проблем ускорить. Результаты моего небольшого исследования вылились в видео.

Ниже представлена расшифровка этого видео.

Читать далее
Total votes 33: ↑31 and ↓2 +29
Comments 48

Как побороть депрессию с помощью С++. Кто такие дескрипторы и с чем их едят

Reading time 8 min
Views 6.8K
C++ *
Tutorial
Sandbox

Эта статья расскажет вам, как я начал бороться с клинической депрессией, используя для этого свое любимое занятие - программирование на c++. Это моя первая статья из цикла статей, который я решил назвать "Как побороть депрессию с помощью c++". Сегодня я хочу обсудить с вами дескрипторы. Дело в том, что в интернете я не нашел информации о том, что это такое и когда их нужно использовать. Спешу исправить ситуацию!

Читать далее
Total votes 15: ↑13 and ↓2 +11
Comments 21

Введение в автоэнкодеры

Reading time 8 min
Views 3.8K
SkillFactory corporate blog Python *Programming *Machine learning *TensorFlow *
Translation

Чем больше данных, тем лучше, но слишком большое число признаков может оказаться неэффективным в плане повышения интерпретируемости или производительности. Материалом о возможном решении от доктора Роберта Кюблера делимся к старту флагманского курса по Data Science.

Читать далее
Total votes 6: ↑5 and ↓1 +4
Comments 0

Фокусы оптимизации размера исполняемых файлов ELF. Поддержка 4 ОС в 400 байт единственного бинарника

Reading time 29 min
Views 6K
SkillFactory corporate blog Python *Programming *C++ *C *
Translation

В этом посте я расскажу о некоторых уловках, которыми я воспользовалась, чтобы уменьшить двоичные файлы С/С++/Python с помощью ассемблера для x86. Здесь всё крутится вокруг кодовой базы Cosmopolitan. Дело в том, что из недавнего отзыва по проекту ELKS я узнала, что мой код там всем понравился и они хотят узнать больше о том, что трюки cosmo могут дать проектам вроде «Linux-порта i8086». Я почувствовала, что мы с ребятами проекта ELKS «одной крови», ведь первое, что я написала при создании Cosmopolitan, — это загрузчик i8086, который назывался Actually Portable Executable. А ещё мне было приятно узнать, что людям, которые погрузились в эту проблему гораздо раньше меня, нравятся мои наработки в Cosmopolitan. И тогда я решила, что неплохо было бы поделиться ими с более широкой аудиторией.


[Shinmyoumaru Sukuna]

Читать дальше →
Total votes 40: ↑39 and ↓1 +38
Comments 17

Как мы чуть не взломали шифровальщик Phobos с помощью CUDA

Level of difficulty Medium
Reading time 8 min
Views 4.7K
SkillFactory corporate blog Information Security *Programming *Reverse engineering *
Case
Translation


Последние два года мы работали над доказательством концепции дешифратора для программ-вымогателей семейства Phobos. По причинам, которые мы объясним здесь, он непрактичен. До сих пор у нас не получилось использовать его, чтобы помочь реальной жертве. Но мы решили опубликовать результаты и инструменты в надежде, что кто-то найдёт их полезными, интересными или продолжит исследования.


Опишем уязвимость и то, как мы понизили вычислительную сложность и повысили производительность дешифратора, чтобы достичь почти практической реализации. Продолжение — к старту нашего курса «Белый хакер»

Читать дальше →
Total votes 20: ↑19 and ↓1 +18
Comments 4