Predição de performance em ambientes multi-core com aceleradores compartilhados - Souto, Thiago Dadalt (2018)
Dois dos principais fatores do aumento da performance em aplicações single-thread – frequência de operação e exploração do paralelismo à nível das instruções – tiveram pouco avanço nos últimos anos devido a restrições de potência. Além disso, a exploração do paralelismo em nível de threads é limitada pelas porções intrinsecamente sequenciais das aplicações. Neste contexto, é cada vez mais comum a integração de aceleradores em arquiteturas multi-core. Esses sistemas exploram o que há de vantajoso em cada um dos componentes que os compõem: enquanto o arranjo multi-core explora o paralelismo em nível de threads, aceleradores em hardware executam funções com performance e eficiência energética ordens de grandeza maiores que uma possível execução nos cores de propósito geral. No atual estado da arte, poucos trabalhos propuseram métricas que avaliam características outras que não a performance ou energia desses arranjos multi-core que compartilham aceleradores em hardware entre os elementos de processamento. Os MPSoCs, Multi-processor System-on-Chips, popularizaram a integração de aceleradores nessas arquiteturas, mas nenhum estudo foi realizado em termos da aceleração esperada com esses aceleradores, ou sobre o custo-benefício esperado da adição de novos aceleradores nessas arquiteturas. A ausência de métricas que avaliem outras características de arquiteturas multi-core heterogêneas pode limitar severamente o seu potencial. Este trabalho tem por objetivo propor uma nova métrica para a integração de aceleradores compartilhados em arquiteturas multi-core, SACL (do inglês, Shared Accelerator Concurrency Level), descorrelacionada do paralelismo no nível das threads. Esta métrica avalia o percentual de uma aplicação em que blocos básicos aceleráveis executam simultâneamente em diferentes threads ativas no contexto, competindo assim pelo uso do acelerador. A partir disto, o projetista pode usar o valor obtido para prever a aceleração esperada para uma determinada aplicação, e também estabelecer o custo-benefício da adição (ou não) de novos aceleradores no sistema. Essa métrica é independente do acelerador, podendo ser utilizada tanto para aceleradores específicos como reconfiguráveis.