Как стать автором
Обновить
78
0
Vladislav Stolyarov @Stolyarrr

Разработчик

Отправить сообщение

Можно ли доверить компилятору оптимизацию вашего кода?

Уровень сложностиСложный
Время на прочтение9 мин
Количество просмотров6.7K
image

Существует три уровня понимания того, как работает SIMD (ну, по крайней мере, на данный момент я нахожусь на 3-м уровне):

  1. Компиляторы умны! Они автоматически векторизуют весь код!
  2. Компиляторы тупы, автоматическая векторизация хрупка, ее очень легко нарушить несвязанными изменениями в коде. Всегда лучше вручную написать конкретные инструкции SIMD.
  3. Написать SIMD вручную действительно сложно — для каждой архитектуры процессора придется писать разный код. Кроме того, вы, вероятно, понимаете, что компилятор напишет на ассемблере скалярный код лучше вас. Что заставляет вас думать, что вы превзойдете компилятор в SIMD, где еще больше странных инструкций и запретов? Компиляторы — это инструменты. Они могут надежно векторизовать код, если он написан в форме, поддающейся векторизации.

Недавно я перешел со второго уровня на третий, и я заметил, как модель, используемая компилятором, щелкнула у меня в голове. В этом посте я хочу объяснить общую структуру компиляторов, пригодную для оптимизации статических языков, таких как Rust или C++. После этого я применю эту структуру к автоматической векторизации.
Читать дальше →
Всего голосов 31: ↑26 и ↓5+31
Комментарии11

Как создать свой мод для Cyberpunk 2077? Шерстим исходники, Lua, C++ и Python

Время на прочтение16 мин
Количество просмотров8.1K

Недавно мой коллега @Doctor_IT попросил помочь с его проектом — VR-жилетом, который «проецирует» ощущения урона, которые получает персонаж, на тело игрока. С моей стороны — мод, который будет отправлять данные из Cyberpunk 2077 на сам жилет.

Информации по теме моддинга мало, на русском языке материалов практически нет, а существующие статьи местами устарели — пора это исправить. Если вам интересно, как разработать свой мод для Cyberpunk 2077 и собрать VR-жилет, добро пожаловать под кат.
Читать дальше →
Всего голосов 50: ↑50 и ↓0+50
Комментарии10

Вектор-инструкция: о советском происхождении VLIW

Время на прочтение6 мин
Количество просмотров8.3K

Изначально у меня была мысль опубликовать на habr статью о современных VLIW-процессорах. Думаю, далеко не все читатели в курсе, что сейчас происходит ренессанс VLIW-подобных архитектур в области предметно-ориентированных ускорителей. Такие компании, как Xilinx, Synopsys и Cadence, даже предоставляют "конструкторы" для сборки VLIW-процессоров под задачи клиента. Но начало статьи, в контексте истории VLIW, планировалось посвятить неожиданной для меня исторической находке, давшей название заголовку заметки, которую вы сейчас читаете. Увы, сейчас совершенно некогда писать развернутую статью о VLIW-процессорах. Но и молчать о своей находке я тоже уже не могу!

Читать далее
Всего голосов 19: ↑17 и ↓2+21
Комментарии6

Оптимизация математических вычислений и опция -ffast-math в GCC 11

Время на прочтение9 мин
Количество просмотров8.8K
В этом материале речь пойдёт об оптимизациях, которые включает опция -ffast-math при компиляции кода, написанного на C или C++, с использованием GCC 11 для x86_64 Linux (при применении других языков, операционных систем, процессоров могут использоваться немного другие оптимизации).


Читать дальше →
Всего голосов 33: ↑32 и ↓1+44
Комментарии5

Создаем новое ключевое слово в C++

Время на прочтение27 мин
Количество просмотров23K

C++ - один из языков, который можно назвать "легендарным". Его история насчитывает несколько десятилетий, принципы программирования на нем революционным образом менялись не раз, а черновик стандарта уже разросся до 1800+ страниц мелкого шрифта.

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

В этой статье мы в учебных целях напишем для C++ поддержку нового ключевого слова defer, которое будет работать во многом аналогично такому в языках Go и Swift. Это будет сделано через правку исходного кода Clang.

Создать!
Всего голосов 64: ↑62 и ↓2+87
Комментарии43

Информация

В рейтинге
Не участвует
Откуда
Тула, Тульская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность