
Código-fonte para o nosso artigo ASPLOS 2023, " MinimAlloc: um alocador de memória leve para o aprendizado de máquina acelerado por hardware ".
Um número crescente de cargas de trabalho de aprendizado profundo está sendo suportado pela aceleração de hardware . Para desbloquear o desempenho máximo de um acelerador de hardware, um modelo de aprendizado de máquina deve primeiro ser cuidadosamente mapeado em seus vários componentes internos por meio de um compilador . Um problema especialmente importante enfrentado por um compilador de classe de produção é o da alocação de memória , no qual um conjunto de buffers com vida útil predefinido é mapeado para compensações na memória global. Como essa alocação é realizada estaticamente, o compilador tem a liberdade de colocar buffer estrategicamente, mas deve, no entanto, lutar com uma explosão combinatória no número de possibilidades de atribuição.
O MinimAlloc é um algoritmo de última geração projetado especificamente para alocação de memória estática que usa vários novos técnicos de pesquisa para resolver esses problemas de maneira eficiente e eficaz.
Uma visão importante que motiva nossa metodologia é a descoberta de uma categoria específica de soluções - que chamamos de soluções canônicas - que correspondem aos membros de uma rede algébrica:

Ao limitar nossa exploração ao subconjunto de soluções canônicas, podemos reduzir drasticamente o tamanho do espaço de pesquisa, garantindo simultaneamente que nosso algoritmo permaneça sólido e completo. Também empregamos uma nova técnica de inferência espacial que tira proveito dessa estrutura especial, permitindo que nosso solucionador voltasse muito antes do que possível. Finalmente, implementamos um novo mecanismo para detectar e eliminar soluções dominadas por consideração.
$ 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 }
}Este não é um produto do Google oficialmente suportado.