Как стать автором
Обновить

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

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

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

Время на прочтение 3 мин
Количество просмотров 15K
Блог компании Intel Программирование *Компиляторы *

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

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

Время на прочтение 9 мин
Количество просмотров 28K
Блог компании Infobox
По данным 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 секунды.
Читать дальше →
Всего голосов 25: ↑21 и ↓4 +17
Комментарии 16

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

Время на прочтение 7 мин
Количество просмотров 15K
Блог компании Infobox
Joomla – одна из самых популярных opensource CMS в мире. Уже который год она успешно конкурирует с Wordpress за звание самой популярной.


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

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

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

Время на прочтение 8 мин
Количество просмотров 32K
Высокая производительность *.NET *C# *
Эта статья входит в серию статей по улучшению производительности в .NET. Первую статью можно найти здесь.

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

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

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

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

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

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

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



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

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

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

Спекуляции


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

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


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

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

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

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

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

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



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

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

Время на прочтение 3 мин
Количество просмотров 8.9K
Блог компании Infobox
Drupal – третья по популярности в мире система управления сайтами (CMS), после Wordpress и Joomla.

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

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

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

Infobox Drupal VPS

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

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

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

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

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

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

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

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

Время на прочтение 14 мин
Количество просмотров 17K
Блог компании «Антиплагиат» Программирование *.NET *Алгоритмы *C# *


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


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


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


Читать полностью
Всего голосов 36: ↑34 и ↓2 +32
Комментарии 41

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

Время на прочтение 4 мин
Количество просмотров 12K
Разработка веб-сайтов *JavaScript *SvelteJS *

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


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


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

Читать дальше →
Всего голосов 54: ↑48 и ↓6 +42
Комментарии 26

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

Время на прочтение 7 мин
Количество просмотров 3.8K
Программирование *Java *

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

Читать далее
Всего голосов 18: ↑18 и ↓0 +18
Комментарии 6

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

Время на прочтение 5 мин
Количество просмотров 14K
Блог компании Gaijin Entertainment Разработка игр *

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

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

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

Читать далее
Всего голосов 33: ↑31 и ↓2 +29
Комментарии 48

Мой первый опыт решения неточных задач или почему стоит заниматься олимпиадами

Время на прочтение 8 мин
Количество просмотров 7.6K
Занимательные задачки Алгоритмы *
Из песочницы

Решаем оптимизационную задачу с vk winter quest алгоритмами спортивного программирования

Читать далее
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 5

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

Время на прочтение 8 мин
Количество просмотров 6.9K
C++ *
Туториал
Из песочницы

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

Читать далее
Всего голосов 15: ↑13 и ↓2 +11
Комментарии 21

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

Время на прочтение 8 мин
Количество просмотров 4.2K
Блог компании SkillFactory Python *Программирование *Машинное обучение *TensorFlow *
Перевод

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

Читать далее
Всего голосов 6: ↑5 и ↓1 +4
Комментарии 0

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

Время на прочтение 29 мин
Количество просмотров 6.1K
Блог компании SkillFactory Python *Программирование *C++ *C *
Перевод

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


[Shinmyoumaru Sukuna]

Читать дальше →
Всего голосов 40: ↑39 и ↓1 +38
Комментарии 17

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

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 5K
Блог компании SkillFactory Информационная безопасность *Программирование *Реверс-инжиниринг *
Кейс
Перевод


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


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

Читать дальше →
Всего голосов 20: ↑19 и ↓1 +18
Комментарии 4
1