Escolar Documentos
Profissional Documentos
Cultura Documentos
http://lattes.cnpq.br/4608001746330875
fernando@dcc.ufmg.br
– 5 de julho de 2018 –
Resultados Obtidos Durante Vigência da Última Bolsa de Produ-
tividade em Pesquisa do Proponente (2016-2018)
Esta seção descreve, em 10 linhas, os resultados conseguidos durante os três últimos anos (2016-
2018), perı́odo em que durou a bolsa de produtividade do proponente, atendendo à requisição do
formulário eletrônico de submissão de nova proposta1 .
Em 2016 o proponente teve aceito o projeto “Geração Eficiente de Código de Qualidade – Geração
de Código Seguro”. Durante o perı́odo entre 2016 e 2018, o proponente publicou 8 artigos em
periódico, 15 artigos completos em conferências internacionais e 9 artigos completos em con-
ferências nacionais. Alguns desses artigos foram publicados em veı́culos de alto impacto, como
POPL [65], OOPSLA [83], PPoPP [71], Compiler Construction [92, 29], PACT [86], CGO [80,
53, 62, 103] e ACM TACO [66]. Quatro trabalhos receberam o prêmio de melhor artigo da con-
ferência. Foram executados dois grandes projetos com a indústria: um com a LG Electronics do
Brasil e outro com a Maxtrack. O grupo do candidato produziu centenas de milhares de linhas
de código em ferramentas abertas, que hoje estão disponı́veis publicamente2 . Como reconheci-
mento por suas contribuições cientı́ficas, o candidato recebeu o prêmio Google Research Award in
Latin America em 2017.
1
O formulário eletrônico contém os dizeres: Proponent with current grant, add in the Research project file, at
the top, a maximum 10 lines text describing the goals achieved regarding last proposition. All publications and advi-
sing activities in Lattes CV must be updated.
2
Ferramentas desenvolvidas pelo grupo de pesquisa em compiladores disponı́veis em http://www.cuda.dcc.
ufmg.br
1
Resumo da Proposta
Objetivo: este projeto pertence à área de Linguagens de Programação, sub-área de compilado-
res. Seu objetivo é desenvolver técnicas de código que permitam a produção de programas mais
energeticamente eficientes. Dizemos que um programa P1 é mais eficiente energeticamente que um
programa P2 se P1 produz os mesmos resultados que P1 consumindo menos energia.
Resultados esperados: Experimentos preliminares já mostram que podemos economizar até
25% do consumo de energia ao preço de uma desaceleração em desempenho inferior a 5%. In-
tencionamos aplicar as técnicas propostas em programas Java que funcionam no sistema Android,
usando Soot, um arcabouço para analisar Java, a fim de instrumentar bytecodes. Acreditamos que
nosso protótipo final permitirá que os desenvolvedores reduzam o consumo de energia de aplicativos
Android a um preço mı́nimo de desempenho. Para demonstrar essa possibilidade, devemos testar
nossas idéias em aplicativos que funcionam em diferentes tipos de smartphones.
2
1 Introdução: Eficiência Energética e Compiladores
Uma Arquitetura de Computação Heterogênea é um projeto de hardware que combina diferentes
tipos de processadores no mesmo dispositivo. Arquiteturas modernas de computadores estão se
tornando cada dia mais heterogêneas [119]. O projeto heterogêneo surge através da combinação,
dentro do mesmo hardware, de processadores de alta e baixa frequência [27, 54], aceleradores
(GPUs) [76] e processadores de sinal digital (DSPs) [85]. Uma vantagem deste design é a possibili-
dade de alocar para cada aplicativo a configuração de hardware que melhor lhe convém [83]. Uma
configuração de hardware consiste em vários núcleos, seu tipo e seus nı́vel de freqüência. Dizemos
que uma configuração H1 se adequa a um programa melhor do que outra configuração H2 se H1
executar o programa mais eficientemente do que H2 , de acordo com alguma métrica, como tempo
de execução ou consumo de energia. No entanto, apesar de podermos hoje escolher entre várias
configurações [3], aquela que melhor se adapta às necessidades de um programa, ainda não temos
uma técnica clara para executar esta escolha de forma perfeita.
Muitas vezes, um programa tem regiões de código que se beneficiam de forma diferente de
processadores diferentes. Chamamos a tarefa de alocar partes do programa aos processadores de em
problema de escalonamento. Existem duas maneiras de resolver esse problema: dinamicamente ou
estatisticamente. Abordagens dinâmicas [63, 77, 81] são implementadas em de tempo de execução,
seja através de um sistema operacional, um middleware ou mudanças no próprio programa-alvo.
Abordagens estáticas [66, 78, 71, 82, 83, 113] são implementado no nı́vel do compilador. A principal
vantagem da abordagem dinâmica é o fato de que ela pode se beneficiar de informações de tempo
de execução para melhorar a qualidade das escolhas que ela faz. As técnicas estáticas, por sua vez,
levam a custo de tempo de execução reduzido, e podem se beneficiar de caracterı́sticas do programa.
A grande maioria dessas abordagens tenta acelerar programas; em outras palavras, elas buscam
reduzir o tempo que eles demoram para executar até a conclusão [75]. A energia é muitas vezes
ignorada. Esta omissão é um infortúnio, dada a quantidade de recursos que a indústria coloca
na produção de circuitos que gastam menos energia [115], e de baterias que possuem capacidade
de armazenamento maior [44, 52, 61]. Uma exceção notável a essa tendência é o trabalho de
Nishtala et al. [77]. Esses autores mostraram que reinforcement learning ajuda a encontrar boas
configurações de hardware dadas informações retiradas da execução de programas. A beleza desta
abordagem é a adaptabilidade: os mesmos princı́pios fornecem os meios para explorar um vasto
universo de estados, formado por diferentes configurações de hardware e dados de de execução que
mudam ao longo do tempo. Dado tempo suficiente, e boas heurı́sticas, o algoritmo de aprendizagem
encontra um conjunto de decisões de escalonamento que se adequam ao hardware subjacente. No
entanto, “tempo suficiente”pode ser muito tempo. O universo de possı́veis estados de execução
de um programa é ilimitado e o comportamento de programas é difı́cil de prever sem consultar
o código-fonte. Assim, para acelerar a convergência desses métodos baseados em reinforcement
learning, nós utilizaremos o compilador conforme será explicado na próxima seção.
3
compilador nos dá dois benefı́cios. Primeiro, nos permite descobrir as caracterı́sticas do programa
que podemos usar para treinar um algoritmo de aprendizagem de máquina. Este algoritmo apren-
derá como adaptar um programa ao seu ambiente de tempo de execução. Em segundo lugar, o
compilador nos permite instrumentar4 o programa. No contexto desta proposta, a instrumentação
permite que o próprio programa forneça informação ao escalonador5 , sobre qual das suas partes
está atualmente em execução. Com base no conhecimento sobre as caracterı́sticas dessa região do
programa, o escalonador pode tomar ação imediata. Uma ação consiste em escolher uma nova
configuração de hardware para o programa, coletando a recompensa relacionada a essa escolha.
Esse feedback é então usado para ajustar e melhorar as decisões de escalonamento, uma tarefa que
realizamos com uma Rede Neural.
A figura 1 resume a contribuição esperada deste projeto. Queremos produzir uma técnica que os
desenvolvedores de aplicativos podem usar para gerar Programas mais eficientes que serão executa-
dos em smartphones. Nossa técnica não impõe qualquer ônus ao desenvolvedor: ele/ela codificará
seu sistema sem qualquer preocupação sobre como tal sistema será compilado. Da mesma forma,
nossa técnica não terá impacto no uso da aplicação por seus usuários finais. Independentemente
de como o aplicativo foi produzido, seus usuários terão acesso às mesmas interfaces e a mesma
qualidade de serviço. No entanto, é provável que essa aplicação final seja mais eficiente em termos
energéticos; conseqüentemente, prolongando o tempo de vida da bateria do telefone.
4
Figura 1: Como os resultados do projeto serão usados.
abordagens puramente estáticas para resolver este problema: o compilador decide onde cada parte
de um programa deve ser executada [55, 66, 83]. Nesta proposta, afirmamos que uma boa solução
para o escalonamento de computações em arquiteturas heterogêneas deve ser hı́brida, envolvendo
o compilador e o sistema operacional. O compilador está ciente da natureza do aplicativo: ele
pode separar e classificar as partes do programa de acordo com as instruções que eles usam ou as
chamadas a funções externas que eles realizam. O sistema operacional, por sua vez, tem acesso
a informações de tempo de execução: a carga de trabalho em cada processador, a duração dos
perı́odos ociosos e o número de threads ativas. Com base nesta observação, propomos a criação de
um sistema de posicionamento computacional para o ambiente de execução Android que reconheça
o aplicativo, se adapta a condições observadas em tempo de execução, e não requeira qualquer
intervenção dos usuários.
5
As técnicas e tecnologias que serão criadas a partir deste projeto são relevantes tanto para a
indústria quanto para a academia. A relevância industrial deve-se à importância que a eficiência
energética assume hoje, entre as mais diversas companhias de hardware e software. Muito esforço
é dispensado à criação de baterias cada vez mais eficientes [118], e à construção de centros de
processamento de dados que consumam cada vez menos energia [95]. A relevância acadêmica deve-
se à crescente importância da eficiência energética na pesquisa hoje. Conferências como ASPLOS,
PLDI e OSDI têm recebido cada vez mais trabalhos sobre o tema, e vários grupos de pesquisa estão
sendo formados em todo o mundo para a investigação de fenômenos relacionados ao consumo de
energia em sistemas computacionais. Recentes esforços nesta direção são, por exemplo, os projetos
Mont Blanc6 na Europa, e o projeto SING7 em Stanford.
2 Resultados Preliminares
Nesta seção, descrevemos os resultados preliminares que reunimos entre Fevereiro de 2017 e Janeiro
de 2018. Estes resultados ainda não foram publicados. Esses resultados vêm demonstrar a
viabilidade do projeto que ora apresentamos. Acreditamos que os dados que apresentaremos nos
permitem chegar as seguinte conclusões:
1. diferentes configurações de hardware levam à compromissos muito diferentes entre consumo
de energia e velocidade de execução para um programa (Fig. 2);
2. estes compromissos diferentes existem porque os programas têm fases de energia: dependendo
das operações que realizam, seu consumo de energia por tempo varia (Fig. 3);
3. a melhor configuração de hardware para um programa pode não atender às necessidades de
uma aplicação diferente (Fig. 4).
Central para a discussão nesta seção é a noção de uma configuração de hardware, que definimos
abaixo:
6
12 40
Freqmine 0L1B Streamcluster 4L3B
4L1B
35
3L1B 4L2B
11 30
Energy (joules)
Energy (joules)
3B
Best Runtime 4L0B
5 1L0B Best Energy
0L
Best Energy 4L0B Best Energy/Time
8 0
0L1B
2.8 3 3.2 3.4 3.6 3.8 4 0 3 6 9 12 15 18 21
Time (secs) Time (secs)
Figura 2: Tempo de energia vs processamento para dois benchmarks PARSEC usando entradas
simsmall. A notação xLyB denota x núcleos LITTLE e y bigs.
7
public int foo(String[] argv) {
8 (e)
int M1, N1, M2, N2; readMatrix
// Read first matrix from file 'argv[1]' mulMatrix printMatrix
int[][] m1 = readMatrix(argv[1], M1, N1); 6
(c) read_user_data();
// Read second matrix from file 'argv[1]'
read_user_data(); 4
int[][] m2 = readMatrix(argv[2], M2, N2);
(a) read_user_data();
2
Power (W)
// Multiply both matrices, giving m3
6
int[][] m3 = mulMatrix(m1,m2,M1,N1,N2);
read_user_data(); 0
// Print all the matrices in the 0 50 100 150 200 250 300 350 400
// standard output Time (msec)
4
printMatrix(m1, M1, N1);
(b)
printMatrix(m2, M2, N2);
printMatrix(m3, M1, N2);
read_user_data();
} (d) 2 (f) big LITTLE
Figura 3: (a) A placa Nvidia TK1. (b) Dispositivo de aquisição de dados NI 6009. (c) Cir-
cuito de sincronização. (d) Multiplicação de matrizes implementada em C. (e) Perfil de potência
desse programa. A taxa de amostragem NI 6009 foi de 1000 amostras/seg. (f) Zoom do perfil de
potência obtido durante a última fase do programa. Mostramos dados de energia obtidos usando
um núcleo de baixa freqüência (LITTLE) e usando um núcleo ARM A15 (big).
JetsonLeap [24], um aparelho que nos permite medir a energia consumida pelos programas que
funcionam na placa Nvidia TK1 Jetson12 . O JetsonLeap é formado por três componentes: a
placa Nvidia (Figura 3 (a)), um dispositivo de aquisição de dados, que lê a potência instantânea
consumida pela placa (Figura 3 (b)), e um circuito de sincronização, que nos permite comunicar
ao aparato de medição qual evento de programa está sendo executado em cada instante (Figura 3
(c)).
Existem fases distintas dentro do mesmo programa porque ele pode usar o hardware de formas
diferentes, dependendo de qual parte está sendo executada. Ao ler contadores de desempenho,
sabemos que durante a multiplicação da matriz, a CPU está no seu uso máximo. Durante as
operações de entrada/saı́da, esta utilização cai levemente, e outros componentes do hardware,
como a sua porta serial, são mais usados. Essa queda é ı́ngreme uma vez que o programa está
aguardando as entradas do usuário. A CPU não é o único componente de hardware que explica
a dissipação de energia. O aparelho JetsonLeap mede a energia para todo o hardware. Assim, a
sub-utilização da CPU não significa que o consumo geral de potência diminuirá. No entanto, as
variações no uso da CPU provavelmente causarão variações no perfil de energia do programa.
Descobrir essas fases do programa por meio de técnicas puramente dinâmicas é possı́vel, mas
difı́cil. Poderı́amos, em princı́pio, usar profiling, à la Hipster [77], para identificar variações em
comportamento do programa. No entanto, essa abordagem tem duas deficiências. Primeiro, partes
distintas do programa, com diferentes demandas em termos de memória, CPU, e disco, podem
exibir caracterı́sticas dinâmicas semelhantes. Por exemplo, poderı́amos imaginar um cenário em
12
Nesta seção usamos duas configurações experimentais: Odroid XU4 e Tegra TK1. A primeira nos dá a riqueza
de configurações vistas na figura 2. Essa diversidade está ausente na última. Contudo, a placa TK1 nos dá acesso à
JetsonLeap, e, consequentemente, à capacidade de medir energia por eventos de programação.
8
que a função read user data, na figura 3 é implementada via espera ocupada. Nesse caso, em vez
dos vales observados na figura 3 (e), encontrarı́amos uma linha de energia semelhante à produzida
por pela função mulMatrix. Em segundo lugar, as técnicas baseadas em profiling enfrentam uma
tensão entre precisão e sobrecarga. A detecção precisa exige altas taxas de amostragem; sobrecarre-
gando o aplicativo que originalmente pretendı́amos otimizar. No entanto, as abordagens puramente
estáticas não são melhores. Embora seja provável que produzam custos gerais de adaptação mais
baixos, elas não conseguem lidar com informação disponı́vel apenas em tempo de execução, como
tamanhos de entrada de dados. Por exemplo, uma instrumentação estática pode decidir sempre
executar mulMatrix e read user data em diferentes configurações. No entanto, ao operar em matri-
zes pequenas, o custo de mudar a a configuração de hardware já pode ofuscar os possı́veis ganhos
disponı́veis através de um uso mais parcimonioso dos recursos da arquitetura.
3 Metodologia
Um projeto de três anos. Este documento descreve um projeto de 3 anos. As seções 3.1-3.3
descrevem o plano de trabalho para o primeiro ano. A seção 3.4 descreve o plano de trabalho
para os dois anos seguintes. Optou-se por dar maior detalhe ao primeiro ano do projeto porque
os resultados conseguidos nesta fase irão contribuir para os dois anos posteriores. Temos uma
visão clara do que precisa ser feito neste primeiro ano – o trabalho que será desenvolvido nos dois
anos seguintes, contudo, é ainda passı́vel de mudanças, as quais serão necessárias para ajustar a
metodologia de investigação aos resultados encontrados.
O produto final – uma prova de conceito. Ainda assim, o objetivo prático do projeto é bem
definido, e não irá mudar durante a sua execução. Tal objetivo é entregar uma implementação
de protótipo que reduz o consumo de energia em programas Android. Este protótipo seguirá o
modelo visto na Figura 5. O objetivo geral deste projeto é prolongar a vida útil da bateria dos
9
3
facesim
freqmine
blacksholes
ferret
facesim
Number of big cores in use
2
freqmine
blacksholes bodytrack
ferret
vips
bodytrack
1
vips
5% loss
streamcluster
1% loss
streamcluster
0
0 1 2 3
Number of LITTLE cores in use
Figura 4: As melhores configurações para sete aplicativos PARSEC, dado um nı́vel aceitável de-
saceleração de 1% ou 5% em comparação com a configuração mais rápida.
smartphones. Devemos atingir esse objetivo ao resolver um desafio que chamamos de Problema do
Agendamento em Arquiteturas Heterogêneas, que definimos da seguinte forma:
Pretendemos resolver SPha usando uma variedade de técnicas diferentes, que, uma vez combi-
nados, nos dê os meios para gerar um código bem adaptado a diferentes arquiteturas e cargas de
trabalho. A figura 5 coloca essas técnicas em perspectiva. Devemos usar o framework de compilação
Soot [112] para analisar um programa, extraindo os recursos que acreditamos serem fundamentais
para o seu comportamento de potência. Esta etapa é chamada de “Program Instrumentation”na
Figura 5. Devemos usar esses recursos para treinar uma Rede Neural (NN), em um outro passo
chamado “Actuation”na figura 5. Nossa rede neural deve receber informações dinâmicas e estáticas.
10
Essa última parte é formada exatamente pelos recursos extraı́dos na “Instrumentação”. O compo-
nente dinâmico é dado pelo status de contadores de desempenho de hardware: unidades pequenas
que registram importantes eventos de hardware, como o uso da CPU, a dissipação de energia e
padrões de acesso à memória. Finalmente, ao treinar a Rede Neural, usaremos o conhecimento im-
presso em seus neurônios para produzir o código binário que deve ser implantado no smartphone.
Essa fase é chamada de “Final code generation”na Figura 5. No restante desta seção, descreveremos
as etapas envolvidas neste projeto.
11
na Seção 2. No entanto, existe uma pequena probabilidade de que, independentemente de como o
programa está escrito, seu comportamento de potência permaneça o mesmo. Este resultado já seria
importante, porque contradiz décadas de intuição na análise e otimização de códigos; no entanto,
ele poderia comprometer substancialmente nosso projeto. Se for esse o caso, devemos usar apenas
as caracterı́sticas de tempo de execução para otimizar o comportamento de potência do programa,
em vez de seus recursos sintáticos.
Significado Após este estágio, teremos uma avaliação de quais caracterı́sticas sintáticas de pro-
gramas determinam seu perfil de potência. Este resultado já é útil para a indústria, pois os desen-
volvedores podem usar esse conhecimento para reduzir o consumo de energia de seus programas.
12
int main(int argc, char** argv) { int main(int argc, char** argv) { int main(int argc, char** argv) {
save_feature_ranges ( /* Conf == 1 is 0L1B */ /* Conf == 1 is 0L1B */
0.12, /* Arithmetic Density */ determine_active_configuration (1); Perf = read_perf_counters();
0.8, /* IO weight */ // Read first matrix from file 'argv[1]' choose_active_configuration (Perf);
0, /* Nesting factor */ int** m1 = readMatrix(argv[1],&M1,&N1); // Read first matrix from file 'argv[1]'
False /* Sleeping state */ ); /* Conf == 0 is 1L0B */ int** m1 = readMatrix(argv[1],&M1,&N1);
// Read first matrix from file 'argv[1]' determine_active_configuration (0); /* Conf == 0 is 1L0B */
int** m1 = readMatrix(argv[1],&M1,&N1); read_user_data(); Perf = read_perf_counters();
toggle_sleeping_state ( /* Conf == 1 is 0L1B */ determine_active_configuration (Perf);
True /* Known blocking function */ ); determine_active_configuration (1); read_user_data();
read_user_data(); // Read second matrix from file 'argv[1]' /* Conf == 1 is 0L1B */
toggle_sleeping_state ( ... same as original figure. Perf = read_perf_counters();
False /* Back into activity */ ); } determine_active_configuration (Perf);
// Read second matrix from file 'argv[1]' // Read second matrix from file 'argv[1]'
... same as original figure. ... same as original figure.
} (a) (b) } (c)
Figura 6: Os diferentes tipos de instrumentação que devemos usar para gerar código eficiente em
termos de energia para ser implantado em dispositivos reais. (a) Instrumentação criada na pri-
meira fase do projeto (Sec. 3.1). (b) Código gerado com agendamento fixo determinado após o
treinamento. (c) Código gerado com agendamento baseado em decisões de tempo de execução
que usam conhecimento aprendido para escolher a próxima configuração de hardware.
13
que ele ainda seja capaz de se adaptar às condições de tempo de execução, com base apenas no
conhecimento adquirido durante o treinamento. Intuitivamente, isso deve ser possı́vel, porque vários
grupos de pesquisa já mostraram que tal adaptação é possı́vel para tempo de execução [81, 77] (mas
não para energia). O principal problema que esperamos enfrentar é a sobrecarga da instrumentação:
é possı́vel que o custo da verificação das condições de tempo de execução - pago em termos de
instruções extras executadas - reduza muito os ganhos da adaptação. O número de estratégias
diferentes que podemos usar para tentar reduzir esse custo é enorme, e esperamos gastar bastante
esforço para encontrar as melhores alternativas ao longo dessa direção. Se falharmos, pelo menos,
poderemos mostrar que essa instrumentação de código consciente de energia exige metodologias
ainda não existentes, nem na indústria, nem na academia.
Significado Se for bem sucedido, após essa terceira fase do nosso projeto, teremos demonstrado
que é possı́vel reduzir o consumo de energia de programas de forma completamente automática, ou
seja: sem a intervenção de desenvolvedores de aplicativos ou usuários de aplicativos. Esse baixo
custo humano proporciona um grande incentivo para que nossas idéias sejam adotadas na indústria.
14
Figura 7: Queremos implementar compiladores que sejam capazes de traduzir diferentes partes
de um programa para diferentes processadores, incluindo hardware disponı́vel na nuvem.
Passo 2 – Descarga Manual de Código: Vamos estender as técnicas vistas no primeiro ano do
projeto para levar processadores off-chip14 em consideração. Um processador off-chip é qualquer
recurso de computação localizado fora do microchip do dispositivo que executa a aplicação de
interesse. Esses processadores incluem unidades de processamento gráfico (GPUs), processadores de
sinal digital (DSPs) e até mesmo processadores distribuı́dos, como serviços em nuvem. Neste ponto,
usaremos bibliotecas feitas à mão para implementar a descarga de trabalho de um processador em
outro.
Critério de sucesso: a capacidade de migrar cálculos entre processadores a fim de aumentar a
duração da bateria do dispositivo.
Desafio principal: o custo de mover dados para fora do chip pode ofuscar os ganhos derivados
do próprio descarregamento.
Análise de Risco: 15% - se o primeiro ano deste projeto for bem sucedido, não há razão para
acreditar que não podemos estender o treinamento metodologia para adaptar os programas a um
ambiente mais rico em dispositivos computacionais.
15
volvedores marcar o código que pode ser descarregado. Tais sistemas incluem OpenMP 4.0 [57],
OpenSs [64], e OpenACC [67, 66]. Várias dessas anotações já possuem compiladores que as su-
portam; contudo, a nuvem ainda é um desafio: não existe suporte para a produção automática de
código que é executado em servidores remotos. Esperamos lidar com esse desafio nesta etapa.
Critério de sucesso: a geração automática de código que é executado em diferentes tipos de
processadores; em particular, que são executados na nuvem.
Desafio principal: a indisponibilidade de ferramentas que suportam o geração de código que
pode ser transferido para dispositivos externos, como servidores disponı́veis na nuvem. Risk As-
sessment: 30% - nossa experiência com projeto e implementação de compiladores nos permite
saber que a construção de um compilador é um difı́cil esforço. Não temos dúvidas de que podemos
executar essa tarefa até a conclusão, dado tempo suficiente. Ainda assim, é possı́vel que no final
do perı́odo de três anos, tenhamos um compilador que ainda é muito preliminar para ser liberado
para o público em geral.
3.5 Cronograma
Esta proposta descreve um projeto de três anos, composto das atividades descritas na seção anterior.
O cronograma esperado para cada uma dessas atividades está descrito no gráfico de Gantt da
figura 8
16
Figura 9: Dependências do DCC-UFMG onde será realizado o projeto proposto.
tem sido capaz de publicar artigos nas principais conferências como OOPSLA, PACT, PLDI, CGO
e Compiler Construction. A equipe de investigação tem acesso a três servidores com mais de 60
núcleos disponı́veis para a execução de experimentos. Além disso, o grupo conta com 12 estações
de trabalho, e seis laptops que os alunos podem usar. Dois desses servidores têm GPUs. Estão
disponı́veis também duas placas Nvidia TK1 com núcleos ARM mais GPUs, além de todo o aparato
para a realização de experimentos de medição de energia. Além disso, o Departamento de Ciência
da Computação tem um grande cluster de computadores para a realização de experimentos em
computação de alto desempenho. A figura 9 mostra a sala em que trabalham os integrantes do
grupo.
Afora esses recursos, os pesquisadores que trabalham no Departamento de Ciência da Com-
putação da UFMG têm acesso a salas de conferências para reuniões remotas, uma biblioteca bem
fornecida, cinco auditórios, e contam com o apoio de uma equipe administrativa muito eficiente.
Além de toda essa infra-estrutura, a equipe possui ainda o conhecimento e o material necessário
para efetuar medições de energia em hardware embarcado. Essa tecnologia, chamada JetsonLeap,
vem sendo desenvolvida pela equipe de pesquisadores desde 2014, e encontra-se hoje disponı́vel
como software livre, no link: http://cuda.dcc.ufmg.br/jetson/.
4 Resultados Esperados
Cada uma das fases descritas na seção 3 deste documento contém uma breve descrição de resultados
esperados. Atendendo a recomendações do Edital 09/2018, resumimos aqui tais resultados.
Contribuição técnica. Experimentos preliminares já mostram que podemos economizar até 25%
do consumo de energia ao preço de uma desaceleração em desempenho inferior a 5%. Intencionamos
aplicar as técnicas aqui propostas em programas Java que funcionam no sistema Android, usando
Soot, um arcabouço para analisar Java, a fim de instrumentar bytecodes. Acreditamos que nosso
protótipo final permitirá que os desenvolvedores reduzam o consumo de energia de aplicativos
Android a um preço mı́nimo de desempenho. Para demonstrar essa possibilidade, devemos testar
nossas idéias em aplicativos que funcionam em diferentes tipos de smartphones.
Para uma visão global da aplicabilidade dos resultados deste projeto, referimos o avaliador à
figura 1. Técnicas que reduzem o consumo de energia de programas que executam em aparelhos
celulares tem emprego imediato na indústria de ponta. Prova disso é o fato de o proponente já
17
coordenar, ou ter coordenado, projetos com objetivos semelhantes, financiados pela LG Electronics
e pela Google. E, posto que aparelhos modernos possuem formas cada vez mais agressivas de
modificação de frequência de execução, acredita-se que essas técnicas serão cada vez mais úteis.
Produção bibliográfica esperada. Esperamos que desse projeto resultem várias publicações
de natureza cientı́fica. Em particular, cada uma das fases descritas na seção 3 pode dar-nos opor-
tunidade de publicar diferentes trabalhos em periódicos e conferências de prestı́gio em ciência da
computação. Findos os três anos de projeto, esperamos termos publicado:
Formação esperada de recursos humanos. Esperamos, ao final deste projeto, termos orien-
tado alunos em nı́vel de graduação e pós-graduação. Assim, em termos de formação de recursos
humanos, esperamos ter contribuı́do para a educação cientı́fica de:
A fim de que o avaliador CNPq tenha subsı́dios para apreciar a qualidade e quantidade da
produção de Fernando Pereira, esta seção apresenta suas contribuições intelectuais. Sua produção
é representada por publicações cientı́ficas e ferramentas de software disponı́veis para usufruto da
sociedade. Adota-se por referência a metodologia da CAPES a fim de classificar a produção do
docente. Começa-se a discussão da produção intelectual do docente apresentando-se uma breve
descrição da pesquisa que ele realizou (Sec. 5.2.1) durante sua formação e que vem realizando na
UFMG (Sec. 5.2.2). Números e métricas relacionadas a essa produção são analisados na Seção 5.3.
Antes, contudo, de passar-se à discussão da produção de Fernando Pereira, a Seção 5.1 provê ao
leitor uma breve perspectiva sobre a área em que Fernando faz pesquisa: os compiladores.
18
5.1 A Pesquisa em Compiladores em Perspectiva
Fernando Pereira realiza pesquisa em compiladores – um subcampo da área de Linguagens de
Programação. Um compilador é o software que traduz um programa que o desenvolvedor escreve
em uma linguagem de programação para um programa escrito em linguagem de máquina. A fim
de que a pesquisa realizada por Fernando seja colocada em perspectiva, convém ressaltar que:
1. Compiladores estão entre as ferramentas mais antigas desenvolvidas por cientistas da com-
putação. A linguagem Fortran, por exemplo, já possuia um compilador em 1958 [22].
2. Compiladores são essenciais para a ciência da computação, pois eles aumentam a produti-
vidade dos programadores. Caso programas ainda fossem feitos em linguagem de máquina,
dificilmente terı́amos avanços como a Internet, os sistemas operacionais, os bancos de dados,
etc [2].
3. Pouco software recebe tanto investimento da indústria básica de informática (Intel, IBM,
Google, Facebook, etc), como os compiladores, devido à sua importância [56].
4. Compiladores e linguagens de programação são os temas que mais conferiram Prêmios Turing
ao longo da história da ciência da computação. O Prêmio Turing é a homenagem mais
importante que um cientista da computação pode receber. Dentre os pesquisadores da área
de compiladores que já ganharam o prêmio, cita-se: Alan Perlis, John McCarthy, Dana Scot,
John Backus, Robert Floyd, Kenneth Iverson, C.A.R. Hoare, Dennis Ritchie, Nicklaus Wirth,
John Cocke, Robin Milner, Kristen Hyggard, Ole-Johan Dahl, Alan Kay, Fran Allen e Barbara
Liskov.
A partir desses pontos, conclui-se que a pesquisa em compiladores é importante. Porém, uma
vez que trata-se de uma ferramenta antiga, a pesquisa é difı́cil. A publicação de bons resultados
leva tempo, pois faz-se necessário competir contra ferramentas industriais. Uma vez que a pesquisa
é difı́cil, e já bastante sedimentada, ela ainda é incipiente no Brasil. Testemunho disso é o fato de,
dentre os autores dos últimos três Simpósios Brasileiros de Linguagens de Programação (SBLP),
somente três possuirem bolsa de produtividade (incluindo Fernando Pereira). Todas essas bolsas
são nı́vel 2. Assim, é a luz de tais fatos que espera-se que a leitura da produção intelectual de
Fernando seja feita.
19
5.2.1 Perı́odo Pré-UFMG
Graduação. A primeira tentativa de Fernando Pereira de fazer qualquer trabalho em linguagens
de programação foi orientada pelo Prof. Roberto Bigonha e pelo Prof. Vladimir Iorio (UFV).
Naquela ocasião, os pesquisadores investigaram o uso de técnicas de avaliação parcial para a geração
de compiladores [8]. A ess trabalho segui-se a implementação do LinF [20], um idioma para a
especificação de fractals usando gramáticas L-System. Esses trabalhos foram feitos durante a
graduação de Fernando.
20
Otimização de código para placas gráficas O desenvolvimento de linguagens de programação
segue o desenvolvimento do hardware. Assim, as linguagens de programação tendem a apresentar
mais e mais abstrações para lidar com o paralelismo, porque o hardware é cada dia mais paralelo.
Hoje, o modelo de execução Single Instruction, Multiple Data (SIMD), tão conspı́cuo em unidades
de processamento gráfico (GPUs), parece ser uma alternativa acessı́vel para trazer hardware de alto
desempenho para usuários de computação. Atualmente, uma GPU tı́pica reúne algumas centenas
de processadores. No entanto, usar todo esse poder é um desafio, porque nem todas as aplicações
são tão paralelas. Além disso, os programadores têm problemas para executar aplicações regulares
até seu máximo desempenho, pois o modelo de execução da GPU ainda é muito complicado. Nesse
sentido, uma das missões de pesquisa de Fernando é afastar esse fardo dos programadores e transferi-
lo para o compilador. O grupo de pesquisa que Fernando coordena inventou o conceito de análise de
divergência [40, 37, 97, 67, 71, 36, 68, 66] e codificou a primeira implementação que está disponı́vel
hoje em um compilador de código aberto [96]. Fernando espera continuar trabalhando em técnicas
de otimização de código que visem o arquiteturas SIMD; Assim, ajudando a reduzir a lacuna entre
a complexidade das aplicações paralelas e a expressividade das linguagens de programação em que
esses problemas devem ser resolvidos.
21
compilação de programas JavaScript mais eficiente e simples. Seu primeiro resultado neste campo
foi um algoritmo para eliminar testes de overflow em código binário [105, 104]. Desde então, Fer-
nando vem desenvolvendo técnicas cada vez mais poderosas para compilar programas durante a
sua interpretação, já tendo publicado resultados descrevendo tais soluções [34, 41].
Demais linhas de pesquisa Além das três linhas de pesquisa descritas acima, Fernando trabalha
em inúmeros outros projetos, sempre buscando unir aspectos teóricos e aspectos práticos da ciência
da computação. Desse esforço resultam artigos, software aberto, websites de popularização cientı́fica
e ferramentas on-line. A tı́tulo de exemplo, abaixo são listados algumas dessas outras linhas de
pesquisa, com alguns dos artigos descrevendo resultados obtidos.
22
10
9 Periódicos
8
Conferências
7
6
5
4
3
2
1
0
3
6
4
7
00
00
00
00
00
01
01
01
01
01
01
00
00
01
01
p2
p2
p2
p2
p2
p2
p2
p2
p2
p2
p2
p2
p2
p2
p2
Figura 10: Número de artigos indexados na biblioteca digital DBLP por ano. Produção é classifi-
cada como artigos em conferência e artigos em periódicos.
Visibilidade. Com relação a este último quesito – a visibilidade da produção técnica – o número
de citações recebido por Fernando Pereira tem crescido concistentemente. A Figura 11 ilustra
essa afirmação com números. Os dados mostrados na figura foram retirados do website Google
Scholar, em Primeiro de Janeiro de 2018. Fernando terminou o ano de 2016 com 133 citações; um
salto notável, considerando-se que durante o inı́cio de sua carreira cientı́fica, ele levou seis anos
para atingir o limite de 30 citações. E, à luz do cenário da pesquisa em compiladores, descrito na
Seção 5.1, em que poucos trabalhos são citados, esse crescimento é ainda mais notável.
23
180
160
140
120
100
80
60
40
20
0
3
7
00
00
00
00
00
00
00
01
01
01
01
01
01
01
01
p2
p2
p2
p2
p2
p2
p2
p2
p2
p2
p2
p2
p2
p2
p2
Figura 11: Citações por ano, conforme apreendido pelo Google Scholar.
Períodicos Conferências
A1
A1
B1 B3
B2
18
8 A2
A2
B1
Figura 12: Qualis dos veı́culos contados na Figura 10. Para a classificação das conferências, usou-
se o Qualis CAPES de 2016-2012.
Programação possui somente quatro conferências classificadas como A1: PLDI, PPoPP, OOPSLA
e POPL, e Fernando já publicou seus trabalhos – como primeiro ou último autor – em todas eleas,
exceto POPL. Além disso, quase todos os artigos publicados por Fernando nos últimos oito anos
foram como último autor, o que ressalta seu papel de orientador e coordenador de pesquisa.
24
6 Bolsas, Projetos e Orientações
Esta seção trata das bolsas já recebidas pelo docente, e dos projetos que ele coordenou durante o
perı́odo que vai de 2009, ano de sua contratação, até 2017.
6.1 Bolsas
A Tabela 1 descreve as bolsas já recebidas pelo docente que estão relacionadas a atividades de
pesquisa. Essas bolsas foram custeadas por instituições públicas de fomente a pesquisa.
Tabela 1: Bolsas custeadas por instituições de fomento a pesquisa recebidas pelo docente.
A Tabela 2 descreve as bolsas já recebidas pelo docente que estão relacionadas a atividades de
pesquisa, custeadas por instituições privadas. Ambas as bolsas descritas na tabela estão relaciona-
das a projetos de pesquisa que o docente coordenou.
Tabela 2: Bolsas custeadas por empresas privadas, recebidas pelo docente enquanto coordenador
de projeto de pesquisa.
• Compiladores. Grupo coordenado pelo próprio docente e pelo Prof. Renato Antônio Celso
Ferreira.
• Grupo de Segurança Digital, Criptografia e Privacidade. Coordenador: Prof. Leonardo
Barbosa.
• Linguagens e Ambientes de Programação. Coordenadores: Prof. Roberto Bigonha e Profa.
Mariza Bigonha.
• Escalabilidade e Eficiência em Sistemas de Computação. Coordenador: Prof. Wagner Meira
Jr.
• Computação de Alto Desempenho. Coordenador: Edson Borin.
25
6.3 Projetos de Pesquisa
O candidato é, atualmente, o coordenador de quatro projetos de pesquisa16 . Um desses projetos
envolve recursos provenientes de empresa privada: a LG Electronics. Dois dos projetos já termina-
dos também se deram com empresas privadas: a Intel e a Maxtrack. A existência desses recursos,
provenientes da indústria de informática, demonstram que a pesquisa realizada pelo candidato en-
contra aplicação prática. Seis dos alunos de mestrado que já trabalharam com o candidato, um de
seus alunos de doutorado, e seis de seus alunos de iniciação cientı́fica já recebem bolsas mantidas
por tais recursos. Os demais estudantes que trabalham com ele são mantidos por bolsas vindas de
agências públicas, como o CNPq, a CAPES e a FAPEMIG. A relação dos projetos vigentes que
o candidato coordena pode ser vista logo abaixo. Além desses projetos, o candidato participa de
mais três projetos ainda vigentes: FAPEMIG- PROEX, InWeb e um edital universal CNPq, do
prof. Leonardo Barbosa.
26
• Tı́tulo: Compiler Support for Emerging Parallel Architectures
Agência financiadora: UFMG (Edital Cátedras Francesas na UFMG)
Orçamento: R$ 23.000,00
Término: 31/11/2014
Além desses projetos, Fernando Pereira coordenou cinco bolsistas Probic/PIBIC. Cada um
desses alunos recebeu uma bolsa padrão de iniciação cientı́fica, no valor de R$ 400.00. No total,
Fernando trouxe para o DCC-UFMG o valor de R$ 24.000,00 relativos a esses projetos de iniciação
cientı́fica. Assim, somados, os projetos que o docente já coordenou ou coordena somam mais
de um milhão de reais. Além desses projetos, o docente também já participou ou participa de
vários projetos coordenados por outros pesquisadores. Esses projetos estão descritos em seu Lattes.
Dentre eles, citam-se:
• INCT para a Web. Instituto Nacional de Ciência e Tecnologia para a Web. Coordenado pelo
prof. Virgı́lio Almeida. Edital INCTs, CNPq e FAPEMIG, 2009.
• MASWeb. Modelos, Algoritmos e Sistemas para a Web. Coordenado pelo prof. Nı́vio Ziviani.
Edital PRONEX FAPEMIG, projeto número APQ 01400-14, 2015.
27
6.4 Orientações
Durante a sua carreira como Professor Adjunto do DCC-UFMG, Fernando Pereira concluiu a
orientação de diversos alunos de mestrado e iniciação cientı́fica, além da orientação de um aluno de
doutorado, e a có-orientação de um aluno de doutorado. Vários desses alunos ganharam prêmios
reconhecendo sua excelência cientı́fica. Esses prêmios são descritos na Seção 6.4.4.
1. Bruno Rodrigues Silva. Análise Esparsa de Fluxo de Informação. 2016. (Orientação) [92,
102, 99, 101, 100]
2. Bruno Rocha Coutinho. Utilização de técnicas de análise estática e dinâmica para oti-
mização de aplicações de propósito geral em GPUs. 2011. (Có-Orientação. Orientador
Principal: Wagner Meira Jr.) [37, 35, 36]
• Mateus Tymburibá
Ano de Ingresso: 2015
Tı́tulo Previsto da Tese: Uso de Predição de Branches para Descobrir Ataques de Pro-
gramação Orientada a Retorno
3. Péricles Rafael Oliveira Alves [66, 5, 41, 67, 3, 34, 4, 114, 28]. Enabling Code Optimiza-
tions Throught Hybrid Analysis of Memory Access Ranges. 2017.
28
4. Rubens Emı́lio Alves Moreira [53, 72, 73, 48, 71]. Ré-Vetorização de Chamadas de
Função. 2017.
5. Vitor Mendes Paisante [79, 62, 80, 49]. Symbolic Range Analysis of Pointers. 2016.
6. Victor Hugo Sperle Campos [29, 94, 30, 114, 28]. Restrictification of Function Arguments.
2016.
7. Kézia Corrêa Andrade Moreira [70, 45]. Anotação Automática de Código com Diretivas
OpenACC. 2016.
8. Henrique Nazaré [29, 82, 75, 34, 98, 41]. Symbolic Range Analysis. 2016.
9. Francisco Demontiê dos Santos Junior [32, 31]. Geração de Casos de Testes para Lin-
guagens com Aritmética de Ponteiros. 2016. (có-orientação. Orientadora: Profa. Mariza
Bigonha)
10. Douglas do Couto Teixeira [47, 46, 45]. Optimizations for Graphics Processing Units.
2015.
11. Bruno Morais Ferreira [51]. The Dinamica Virtual Machine For Geosciences. 2015.
12. Raphael Ernani Rodrigues [5, 82, 94, 30, 93]. Scalable and Precise Range Analysis on the
Interval Lattice. 2014.
13. Matheus Silva Vilela [23, 116]. Context-Aware Code Optimizations Based on Function
Cloning. 2014.
14. Teo Milanez Brandão [68, 69]. Thread Synchronization in SIMD Hardware. 2013. (có-
orientação. Orientador: Prof. Renato Ferreira)
15. Igor Rafael de Assis Costa [34, 4, 41]. Parameter-Based Speculative Value Specialization.
2013.
16. Diogo Nunes Sampaio [96, 36, 97, 35, 37]. Divergence Analysis with Affine Constraints.
2013.
17. André Luiz Camargos Tavares [108, 107, 109]. Alocação de Registradores Desacoplada
Baseada em Coloração de Grafos com Compartilhamento Hierárquico. 2011. (có-orientação.
Orientador: Prof. Roberto Bigonha)
18. Gabriel Quadros Silva [84]. Tracking Indirect Information Flow in Languages with Des-
tructive Update. 2011. (có-orientação. Orientadora: Profa. Mariza Bigonha)
19. Marcos Rodrigo Sol Souza [104, 105]. Eliminação de Testes de Overflow para Compila-
dores de Trilhas. 2011. (có-orientação. Orientadora: Profa. Mariza Bigonha)
20. Andrei Rimsa Álvares [89, 88, 90]. Algoritmo Eficiente de Análise Estática para Procurar
Ataques do Tipo Variáveis Contaminadas. 2010. (có-orientação. Orientador: Prof. Roberto
Bigonha)
29
21. Leonardo Luiz Padovani da Mata [40, 39]. Geração Automática de Código para Execução
em um Ambiente de Computação Dataflow. 2010. (có-orientação. Orientador: Prof. Renato
Ferreira)
• Gabriel Poesia
• Marcelo Novaes
• Marcus Rodrigues
• Pedro Ramos
10. Victor Hugo Sperlle Campos. Interprocedural Non-Iterative Range Analysis, 2011.
11. Douglas Do Couto Teixeira. The Design and Implementation of a non-iterative Range
Analysis Algorithm on a Production Compiler, 2010.
12. Fernando Carvalho Coelho. Development of a Testing Framework for the Ocelot CUDA
Compiler, 2010.
30
Abaixo segue a relação dos alunos de iniciação cientı́fica que o docente atualmente orienta.
Todos esses alunos possuem bolsas, custeadas por instituições públicas, ou por empresas privadas:
• 2016: Primeiro lugar na competição estudantil da ACM, com o artigo “Inference of Peak
Density of Indirect Branches to Detect ROP Attacks” [53], apresentado pelo aluno Rubens
Emı́lio Alves Moreira.
• 2015: Segunda Melhor Ferramenta do Congresso Brasileiro de Software, Teoria e Prática (CB-
Soft): “FlowTracker - Detecção de Código Não Isócrono via Análise Estática de Fluxo” [102],
publicado com o aluno Bruno Rodrigues.
• 2014: Segunda Melhor Dissertação de Mestrado: “Divergence Analysis with Affine Cons-
traints”. Prêmio conferido pela Sociedade Brasileira de Computação. Trabalho realizado
pelo aluno Diogo Sampaio.
31
• 2012: Melhor artigo do Simpósio Brasileiro de Linguagens de Programação 2012 “Spill Code
Placement for SIMD Machines” [97], publicado com os alunos Diogo Sampaio e Rafael
Martins.
• 2010: Melhor artigo do 22nd International Symposium on Computer Architecture and High
Performance Computing (SBAC-PAD): “Performance Debugging of GPGPU Applications
with the Divergence Map” [37], publicado com os alunos Bruno Rocha Coutinho e Diogo
Nunes Sampaio.
7 Demais atividades
Atendendo ao item 6.6.1.(f-g) da Chamada CNPq 09/2018, esta seção descreve outras atividades
executadas pelo proponente desta proposta. Serão descritas atividades desenvolvidas pelo pesqui-
sador desde que ele foi contratado pelo Departamento de Computação da Universidade Federal de
Minas Gerais em Novembro de 2009.
32
7.1 Orientações extra-curriculares concluı́das
O docente orientou 21 Projetos Orientados em Computação (POC) entre os anos de 2009 e 2017.
POCs são requisito necessário para a formação no Bacharelado em Ciência da Computação. Ele
também orientou quatro Monografias do curso de Sistemas de Informação neste mesmo perı́odo. A
relação de monografias orientadas pode ser encontrada no currı́culo lattes do docente.
33
7.4 Outras atividades sem remuneração adicional especı́fica
Cursos de curta duração fora da UFMG. O docente vem ministrando vários cursos em
universidades estrangeiras. Abaixo seguem listados os cursos ministrados pelo docente entre 2009
e 2017:
34
Figura 13: Em Julho de 2017 Fernando Pereira ministrou a cadeira “Compiladores”em ACACES.
Esta escola de verão acontece anualmente, e envolve a participação de cerca de 250 estudantes de
universidades de todo o mundo. Entre os instrutores deste ano, havia pesquisadores de renome,
como Colin Adams, Rosa Badia, Koen Bertels, e Gernot Heiser. Maiores informações estão dis-
ponı́veis na página do evento.
35
• Sessão de Ferramentas do CBSoft (CBSoft Tools) – 2014-2017;
• Workshops de Dissertações e Teses (WTDSoft) – 2014-2017;
• Simpósio Brasileiro de Segurança Computacional;
• Onward! Essays;
• Simpósio de Sistemas Computacionais de Alto Desempenho (WSCAD)
• The International Symposium on Compiler Construction – duas ocasiões.
Acolhida de Pesquisadores Estrangeiros. Fernando Pereira recebeu pelo menos três pesqui-
sadores durante três ou mais meses, no laboratório que coordena:
• Sylvain Collange - INRIA Rennes: pós-doutorado de nove meses (2010) e duas visitas de três
meses (2014 e 2015);
• Simon Möll - Saarland U: estágio de três meses
36
Guido Araújo
Edson Borin
Diego Aranha
Jie Liu
Márcio Pereira
Jens Palsberg
Marcelo D'Amorim
Hao Chi Wong
Unicamp
José Nacif Microsoft
UCLA
UFPE Quentin Colombet
Intel
Krishna Nandivada UFV
Apple Jonathan Lee
IIT Madras
Johannes Doerfert
Google
Daniel Berlin
Saarland U
Fernando
Sebastian Hack
Pereira
CNRS
Abdoulaye Gamatié
Christophe Guillon
Figura 14: Lista de có-autores de Fernando Pereira que trabalham em instituições diferentes da
UFMG. Có-autores foram retirados da biblioteca DBLP. Foram citados somente pesquisadores
profissionais; alunos em formação não foram listados.
37
8 Conclusão
Esta proposta apresentou o projeto de pesquisa proposto por Fernando Magno Quintão Pereira
como requisito essencial para submissão ao Edital CNPq 09/2018 – Bolsa de Produtividade em
Pesquisa. O objetivo do projeto é utilizar o compilador para aumentar a eficiência energética de
programas. Trata-se de um projeto na área de compiladores. A pesquisa em compiladores é ainda
incipiente no Brasil. Embora existam no paı́s núcleos de excelência na área, como o Laboratório de
Sistemas Computacionais da UNICAMP, há ainda muito o que pode ser conseguido nesse campo.
Ressalta-se que a pesquisa em compiladores é importante, pois esse tipo de software é um dos
pilares fundamentais da ciência da computação. Grandes conquistas como os sistemas operacionais
modernos, os smartphones, e a própria Internet, somente foram possı́vel porque cientistas como
John Backus, Nicklaus Wirth, Grace Hopper e John McKarthy dedicaram imenso esforço para a
construção e evolução de compiladores. E mesmo que grande avanço tenha sido conseguido nesta
área, há ainda muito o quê conseguir. A pesquisa proposta representa mais um passo em tal direção.
Referências
[1] Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles,
Techniques, and Tools (2nd Edition). Addison Wesley, Boston, MA, US, 2006.
[2] F. E. Allen. The history of language processor technology in ibm. IBM J. Res. Dev.,
25(5):535–548, 1981.
[3] Pericles Rafael Alves, Fabian Gruber, Johannes Doerfert, Alexandros Labrineas, Tobias Gros-
ser, Fabrice Rastello, and Fernando Magno Quint ao Pereira. Runtime pointer disambigua-
tion. In OOPSLA, pages 589–606. ACM, 2015.
[4] Pericles Rafael Oliveira Alves, Igor Rafael de Assis Costa, Fernando Magno Quint ao Pereira,
and Eduardo Lage Figueiredo. Parameter based constant propagation. In SBLP, pages 57–71.
Springer, 2012.
[5] Péricles Rafael Oliveira Alves, Raphael Ernani Rodrigues, Rafael Martins de Souza, and
Fernando Magno Quint ao Pereira. A case for a fast trip count predictor. Information
Processing Letters, 115(2):146–150, 2015.
[6] Neto Antonio, Melo Leandro, Neto Omar, Fernando Pereira, and Barbosa Leonardo. Pro-
tecting programs against memory violation in hardware. Revista IEEE America Latina,
13(3):885–891, 2015.
[7] Fernando Magno Quint ao Pereira and Daniel Berlin. Wave propagation and deep propagation
for pointer analysis. In CGO, pages 126–135. ACM, 2009.
[8] Fernando Magno Quint ao Pereira, Roberto da Silva Bigonha, Mariza Andrade da Silva Bi-
gonha, and Vladimir Oliveira de Iorio. Avaliação parcial de programas usando cmix/ii. In
SBLP, pages C32–C47. SBC, 2001.
[9] Fernando Magno Quint ao Pereira, Marco Túlio de Oliveira Valente, Roberto da Silva Bi-
gonha, and Mariza Andrade da Silva Bigonha. A java-based simulator for ad hoc mobile
distributed systems. In FIDJI, page Springer. 1-15, 2002.
38
[10] Fernando Magno Quint ao Pereira, Marco Túlio de Oliveira Valente, Roberto da Silva Bigo-
nha, and Mariza Andrade da Silva Bigonha. Uma linguagem para coordenação de aplicações
em redes móveis ad-hoc. In SBLP, pages 152–165. SBC, 2002.
[11] Fernando Magno Quint ao Pereira, Marco Túlio de Oliveira Valente, Roberto da Silva Bi-
gonha, and Mariza Andrade da Silva Bigonha. Chamada remota de métodos na plataforma
j2me/cldc. In WCSF, pages 157–168. SBC, 2003.
[12] Fernando Magno Quint ao Pereira, Marco Túlio de Oliveira Valente, Roberto da Silva Bi-
gonha, and Mariza Andrade da Silva Bigonha. Chamada remota de métodos na plataforma
j2me/cldc. Revista do Instituto Nacional de Telecomunicações, 7(1):21–31, 2004.
[13] Fernando Magno Quint ao Pereira, Marco Túlio de Oliveira Valente, Roberto da Silva Bi-
gonha, and Mariza Andrade da Silva Bigonha. Arcademis: a framework for object oriented
communication middleware development. Software: Practice and Experience, 36(5):495–512,
2006.
[14] Fernando Magno Quint ao Pereira and Jens Palsberg. Register allocation via coloring of
chordal graphs. In APLAS, pages 315–329. Spring, 2005.
[15] Fernando Magno Quint ao Pereira and Jens Palsberg. Register allocation after classical ssa
elimination is np-complete. In FOSSACS, pages 79–93. Springer, 2006.
[16] Fernando Magno Quint ao Pereira and Jens Palsberg. Register allocation by puzzle solving
extended. In PLDI, pages 216–226. ACM, 2008.
[17] Fernando Magno Quint ao Pereira and Jens Palsberg. Ssa elimination after register allocation.
In CC, pages 158 – 173. Springer, 2009.
[18] Fernando Magno Quint ao Pereira and Jens Palsberg. Punctual coalescing. In CC, pages
165–184. Springer, 2010.
[19] Fernando Magno Quint ao Pereira, Wagner Salazar Pires, Marco Túlio de Oliveira Valente,
Roberto da Silva Bigonha, and Mariza Andrade da Silva Bigonha. Tactics for remote method
invocation. Journal of Universal Computer Science, 10(7):824–842, 2004.
[20] Fernando Magno Quint ao Pereira, Leonardo Trivelato Rolla, Cristiano Gato de Rezende, and
Rodrigo Lima Carceroni. The language linf for fractal specification. In SIBGRAPI, pages
67–74. IEEE, 2003.
[21] Andrew W. Appel and Jens Palsberg. Modern Compiler Implementation in Java. Cambridge
University Press, Cambridge, UK, 2nd edition, 2002.
[22] John Backus. The history of fortran i, ii, and iii. SIGPLAN Not., 13(8):165–180, 1978.
[23] Guilherme Balena, Matheus Vilela, and Fernando Pereira. Resolução de bugs de desempenho
via clonagem de funções. In SBLP, pages 1–20. SBC, 2013.
[24] Tarsila Bessa, Pedro Quint ao, Michael Frank, and Fernando Magno Quint ao Pereira. Jet-
sonleap: A framework to measure energy-aware code optimizations in embedded and hetero-
geneous systems. In SBLP, pages 16–30. SBC, 2016.
39
[25] Tarsila Bessa, Christopher Gull, Pedro Quintao, Michael Frank, Jose Nacif, and Fernando
Magno Quintao Pereira. JetsonLEAP: a framework to measure power on a heterogeneous
system-on-a-chip device. Science of Computer Programming, pages –, 2017.
[26] Christian Bienia, Sanjeev Kumar, Jaswinder Pal Singh, and Kai Li. The PARSEC benchmark
suite: Characterization and architectural implications. In PACT, pages 72–81. ACM, 2008.
[27] Rainer Buchty, Vincent Heuveline, Wolfgang Karl, and Jan-Philipp Weiss. A survey on
hardware-aware and heterogeneous computing on multicore processors and accelerators. Con-
currency and Computation: Practice and Experience, 24(7):663–675, 2012.
[28] Victor Campos, Pericles Alves, and Fernando Pereira. Restrictifier: a tool to disambiguate
pointers at function call sites. In CBSoft Tools, pages 89–96. SBC, 2015.
[29] Victor Hugo Sperle Campos, Péricles Rafael Alves, Henrique Nazaré, and Fernando
Magno Quint ao Pereira. Restrictification of function arguments. In CC, pages 163–173.
ACM, 2016.
[30] Victor Hugo Sperle Campos, Raphael Ernani Rodrigues, Igor Rafael de Assis Costa, and
Fernando Magno Quint ao Pereira. Speed and precision in range analysis. In SBLP, pages
42–56. Springer, 2012.
[31] Francisco Demontie Junio Cezar, Mariza Bigonha, Frederico Campos, and Fernando Pereira.
Automatic inference of loop complexity through polynomial interpolation. In SBLP, pages
1–15. Springer, 2015.
[32] Junio Cezar, Francisco Demontie, Mariza Bigonha, and Fernando Pereira. Asymptus - a tool
for automatic inference of loop complexity. In CBSoft Tools, pages 97–104. SBC, 2015.
[33] Junio Cezar, Michael Frank, Abdoulaye Gamatie, and Fernando Pereira. A compiler-centric
infra-structure for whole-board energy measurement on heterogeneous android systems. In
ReCoSoc, pages 1–8. ACM, 2018.
[34] Igor Costa, Péricles Alves, Henrique Nazaré, and Fernando Magno Quint ao Pereira. Just-
in-time value specialization. In CGO, pages 33:1–33:11. ACM, 2013.
[35] Bruno Coutinho, Diogo Sampaio, Fernando Magno Quint ao Pereira, and Wagner Meira Jr.
Divergence analysis and optimizations. In PACT, pages 320–329. IEEE, 2011.
[36] Bruno Coutinho, Diogo Sampaio, Fernando Magno Quint ao Pereira, and Wagner Meira
Jr. Profiling divergences in gpu applications. Concurrency and Computation: Practice and
Experience, 25(6):775–789, 2013.
[37] Bruno Rocha Coutinho, Diogo Nunes Sampaio, Fernando Magno Quint ao Pereira, and Wag-
ner Meira Jr. Performance debugging of gpgpu applications with the divergence map. In
SBAC-PAD, pages 33–40. IEEE, 2010.
[38] Ron Cytron, Jeanne Ferrante, Barry K. Rosen, Mark N. Wegman, and F. Kenneth Zadeck.
An efficient method of computing static single assignment form. In POPL, pages 25–35.
ACM, 1989.
40
[39] Leonardo L P da Mata, Fernando Magno Quint ao Pereira, and Renato Ferreira. Automatic
parallelization of canonical loops. Science of Computer Programming, 78(8):1193–1206, 2013.
[40] Leonardo Padovani da Mata, Fernando Magno Quint ao Pereira, and Renato Antônio Ferreira.
Automatic parallelization of canonical loops. In SBLP, pages 1–15. SBC, 2009.
[41] Igor Rafael de Assis Costa, Henrique Nazaré Santos, Péricles Rafael Alves, and Fernando
Magno Quint ao Pereira. Just-in-time value specialization. Computer Languages and Systems
and Structures, 40(2):37–52, 2014.
[42] Marco Túlio de Oliveira Valente, Fernando Magno Quint ao Pereira, Roberto da Silva Bigo-
nha, and Mariza Andrade da Silva Bigonha. A coordination model for ad hoc mobile systems.
In EURO-PAR, pages 1075–1081. Springer, 2003.
[43] Marco Túlio de Oliveira Valente, Roberto da Silva Bigonha, Mariza Andrade da Silva Bigo-
nha, and Fernando Magno Quint ao Pereira. A coordination model for ad hoc mobile systems
and its formal semantics. In WCSF, pages 58–67. SBC, 2002.
[44] Ning Ding, Daniel Wagner, Xiaomeng Chen, Abhinav Pathak, Y. Charlie Hu, and Andrew
Rice. Characterizing and modeling the impact of wireless signal strength on smartphone
battery drain. In SIGMETRICS, pages 29–40, New York, NY, USA, 2013. ACM.
[45] Douglas do Couto, Kezia Andrade, Gleison Souza, and Fernando Pereira. Etino: Colocação
automática de computação em hardware heterogêneo. In SBLP, pages 1–14. SBC, 2015.
[46] Douglas Teixeira do Couto and Fernando Magno Quint ao Pereira. The design and imple-
mentation of a non-iterative range analysis algorithm on a production compiler. In SBLP,
pages 1–15. SBC, 2011.
[47] Douglas do Couto Teixeira, Sylvain Collange, and Fernando Magno Quint ao Pereira. Fusion
of calling sites. In SBAC-PAD, pages 90–97. IEEE, 2015.
[48] Rubens Emilio, Mateus Tymburiba, and Fernando Pereira. Inferênica estática da frequência
máxima de instruções de retorno para detecção de ataques rop. In SBSeg, pages 2–15. SBC,
2015.
[49] Saggioro Felipe, Paisante Vitor, Rodrigues Raphel, Barbosa Leonardo, and Fernando Pereira.
Crosschecking distributed data to detect integer overflow. Revista IEEE America Latina,
13(4):1083–1089, 2015.
[50] Augusto Fernando, Menezes Gustavo, Marcondes Pablo, Fernando Pereira, Chi Hao, Marcos
Jose, , and Barbosa Leonardo. Defending internet of things against exploits. Revista IEEE
America Latina, 13(4):1112–1119, 2015.
[51] Bruno Morais Ferreira, Fernando Magno Quint ao Pereira, Hermann Rodrigues, and Bri-
taldo Silveira Soares-Filho. Optimizing a geomodeling domain specific langauge. In SBLP,
pages 87–101. Springer, 2012.
[52] Denzil Ferreira, Anind K. Dey, and Vassilis Kostakos. Understanding human-smartphone
concerns: A study of battery life. In Pervasive, pages 19–33, Berlin, Heidelberg, 2011.
Springer-Verlag.
41
[53] Mateus Tymburibá Ferreira, Rubens Emı́lio Alves Moreira, and Fernando Magno Quint ao
Pereira. Inference of peak density of indirect branches to detect rop attacks. In CGO, pages
150–159. ACM, 2016.
[54] Peter Greenhalgh. Big. little processing with arm cortex-a15 & cortex-a7. ARM White paper,
pages 1–8, 2011.
[55] Dominik Grewe and Michael FP O’Boyle. A static task partitioning approach for heteroge-
neous systems using opencl. In Compiler Construction, pages 286–305. Springer, 2011.
[56] Mary Hall, David Padua, and Keshav Pingali. Compiler research: The next 50 years. Com-
mun. ACM, 52(2):60–67, 2009.
[57] Julien Jaeger, Patrick Carribault, and Marc Pérache. Fine-grain data management directory
for openmp 4.0 and openacc. Concurrency and Computation: Practice and Experience, pages
1528–1539, 2015.
[58] Izabela Kareninna, Fernando Pereira, and Leonardo Barbosa. Detecção automática de vul-
nerabilidades em código protegido por canários. In SBSeg, pages 1–14. SBC, 2013.
[59] Jonathan K Lee, Jens Palsberg, and Fernando Magno Quint ao Pereira. Alias register allo-
cation for straight-line programs is np-complete. In ICALP, pages 680–691. Springer, 2007.
[60] Michael L. Littman, Anthony R. Cassandra, and Leslie Pack Kaelbling. Readings in agents.
In Michael N. Huhns and Munindar P. Singh, editors, International Conference on Machine
Learning (ICML), chapter Learning Policies for Partially Observable Environments: Scaling
Up, pages 495–503. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 1998.
[61] Yepang Liu, Chang Xu, and S. C. Cheung. Where has my battery gone? finding sensor
related energy black holes in smartphone applications. In PerCom, pages 2–10, Washington,
DC, USA, 2013. IEEE.
[62] Maroua Maleej, Vitor Paisante, Pedro Ramos, Laure Gonnord, and Fernando Magno Quint
ao Pereira. Pointer disambiguation via strict inequalities. In CGO, pages 134–147. ACM,
2017.
[63] Christos Margiolas and Michael F. P. O’Boyle. Portable and transparent software managed
scheduling on accelerators for fair resource sharing. In CGO, pages 82–93. ACM, 2016.
[64] Cor Meenderinck and Ben H. H. Juurlink. Nexus: Hardware support for task-based program-
ming. In DSD, pages 442–445. Springer, 2011.
[65] Leandro T. C. Melo, Rodrigo G. Ribeiro, Marcus R. de Araújo, and Fernando Magno Quintão
Pereira. Inference of static semantics for incomplete c programs. Proc. ACM Program. Lang.,
2(POPL):29:1–29:28, December 2017.
[66] Gleison Mendonça, Breno Guimarães, Péricles Alves, Márcio Pereira, Guido Araújo, and
Fernando Magno Quintão Pereira. Dawncc: Automatic annotation for data parallelism and
offloading. TACO, 14(2):13:1–13:25, 2017.
42
[67] Gleison Souza Diniz Mendonça, Breno Campos Ferreira Guimar aes, Péricles Rafael Oliveira
Alves, Márcio Machado Pereira, Guido Araújo, and Fernando Magno Quint ao Pereira. Au-
tomatic insertion of copy annotation in data-parallel programs. In SBAC, pages 34–41. IEEE,
2016.
[68] Teo Milanez, Sylvain Collange, Fernando Magno Quint ao Pereira, Wagner Meira Jr, and
Renato Ferreira. Thread scheduling and memory coalescing for dynamic vectorization of
spmd workloads. Parallel Computing, 40(9):548–558, 2014.
[69] Teo Milanez, Sylvain Collange, Fernando Magno Quintao Pereira, Wagner Meira Jr., and
Renato A. Ferreira. Data and instruction uniformity in minimal multi-threading. In SBAC-
PAD, pages 270–277. IEEE, 2012.
[70] Kézia Correa Andrade Moreira, Gleison Souza Diniz Mendonça, Breno Campos Ferreira Gui-
mar aes, and Fernando Magno Quint ao Pereira. Paralelização automatica de codigo com
diretivas openacc. In SBLP, pages 1–14. SBC, 2016.
[71] Rubens E A Moreira, Sylvain Collange, and Fernando Magno Quint ao Pereira. Function call
re-vectorization. In PPoPP, pages 313–326. ACM, 2017.
[72] Rubens Emilio Alves Moreira, Sylvain Collange, and Fernando Magno Quint ao Pereira.
Definição semântica de blocos everywhere para programação simd. In SBLP, pages 29–42.
SBC, 2016.
[73] Rubens Emı́lio Alves Moreira, Mateus Tymburibá, and Fernando Pereira. Riprop: A dynamic
detector of rop attacks. In CBSoft Tools, pages 9–16. SBC, 2015.
[74] Venkata K Nandivada, Fernando Magno Quint ao Pereira, and Jens Palsberg. A framework
for end-to-end verification and evaluation of register allocators. In SAS, pages 153–169.
Springer, 2007.
[75] Henrique Nazaré, Izabela Maffra, Willer Santos, Leonardo Barbosa, Laure Gonnord, and
Fernando Magno Quint ao Pereira. Validation of memory accesses through symbolic analyses.
In OOPSLA, pages 791–809. ACM, 2014.
[76] John Nickolls and William J Dally. The GPU computing era. Micro, IEEE, 30(2):56–69,
2010.
[77] Rajiv Nishtala, Paul M. Carpenter, Vinicius Petrucci, and Xavier Martorell. Hipster: Hybrid
task manager for latency-critical cloud workloads. In HPCA, pages 409–420. IEEE, 2017.
[78] Cedric Nugteren and Henk Corporaal. Bones: An automatic skeleton-based C-to-CUDA
compiler for GPUs. TACO, 11(4):35:1–35:25, 2014.
[79] Vitor Paisante, Zafra Felipe, Rodrigues E, Leonardo Oliveira, and Fernando Pereira. Pre-
venção de ataques em sistemas distribuı́dos via análise de intervalos. In SBSeg, pages 1–14.
SBC, 2013.
[80] Vitor Paisante, Maaroua Maleej, Laure Gonnord, Leonardo Barbosa, and Fernando
Magno Quint ao Pereira. Symbolic range analysis of pointers. In CGO, pages 171–181.
ACM, 2016.
43
[81] Vinicius Petrucci, Michael A Laurenzano, John Doherty, Yunqi Zhang, Daniel Mosse, Jason
Mars, and Lingjia Tang. Octopus-man: QoS-driven task management for heterogeneous
multicores in warehouse-scale computers. In HPCA, pages 246–258. IEEE, 2015.
[82] Guilherme Piccoli, Henrique Nazaré Santos, Raphael Ernani Rodrigues, Christiane Pousa,
Edson Borin, and Fernando Magno Quint ao Pereira. Compiler support for selective page
migration in numa architectures. In PACT, pages 369–380. IEEE, 2014.
[83] Gabriel Poesia, Breno Guimaraes, Fabricio Ferracioli, and Fernando Magno Quint ao Pereira.
Static placement of computation on heterogeneous devices. In OOPSLA, pages 1–18. ACM,
2017.
[84] Gabriel Silva Quadros and Fernando Magno Quint ao Pereira. Static detection of address
leaks. In SBSeg, pages 1–14. SBC, 2011.
[85] Francisco Barat Quesada. Digital signal processor, December 10 2015. US Patent App.
14/964,817.
[86] Pedro Henrique Ramos, Gleison Souza Diniz Mendonça, Guilherme Mendes Leobas, , , Divino
Cesar, Guido Araújo, and Fernando Magno Quint ao Pereira. Automatic identification and
annotation of tasks in structured programs. In PACT, page To Appear. IEEE, 2018.
[87] Rodrigo Geraldo Ribeiro, Leandro Terra Cunha Melo, Marcus Rodrigues de Araújo, and
Fernando Magno Quint ao Pereira. Compilação parcial de programas escritos em c. In SBLP,
pages 15–28. SBC, 2016.
[88] Andrei Rimsa, Marcelo d’Amorim, and Fernando Magno Quint ao Pereira. Efficient static
checker for tainted variable attacks. In SBLP, pages 16–30. SBC, 2010.
[89] Andrei Rimsa, Marcelo d’Amorim, and Fernando Magno Quint ao Pereira. Tainted flow
analysis on e-ssa-form programs. In CC, pages 122–141. Springer, 2011.
[90] Andrei Rimsa, Marcelo D’Amorim, Fernando Magno Quint ao Pereira, and Roberto Bigo-
nha. Efficient static checker for tainted variable attacks. Science of Computer Programming,
80(A):91–105, 2014.
[91] Rodrigo Caetano O Rocha, Luı́s Fabrı́cio Wanderley Góes, and Fernando Magno Quint ao
Pereira. An algebraic framework for parallelizing recurrence in functional programming. In
SBLP, pages 140–155. SBC, 2016.
[92] Bruno Rodrigues, Diego Aranha, and Fernando Magno Quint ao Pereira. Sparse represen-
tation of implicit flows with applications to side-channel detection. In CC, pages 110–120.
ACM, 2016.
[93] Raphael Rodrigues and Fernando Pereira. Prevenção automática de ataques de não-
terminação. In SBLP, pages 21–40. SBC, 2013.
[94] Raphael Ernani Rodrigues, Victor Hugo Sperle Campos, and Fernando Magno Quint ao
Pereira. A fast and low-overhead technique to secure programs again integer overflows. In
CGO, pages 29:1–29:11. ACM, 2013.
44
[95] Leili Salimian and Faramarz Safi. Survey of energy efficient data centers in cloud computing.
In UCC, pages 369–374, Washington, DC, USA, 2013. IEEE Computer Society.
[96] Diogo Sampaio, Rafael M Sousa, Sylvain Collange, and Fernando Magno Quint ao Pereira.
Divergence analysis. TOPLAS, 35(4):1–37, 2013.
[97] Diogo Nunes Sampaio, Elie Gedeon, Fernando Magno Quint ao Pereira, and Sylvain Collange.
Spill code placement for simd machines. In SBLP, pages 12–26. Springer, 2012.
[98] Henrique Santos, Fernando Pereira, and Leonardo Barbosa. Verificação estática de acessos a
arranjos em c. In SBSeg, pages 29–42. SBC, 2013.
[99] Bruno Silva, Diego Aranha, and Fernando Pereira. Uma técnica de análise estática para
detecção de canais laterais baseados em tempo. In SBSeg, pages 16–29. SBC, 2015.
[100] Bruno Silva, Fernando Pereira, and Leonardo Barbosa. Uma representação intermediária
para a detecção de vazamentos implı́citos de informação. In SBSeg, pages 15–28. SBC, 2013.
[101] Bruno Silva, Fernando Pereira, Leonardo Barbosa, and Antônio Loureiro. Flow tracker: Uma
ferramenta para detecção de vazamento de informações sigilosas. In CBSoft Tools, pages 8–15.
SBC, 2013.
[102] Bruno Silva, Leonardo Ribeiro, and Fernando Pereira. Flowtracker - detecção de código não
isócrono via análise estática de fluxo. In CBSoft Tools, pages 97–104. SBC, 2015.
[103] Marcos Yukio Siraichi, Vinı́cius Fernandes dos Santos, Sylvain Collange, and Fernando
Magno Quintao Pereira. Qubit allocation. In CGO, pages 113–125, New York, NY, USA,
2018. ACM.
[104] Rodrigo Sol, Fernando Magno Quint ao Pereira, and Mariza A S Bigonha. Removing overflow
tests via run-time partial evaluation. In SBLP, pages 1–15. SBC, 2010.
[105] Rodrigo Sol, Christophe Guillon, Fernando Magno Quint ao Pereira, and Mariza Bigonha.
Dynamic elimination of overflow tests in a trace compiler. In CC, pages 2–21. Springer, 2011.
[106] Richard S. Sutton and Andrew G. Barto. Introduction to Reinforcement Learning. MIT
Press, Cambridge, MA, USA, 1st edition, 1998.
[107] Andre Tavares, Quentin Colombet, Mariza Bigonha, Christophe Guillon, Fernando
Magno Quint ao Pereira, and Fabrice Rastello. Decoupled graph-coloring register alloca-
tion with hierarchical aliasing. In SCOPES, pages 1–10. ACM, 2011.
[108] André Luiz C Tavares, Fernando Magno Quint ao Pereira, Mariza Bigonha, and Roberto
Bigonha. Efficient ssi conversion. In SBLP, pages 31–45. SBC, 2010.
[109] André Luiz Camargos Tavares, Benoit Boissinot, Fernando Magno Quint ao Pereira, and
Fabrice Rastello. Parameterized construction of program representations for sparse dataflow
analyses. In CC, pages 18–39. Springer, 2014.
[110] Fernando Teixeira, Fernando Pereira, Gustavo Vieira, Pablo Marcondes, Hao Wong, José
Nogueira, and Leonardo Oliveira. Siot: Defendendo a internet das coisas contra exploits. In
SBRC, pages 1–15. SBC, 2014.
45
[111] Fernando A. Teixeira, Fernando M.Q. Pereira, Hao-Chi Wong, Jose M.S. Nogueira, and
Leonardo B. Oliveira. SIoT: Securing internet of things through distributed systems analysis.
Future Generation Computer Systems, 2017.
[112] Raja Vallée-Rai, Phong Co, Etienne Gagnon, Laurie Hendren, Patrick Lam, and Vijay Sun-
daresan. Soot - a java bytecode optimization framework. In CASCON, pages 13–. IBM Press,
1999.
[113] Sven Verdoolaege, Juan Carlos Juega, Albert Cohen, José Ignacio Gómez, Christian Tenllado,
and Francky Catthoor. Polyhedral parallel code generation for cuda. TACO, 9(4):54:1–54:23,
2013.
[114] Campos Victor, Alves Péricles, , and Pereira Fernando. Restritificação. In SBLP, pages 1–14.
SBC, 2015.
[116] Matheus Vilela and Fernando Pereira. Otimizações de código sensı́veis ao contexto de cha-
mada. In WTDSoft, pages 1–6. SBC, 2013.
[117] Christopher J. C. H. Watkins and Peter Dayan. Q-learning. Machine Learning, 8(3):279–292,
May 1992.
[118] Jingyu Yan. Intelligent Battery Management System for Electric Vehicles. PhD thesis, The
Chinese University of Hong Kong (People’s Republic of China), 2010. AAI3484737.
[119] Mohamed Zahran. Heterogeneous computing: Here to stay. Queue, 14(6):40:31–40:42, 2016.
46