В ночных сборках Rust расширены возможности распараллеливания компиляции

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3255
Зарегистрирован: 20.08.2022

#

В ночных сборках Rust расширены возможности распараллеливания компиляции
Дата публикации:Sat, 11 Nov 2023 20:47:16 +0300




Во фронтэнде компилятора Rust, выполняющем такие задачи, как синтаксический анализ, проверка типов и анализ заимствований, реализована поддержка параллельного выполнения, позволяющего существенно сократить время компиляции. Распараллеливание уже доступно в ночных сборках Rust и включается при помощи опции "-Z threads=8". В стабильную ветку рассматриваемую возможность планируют включить в 2024 году.



Работа над сокращением времени компиляции в Rust ведётся уже несколько лет. За первые 10 месяцев 2023 года время компиляции сократилось в среднем на 13%, пиковое потребление памяти снизилось на 15%, а размер генерируемых файлов уменьшился на 7%. На данном этапе ускорение было достигнуто за счёт оптимизаций самого компилятора. После этого разработчики перешли к работе над ускорением при помощи распараллеливания операций во время компиляции.



До сих пор распараллеливание в Rust обеспечивалось в основном на уровне процессов, например, пакетный менеджер Cargo может запускать несколько процессов rustc для одновременной компиляции нескольких пакетов. Поддержка распараллеливания также присутствует на стороне бэкенда, выполняющего операции, связанные с генерацией кода - бэкенд Rust может генерировать код частями, которые в дальнейшем LLVM может обрабатывать параллельно. Фронтэнд же до сих пор мог обрабатывать исходный код только в однопоточном режиме.




Для поддержки распараллеливания фронтэнд переведён на использование библиотеки Rayon и значительно переработан, например, многие его части теперь синхронизируются с помощью мьютексов и блокировок чтения/записи, а в коде используются атомарные типы. При тестировании производительности новая распараллеливаемая реализация могла выполнять компиляцию до 2% медленнее при работе в однопоточном режиме (-Z threads=1), но когда потоков больше одного скорость значительно возрастала. Например, при установке 8 потоков (-Z threads=8) в некоторых ситуациях время компиляции удавалось сократить на 50%.



При этом результат сильно зависит от настроек окружения и компилируемого кода - для очень маленьких программ, которые и так компилируются быстро, компиляция в многопоточном режиме может выполняться медленнее. Кроме того, потребление памяти в многопоточном режиме может значительно возрастать, например, в тестах наблюдался рост потребления памяти до 35%.


Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=60095

Жизнь за Нер'зула!

Ответить