
Исходный код для нашей бумаги ASPLOS 2023 « Minimalloc: легкий распределитель памяти для аппаратного ускорения машинного обучения ».
Все большее количество рабочих нагрузок глубокого обучения поддерживается аппаратным ускорением . Чтобы разблокировать максимальную производительность аппаратного акселератора, модель машинного обучения должна сначала быть тщательно отображена на различных внутренних компонентах с помощью компилятора . Одна особенно важная проблема, с которой сталкивается компилятор производственного класса,-это проблема распределения памяти , в результате чего набор буферов с предопределенными сроками продолжительности отображается на смещениях в глобальной памяти. Поскольку это распределение выполняется статически, компилятор обладает свободой разместить буферы стратегически, но, тем не менее, должен бороться с комбинаторным взрывом в количестве возможностей назначения.
Minimalloc -это современный алгоритм, разработанный специально для статического распределения памяти, который использует несколько новых технологий поиска для эффективного и эффективного решения таких проблем.
Ключевым пониманием, мотивирующей нашу методологию, является обнаружение конкретной категории решений, которую мы называем каноническими решениями , которые соответствуют членам алгебраической решетки:

Ограничивая наше исследование подмножеством канонических решений, мы можем значительно уменьшить размер пространства поиска, одновременно гарантируя, что наш алгоритм остается звуковым и полным. Мы также используем новую технику пространственного вывода, которая использует эту специальную структуру, позволяя нашему решателю отступить гораздо раньше, чем возможно. Наконец, мы реализуем новый механизм для обнаружения и устранения доминирующих решений из рассмотрения.
$ git clone --recursive [email protected]:google/minimalloc.git &&
cd minimalloc && cmake -DCMAKE_BUILD_TYPE=Release && make
id,lower,upper,size
b1,0,3,4
b2,3,9,4
b3,0,9,4
b4,9,21,4
b5,0,21,4
$ ./minimalloc --capacity=12 --input=benchmarks/examples/input.12.csv --output=output.12.csv
id,lower,upper,size,offset
b1,0,3,4,8
b2,3,9,4,8
b3,0,9,4,4
b4,9,21,4,4
b5,0,21,4,0
@inproceedings { Moffitt2023 ,
title = { {MiniMalloc}: A Lightweight Memory Allocator for Hardware-Accelerated Machine Learning } ,
booktitle = { Proceedings of the 28th International Conference on Architectural Support for Programming Languages and Operating Systems } ,
volume = { 4 } ,
pages = { 238--252 } ,
author = { Moffitt, Michael D. } ,
year = { 2023 } ,
series = { ASPLOS 2023 } ,
url = { https://doi.org/10.1145/3623278.3624752 } ,
doi = { 10.1145/3623278.3624752 }
}Это не официально поддерживаемый продукт Google.