Based on: What a Compiler Does - Exercises by Charles Severance, Kevin Dowd
¿Su compilador reconoce el código muerto en el siguiente programa? ¿Cómo puede estar seguro? ¿Le envía el compilador algún aviso?
main()
{
int k=1;
if (k == 0)
printf ("Esta sentencia nunca se ejecuta.\n");
}
Compile el siguiente código, y ejecútelo bajo distintos niveles de optimización.
Trate de adivinar los distintos tipos de optimizaciones que se están realizando para mejorar el rendimiento, conforme se incrementa el nivel de optimización.
REAL*8 A(1000000)
DO I=1,1000000
A(I) = 3.1415927
ENDDO
DO I=1,1000000
A(I) = A(I) * SIN(A(I)) + COS(A(I)) ENDDO
PRINT *,"Terminado"
Tome el siguiente segmento de código y compílelo a varios niveles de optimización. Observe el código ensamblador generado (en algunos compiladores esto se hace con la opción -S) y encuentre los efectos de cada nivel de optimización sobre el lenguaje máquina. Mida el tiempo de ejecución del programa para ver el rendimiento a diferentes niveles de optimización. Si tiene acceso a múltiples arquitecturas, observe el código generado usando los mismos niveles de optimización sobre diferentes arquitecturas.
REAL*8 A(1000000)
COMMON/BLK/A
.... Llamada para medir el tiempo
DO I=1,1000000
A(I) = A(I) + 1.234
ENDDO
.... Llamada para medir el tiempo
END
¿Por qué es necesario poner el arreglo adentro de un bloque común?