The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск утилиты для резервного копирования rclone 1.35"
Отправлено Аноним, 10-Янв-17 20:50 
> части функций, которые не используются.

Я проверял на разном софте.
1) Упомянутый мной tweetnacl-lite, с которым я развлекаюсь засовывая его в cortex-M. Если с LTO собрать, но нигде не вызвать, LTO его выносит целиком. Ну то-есть от него ничего не остается. Если другого кода не было - я получаю пустой бинарь, состоящий из дефолтных vectors. Как еще эффективнее код выносить я даже и не знаю :)

2) В большом сложном бинаре на плюсах LTO вырубил примерно четверть кода.

Как по мне так там с -flto -fwhole-program (whole-program имеет некие особенности, ахтунг) dead code вырубается очень даже.

> Больше всего выбрасывает -ffunction-sections -fdata-sections + -Wl,--gc-sections так
> как выкидывает неиспользуемые функции и данные целиком.

Упомянутое вроде бы вырубает неиспользуемые функции просто в ноль. И особенности особенностями, а в типовых случаях не вижу никаих проблем. Законы мерфи не отменяли.

> Зависит от того какой код. Допустим 10% уходило на вызов + сохранение
> + восстановление регистров. Мы инлайним эту функцию  10-100 раз - код растет.

Если мы вместо 10% на сохранение потратим это на инлайн - какая, собственно, разница? Единственным достижением станет более шустрый код, где прологи-эпилоги заменятся на мелкую функцию. А так там эвристика есть, IIRC, на предмет что выгоднее. Все это если не указан явно инлайн или ноинлайн, конечно же, там компилер будет следовать указаниям програмера.

>> И у gcc вроде есть анализы когда и что выгоднее.
> AFAIK зависит от агрессивности оптимизации, сам он точно рассчитать и предсказать не может.

Не знаю как насчет точности но при решении инлайнить или нет если не было явного хинта, оценивается размер кода функции vs экономия от отсутствия пролога-эпилога и принимается решение, инлайнить или нет. На первый взгляд вполне разумно сделано. Пардон не помню где читал описание уровней и lto.

> Для этого нужно исполнить код с типичными данными на входе.
> У gcc есть и такой режим (забыл как он называется).

Вы про profile-guided optimization чтоли? Это несколько другое. Они как-то геморно делаются и настолько круто мне, имхо, не надо.

> Не всегда. Например большая функция на несколько страниц с switch на кучу
> case. Она может быть разбита и преобразована в десятки мелких функций.

Вполне возможно, но я не знаю насколько анализатор это умеет. Он умеет настолько много что всех его умений я не знаю.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру