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