Diferença chave - Otimização de código dependente de máquina vs. independente de máquina
Os programas de computador são conjuntos de instruções dadas ao hardware para executar tarefas. A maioria desses programas são escritos em linguagens de alto nível, e o computador não entende essa linguagem. Portanto, um compilador é usado para converter essas instruções em código de máquina ou código de destino. Ele passa por várias fases para construir o código de destino. A otimização do código é um deles. Existem duas técnicas de otimização, como otimização de código dependente da máquina e independente da máquina. A principal diferença entre a otimização de código dependente da máquina e a otimização independente da máquina é que a otimização dependente da máquina é aplicada ao código do objeto, enquanto a otimização do código independente da máquina é aplicada ao código intermediário.
CONTEÚDO
1. Visão geral e diferença principal
2. O que é otimização de código dependente de máquina
3. O que é otimização de código independente de máquina
4. Semelhanças entre otimização de código dependente de máquina e independente de máquina
5. Comparação lado a lado - Otimização de código dependente de máquina vs máquina independente em formato tabular
6. Resumo
O que é otimização de código dependente de máquina?
Ao converter o código-fonte em código-objeto ou código-alvo, o compilador passa por várias fases. Primeiro, o código-fonte é dado ao analisador Lexical que produz tokens. Em seguida, a saída é fornecida ao analisador de sintaxe, que investiga se os tokens gerados estão em ordem lógica. Essa saída é fornecida ao analisador semântico. Suponha que haja um trecho de código como p = q + r;
Aqui, p, q são inteiros, mas r é um float. Usando o analisador semântico, a variável inteira c é convertida em um float. Portanto, ele faz a análise semântica. A saída do analisador semântico vai para o gerador de código intermediário. Ele retorna um código intermediário que vai para o otimizador de código. A otimização de código é o processo de eliminar as instruções do programa não essenciais sem alterar o significado do código-fonte real. Não é uma otimização obrigatória, mas pode melhorar o tempo de execução do código-alvo. A saída do otimizador de código é fornecida ao gerador de código e, finalmente, o código-alvo é construído.
Figura 01: Fases do compilador
Na otimização de código dependente de máquina, a otimização é aplicada ao código-fonte. Alocar uma quantidade suficiente de recursos pode melhorar a execução do programa nesta otimização.
O que é otimização de código independente de máquina?
Quando a otimização é feita no código intermediário, ela é chamada de otimização de código independente da máquina. Existem diferentes técnicas para alcançar a otimização de código independente de máquina. Eles são descritos usando os exemplos a seguir.
Leia as linhas de código abaixo.
para (j = 0; j <10; j ++) {
b = x + 2;
a [j] = 5 * j;
}
De acordo com o código acima, b = x + 2 é calculado repetidamente em cada iteração. Depois que b é calculado, ele não muda. Portanto, esta linha pode ser colocada fora do loop da seguinte maneira.
b = x + 2;
para (j = 0; j <10; j ++)
{a [j] = 5 * j;
}
Isso é chamado de movimento do código.
Leia as linhas de código abaixo.
j = 5;
if (j == 10) {
a = b + 20;
}
De acordo com o código acima, 'if block' nunca será executado porque o valor j nunca será igual a 10. Ele já foi inicializado com o valor 5. Portanto, este bloco if pode ser removido. Essa técnica é a eliminação de código morto.
Outro método é a redução da força. Operações aritméticas como multiplicação requerem mais memória, tempo e ciclos de CPU. Essas expressões caras podem ser substituídas por expressões baratas como b = a * 2; ou pode ser substituído por adição, b = a + a;
Consulte o código abaixo.
para (j = 1; j <= 5; j ++) {
valor = j * 5;
}
Em vez da multiplicação, o código pode ser alterado da seguinte maneira.
int temp = 5;
para (j = 1; j <= 5; j ++) {
temp = temp + 5;
valor = temp;
}
É possível avaliar as expressões que são constantes em tempo de execução. É chamado de dobramento constante. Pode ser declarado como b [j + 1] = c [j + 1];
Em vez disso, ele pode ser alterado da seguinte maneira.
n = j +1;
b [n] = c [n];
Pode haver loops da seguinte forma.
para (j = 0; j <5; j ++) {
printf (“a / n”);
}
para (j = 0; j <5; j ++) {
printf (“b / n”);
}
Imprimindo a e b, ambos têm o mesmo número de iterações. Ambos podem ser combinados em um loop for da seguinte maneira.
para (j = 0; j <5; j ++) {
printf (“a / n”);
printf (“b / n”);
}
Outra técnica importante é a eliminação da subexpressão comum. É substituir as expressões idênticas por uma única variável para fazer o cálculo. Consulte o código abaixo.
a = b * c + k;
d = b * c + m;
Este código pode ser convertido da seguinte maneira.
temp = b * c;
a = temp + k;
d = temp + m;
Não é necessário calcular b * c repetidamente. O valor multiplicado pode ser armazenado em uma variável e reutilizado.
Qual é a semelhança entre a otimização de código dependente de máquina e independente de máquina?
Ambos pertencem ao código de otimização
Qual é a diferença entre otimização de código dependente de máquina e independente de máquina?
Artigo Diff meio antes da tabela
Otimização de código dependente de máquina versus independente de máquina |
|
A otimização do código dependente da máquina é aplicada ao código-objeto. | A otimização de código independente de máquina é aplicada ao código intermediário. |
Envolvimento com Hardware | |
A otimização dependente da máquina envolve registros de CPU e referências de memória absolutas. | A otimização de código independente de máquina não envolve registros de CPU ou referências de memória absolutas. |
Resumo - Otimização de código dependente de máquina vs. independente de máquina
A otimização de código consiste em duas técnicas de otimização, a saber, otimização de código dependente e independente da máquina. A diferença entre a otimização de código dependente da máquina e a otimização independente da máquina é que a otimização dependente da máquina é aplicada ao código do objeto, enquanto a otimização do código independente da máquina é aplicada ao código intermediário.
Baixe a versão em PDF de Otimização de Código Dependente de Máquina vs. Independente de Máquina
Você pode baixar a versão PDF deste artigo e usá-la para fins off-line de acordo com a nota de citação. Faça o download da versão em PDF aqui. Diferença entre otimização de código dependente de máquina e independente de máquina