Что такое холодное/мертвое поле и что такое оптимизация пилинга?
В статье Loop Recognition в С++/Java/Go/ Scala (pdf) мы находим следующую цитату в разделе С++ Tunings
Структурный пилинг. Структура UnionFindNode
имеет 3 холодных поля: type_
, loop_
и header_
. Поскольку узлы распределены в массив, это хороший кандидат на оптимизацию пилинга. Три поля могут быть очищены в отдельный массив. Обратите внимание на header_
поле также мертво - но удаление его имеет очень мало производительности влияние. Поле name_
в структуре BasicBlock
также мертво, но он хорошо вписывается в пространство заполнения, поэтому он не удаляется.
Может кто-нибудь объяснить мне, что такое холодные/мертвые поля, и какая оптимизация пилинга (я понимаю, что сделал автор, но в чем причина этого)?
Ответы
Ответ 1
Structure peeling
- это оптимизация, при которой вы делите структуру на несколько, чтобы улучшить локальность данных (чтобы уменьшить промахи в кэше). Вы выделяете "горячие" данные (часто получаемые) из "холодных" данных (редко доступны) в две структуры для повышения эффективности кеша, максимизируя вероятность попадания в кеш.
В статье авторы решили перенести поля type_
, loop_
и header_
в сторону от более часто используемых полей.
Для получения дополнительной информации вы можете взглянуть на эту научную статью о оптимизации компоновки структуры, которая содержит описание структурного пилинга среди других методов: Оптимизация структуры макета в компиляторе Open64: проектирование, внедрение и измерения
Если у вас есть доступ к цифровой библиотеке ACM, вы также можете скачать Оптимизацию планировки практической структуры и советы.
Ответ 2
Эти термины связаны с методами оптимизации компиляторов.
Вот что я нашел здесь:
Разделение структуры
Структурное расщепление - это действие деления структур на их компоненты. После этого компоненты могут быть назначены регистры, для более быстрого доступа. Это особое преимущество, когда возвращая структуру из функции, где вся структура может возвращается в регистры, а не в стек.
Здесь говорят:
Трансформация структурного пилинга является частным случаем структуры разделение, в котором введение указателей не требуется.
Опять же, здесь говорят:
Кроме того, когда переменная мертва (когда ее значение не будет использоваться позже), регистр, которому он был назначен, будет повторно использован.