Diferença Entre Otimização De Código Dependente De Máquina E Independente De Máquina

Índice:

Diferença Entre Otimização De Código Dependente De Máquina E Independente De Máquina
Diferença Entre Otimização De Código Dependente De Máquina E Independente De Máquina

Vídeo: Diferença Entre Otimização De Código Dependente De Máquina E Independente De Máquina

Vídeo: Diferença Entre Otimização De Código Dependente De Máquina E Independente De Máquina
Vídeo: Compiladores - 13 - Otimização de Código 2024, Pode
Anonim

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.

Diferença entre otimização de código dependente de máquina e independente de máquina
Diferença entre otimização de código dependente de máquina e independente de máquina

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

Recomendado: