Buscar

Otimização de código - Compiladores - Exercícios

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Otimização de código - Compiladores
Exercícios
1. A otimização do código deve ser capaz de manter o mesmo resultado, ainda que
partes do código sejam eliminadas, substituídas ou modificadas.
Ainda assim, durante a otimização deverá ser mantido(a):
Você acertou!
B. O significado semântico.
O significado semântico não deverá ser alterado, já que o código deverá
cumprir o mesmo resultado. A sequência das instruções pode ser alterada a fim
de aproveitar melhor os registradores e outros motivos. As instruções utilizadas
nem   sempre   são   as   mais   adequadas.   Muitas   vezes   um   processador   pode
disponibilizar   instruções   específicas   para   um   tipo   de   problema   que   será
solucionado de maneira mais eficaz. Os registadores alocados não farão diferença
se o significado semântico e os resultados obtidos forem os mesmos e podem ser
alterados para reduzir a necessidade de carregamentos e armazenamentos em
memória. As expressões podem ser alteradas por diversos motivos: simplificação
do cálculo, aproveitamento de expressões comuns, uso de recursos específicos
em determinados processadores.
2. A otimização pode ser empregada em diferentes etapas da compilação, podendo
ser técnicas dependentes ou independentes de máquina.
Qual das técnicas abaixo é classificada como dependente de máquina?
Você acertou!
A. Otimização de pequena escala.
A otimização de pequena escala busca por pequenos trechos de código de
máquina que podem ser simplificados, sem se preocupar com o contexto
maior. Essa técnica requer o conhecimento dos recursos disponibilizados
pela máquina.
A eliminação de código morto é realizada diretamente sobre o código intermediário
e independe de máquina.
A movimentação de código analisa o código dentro de laços e blocos que são
frequentemente utilizados e independe de máquina.
A avaliação em tempo de compilação busca elementos ou expressões constantes
que  podem  ter   seu  valor   substituído  durante  a   compilação,   já   que  não  serão
alterados durante a execução, e independe de máquina.
A análise léxica é parte do processo de compilação, mas não consiste em uma
técnica de otimização.
3. Algumas técnicas de otimização de código podem simplificar trechos tão
pequenos de código como uma única expressão.
Qual a técnica de otimização de código utilizada no exemplo a seguir?
Código original:
x = a / 4;
Código otimizado:
x = a >> 2;
Você acertou!
D. Redução de força.
A expressão foi alterada substituindo o operador utilizado por um que facilitasse o
cálculo. Já que 4 é um múltiplo binário, pode-se efetuar uma divisão por esse valor
movimentando   todos   os bits da   variável a duas   casas   para   a   direita. Assim, a
técnica utilizada foi de redução de força.
4. Na propagação de variável, elementos comuns entre expressões podem ser
utilizados para eliminar trechos de código desnecessários ou reduzir expressões.
Utilizando a técnica de propagação de variável, assinale a alternativa que apresenta
a solução correta de otimização para o código a seguir:
a = b + c;
x = a;
d = x + e;
Você acertou!
C.  a = b + c;
     d = a + e;
A variável x recebe o valor de a após a expressão a = b + c. No momento em
que a expressão d = x + e é executada, o valor de x e a são os mesmos,
podendo substituir x nessa expressão pelo próprio valor de a. Por fim, x = a
pode ser eliminado por não ter mais serventia para o código.
Assim, d = b + c + e; não pode ser utilizado porque o valor de a consiste em um
valor diferente das demais variáveis e que pode ser utilizado em outra parte do
código, o que não acontecia com x que terá sempre o mesmo valor de a.
5. As técnicas de otimização dependentes de máquina lidam diretamente com o
código final, em que o código fonte já foi traduzido para um conjunto de instruções
compreensíveis por ela.
Dado o código a seguir, assinale a alternativa que apresenta uma simplificação
válida utilizando a técnica de alocação e atribuição de registradores, considerando
as variáveis x e y como necessárias no restante do código.
Considere as seguintes instruções:
LD: carrega um valor em um registrador
ST: armazena um valor em uma variável
DEC: decrementa um registrador
ADD x, y, z: efetua uma soma: x = y + z
SUB x, y, z: efetua uma subtração: x = y - z
LD R0, 5
ADD R0, R0, b
ST x, R0
LD R0, x
SUB R0, R0, c
ST y, R0
LD R0, y
DEC R0
ST y, R0
2 4 5 3 - * +
Resposta correta.
A. 
LD R0, 5
ADD R0, R0, b
ST x, R0
SUB R0, R0, c
DEC R0
ST y, R0
Não há necessidade de utilizar um segundo registrador (R1).
Se decrementar R0 sem armazenar antes o resultado de R0-c no próprio R0, o
resultado será diferente do original.
Ao aproveitar sempre o registrador R0, os armazenamentos e carregamentos de
R0   novamente   são   desnecessários   enquanto   a   conta   prossegue.
Ainda   assim,   o   armazenamento   (ST)   de   x   e   y,   como   descrito   no   código,   é
necessário, já que serão valores buscados no resto do programa.
Logo, pode-se evitar o uso de R1e das instruções de carregamento (LD), mas
não das instruções de armazenamento (ST).
Assim, a alternativa correta é:
LD R0, 5
ADD R0, R0, b
ST x, R0
SUB R0, R0, c
DEC R0
ST y, R0
	Otimização de código - Compiladores
	Exercícios

Outros materiais