Поиск в WeChat【Жареная рыба с мозгами] Обратите внимание на эту жареную рыбу с печенью. эта статьяGitHub GitHub.com/Vicious Genetics/Нет...В комплекте с моей серией статей, материалов и книг по Go с открытым исходным кодом.
Всем привет, я жареная рыба.
После выпуска Go1.17 мы были приятно удивлены, обнаружив, что язык Go снова оптимизирован, улучшенный компилятор дал прирост производительности примерно на 5%, при этом отсутствуют деструктивные изменения, обеспечивающие совместимость вперед.
Что он сделал, он, кажется, не видел много упоминаний об этом. По этой причине сегодня я предлагаю вам интерпретировать два новых предложения:
- "Proposal: Register-based Go calling convention》
- "Proposal: Create an undefined internal calling convention》
Эта статья объяснит и разберет на основе предложения, ведь обмен новыми знаниями должен начинаться с официальных данных как фактического ориентира.
задний план
В предыдущих версиях Go соглашение о вызовах Go было простым и почти универсальным для разных платформ, потому что было выбрано соглашение о вызовах стека, основанное на Plan9 ABI, т. е.Параметры функции и возвращаемые значения передаются в стеке.
Здесь мы упомянули Plan9 и ABI, две ключевые концепции:
- Plan9: Ассемблер, используемый языком Go, Роб Пайк — парень из Bell Labs.
- ABI: Application Binary Interface (Двоичный интерфейс приложения). ABI содержит соглашения по программированию (например, двоичный интерфейс), которым должны следовать приложения при работе в операционной системе.
Преимущества и недостатки этой схемы следующие:
- Преимущества: Простое внедрение и упрощенная стоимость внедрения.
- Недостаток: есть цена, которую нужно заплатить с точки зрения производительности.
Насколько я понимаю, на заре существования языка Go сначала была принята простая реализация, а потом уже запущена. Это также разумно, производительность не является требованием TOP1.
Оптимизация Go1.17
Что такое соглашение о вызовах
В новой версии оптимизации упоминается понятие соглашения о вызовах, которое относится кСогласованное соглашение между вызывающим и вызываемым для вызовов функций.
Эти консенсусы включают в себя: параметры функции, возвращаемые значения, порядок передачи параметров, методы передачи и т. д.
Когда обе стороны должны следовать этому соглашению, функции программы могут работать нормально. Если его не соблюдать, функция работать не будет.
что такое оптимизация
Начиная с Go 1.17, внутренняя спецификация Go ABI (используемая между функциями Go) будет официально передаваться из аргументов и результатов функций на основе стека.Изменены аргументы функций на основе регистров и передача результатов..
Эта модификация включает в себя много пунктов, и оптимизация продолжается, изначально предполагалось, что она будет реализована в Go1.16, но она была отложена до Go1.17.
На данный момент реализована поддержка архитектур amd64 и arm64. Есть еще много поддержек, которые будут дорабатываться в Go1.18, конкретный прогресс можно увидетьissues #40724.
Как производительность
существуетGo1.17 Release NotesЭто четко указано в бенчмарках с репрезентативным набором пакетов и программ Go.
Официальные данные показывают:
- Программы Go работают примерно на 5% быстрее.
- Уменьшение размера скомпилированных Go двоичных файлов составляет около 2%.
Что касается личных данных, то вtwitterПосмотрите, что сказал @Achille после обновления с Go1.15.7 до Go1.17. Обновление Go1.17 для крупномасштабной системы обработки данных дало удивительные результаты, давайте посмотрим на его реальные данные.
Процессор, время вызова Malloc уменьшено примерно на 15%:
Размер RSS ближе к размеру кучи:
Уменьшено с 1,6 ГБ до 1 ГБ.
Сочетая официальные и частные данные, эффект оптимизации очевиден и эффективен. Заинтересованные друзья также могут проверить это на себе.
Суммировать
В новой версии Go1.17 мы можем получить определенную оптимизацию производительности, просто обновив версию Go на один литр, что очень хорошо.
От предыдущего метода передачи параметров функции и результата на основе стека до параметров функции и результата на основе регистров Go1.17~Go1.18 язык Go шаг за шагом становится лучше!
Что вы думаете?
Если у вас есть какие-либо вопросы, пожалуйста, оставьте отзыв и обменяйтесь мнениями в области комментариев.Лучшие отношения - это достигать друг друга, твойподобното естьжареная рыбаСамая большая мотивация для творчества, спасибо за поддержку.
Статья постоянно обновляется, вы можете выполнить поиск [рыба, жареная в мозгу] на WeChat, чтобы прочитать, ответить [000] Готовые мной решения и материалы по вопросам алгоритма заводского собеседования первой линии, эта статьяGitHub GitHub.com/Vicious Genetics/Нет...Он был включен, добро пожаловать в Star, чтобы призвать больше.