Исследователи из Массачусетского университета реализовали технику, которая пересматривает обычный подход к сжатию информации, освобождая память, затрачиваемую компьютерами и смартфонами, давая возможность ускорять работу и поддерживать большее число программ многопоточно.
Сжатие данных оптимально комплектует избыточную информацию, чтобы увеличить вместимость основной памяти, способствовать росту вычислительной скорости и другим положительным аспектам. Для современных компьютеров вычисления намного менее затратны по сравнению с доступом к основной памяти. Компрессия уменьшает частоту запросов и требуемый для процесса или программы запрашиваемый объём памяти, тем самым повышая её производительность.
Память компьютера обрабатывает и перемещает данные блоками постоянного размера, на которых традиционно работает сжатие данных. Такой подход конфликтует с разработкой эффективного программного обеспечения, потому что реализации языков программирования хранят информацию в «объектах» – структурах данных, которые содержат не заданное какими-либо соглашениями количество полей произвольно выбранных типов, имеющих обычно варьирующийся размер. Вследствие отличия принципов хранения данных аппаратное сжатие для выполняемого кода программ оказывается неудачной оптимизацией работы.
Исследователи из MIT предлагают подход к компрессии объектов, который уменьшит связанные расходы с помощью построения некоторой иерархии в памяти. Подобная техника даст выигрыш в создании кода на любом современном популярном языке программировании – Python, Java или Go, которые хранят объекты согласно логике их структуры, не совершая каких-то преобразований для процессора. Программисты смогут заметить ускорение программ, или же возможность выполнения большего числа приложений одновременно: созданная иерархия ускорит память и уменьшит её потребление, программы будут использовать меньше памяти и тогда конкретное устройство будет поддерживать больше приложений одновременно.
Проект как раз и был мотивирован целью организовать память со структурой, реализующей хранение в зависимости от объектов, а не от линии кэша, разбивающей их на бессмысленные куски, и это, в итоге, ускоряет программное обеспечение, увеличивая пропускную способность памяти.
Проект основывается на прошлой работе исследователей, направленной на изменение архитектуры памяти для прямого доступа к логическим объектам в ней. Традиционная сверхоперативная память использует кэши, в которых недавняя информация попадает в меньшие, более быстрые кэши, более же старая информация переходит в большие и более медленные, в конце концов перемещаясь в основную память. Затратность этого гибкого устройства кэша – в необходимости линейного поиска запрашиваемого адреса в кэше, что снижает производительность такой памяти.
Спроектированная система носит название Hotpads и содержит полные версии объектов кода, плотно запакованные по иерархическим уровням – «падам», или корзинам. Уровни оптимальны для доступа, так как расположены прямо на кристалле микропроцессора.
Программы прямо обращаются к объектам в корзинах. Новые или недавние объекты вместе с теми, на которые они ссылаются, находятся на быстрых уровнях – в быстрых корзинах. При переполнении быстрого уровня более «старые» по доступу объекты переносятся в медленные корзины. При перемещении объектов все затронутые указатели обновляются. Такой путь для программ – более дешёвый, чем поиск по уровням кэша.
Быстрые пады не сжаты, медленные пады подвергаются сжатию данных. Указатели в объектах на всех уровнях ссылаются на сжатые объекты, что упрощает их возвращение в быстрые корзины. Это также позволяет хранить информацию в разы компактнее и пользоваться избыточностью объектов памяти гораздо успешнее, чем при обычном блоковом методе, ведь при построении структуры иерархии задаются базовые объекты, а остальные объекты описываются через наличие различий с базовыми. Эксперименты на JVM дали двойное сжатие данных и на 50% более производительную работу по сравнению с кэш-методами.