otimização
Otimização de Código
Preparação do Ambiente
●
Baixe o compilador gcc para MIPS em:
–
http://www.ecomp.poli.br/~lcsm/xgcc.zip
●
Extraia o conteúdo do arquivo
●
Abra uma janela de comandos
●
Adicione do diretorio do compilador na variável
PATH
–
path=;%path%
Utilização do compilador:
●
Linha de comando:
–
xgcc -S [-O0 -O1 -O2 -O3 -O4] arquivo.c
Onde:
●
●
●
-S: compila até a geração de código assembly (produz arquivo.s) -O0 não realiza otimizações
-O1 … -O4: Otimiza o código gerado com diferentes níveis de otimização.
Exercício
●
●
●
●
Utilize o compilador cruzado para compilar os seguintes programas em c.
Analise o código gerado em difentes níveis de otimização Compare o código gerado pelo produzido pelo implementação vista em sala.
Análise as otimizações feitas pelo compilador gcc Programa 1 int a,b,c; void f() { a = 5; b = 3; b = 4; c = a + b;
}
void g() { a = a + 1; b = 2 * b; c = a + b;
}
Programa 2 int a,b,c; void f() { if (a) { b = b + 1; else c = c + 1; a = b + c;
}
void g() { a = 0; if (a) b = 0; eles c = 0;
}
Programa 3: int a,b,c; void f() { while (a>0) { b = b + a;
}
void g() { a = 5; while (a>0) { b = b + a;
}
void h() { a = 5; b = 1; while (a>0) { b = b + a;
}
void i() { a = 5; while (a>0) { b = b + a; b = 8;
}
a = a – 1; }
a = a – 1; }
a = a – 1; }
a = a – 1; }
Programa 4: int a,b,c; int *p, *q,*r; void f() { a=1; b=2; c=a+b; } void g() { a=1; b=2; *p = 0; c=a+b; } void h() { *p=1; *q=2; *r = *p + *q; }
●
Entendam o código para compilar os apontadores (não é dificil) e o seu efeito no otimizador.
–
Parece que ao usar apontador o compilador ficou “com medo” de aplicar técnicas de otimização. Explique...