Publicado el Miércoles 17 de Enero del 2007 @ 5:06 por Armonth.
Está entrada ha sido motivada por lo escrito en la anterior.
Cuando un programador escribe un programa lo hace en un lenguaje de programación de tal forma que él lo entienda parecido: un lenguaje parecido a los lenguajes humanos que existen aunque algunos podrían saltar con el chiste de Perl y el cifrado RSA pero lo dejaremos correr.
La acción de compilarlo consiste en convertir el código fuente en código máquina (ceros y unos) para el ordenador: un binario.
Al compilar puedes hacer que el binario se aproveche de ciertas instrucciones que incorpora la CPU, por ejemplo puedes hacer que un reproductor/codec de vídeo aproveche las instrucciones MTRR (disponibles en cualquier CPU de arquitectura x86 superior — y incluyendo — el Pentium Pro) para mejorar hasta por 2 veces y media el procesado de gráficos. Un mismo ordenador, con la misma CPU pero con esta instrucción puede mostrar hasta 2.5 veces más gráficos.
Cada instrucción puede servir para distintas cosas (las MTRR mejoran la velocidad con gráficos, ACPID la gestión de energía, HT el procesamiento paralelo y un buen etcétera, esto a grandes rasgos) pero si creas un binario que utiliza un juego de instrucciones no soportado por la CPU simplemente no se ejecutara.
Es por eso que en GNU/Linux algunas distribuciones como Debian tienen todos sus paquetes precompilados para un juego de instrucciones simple o lo que se suele decir “i386″ (CPU 386 o superior). Si mal no recuerdo:
Luego, los AMD entran también en esa definición pero dentro de sus equivalentes, por ejemplo un AMD K-2 entraría dentro de un i586.
Si generas un binario pensado para i386 no aprovechara — en principio ya que siempre puede hacer comprobaciones en tiempo de ejecución — instrucciones propias de CPUs más modernas pero se ejecutara sin fallar en todas ellas.
Si generas un binario para i586, aprovechará las instrucciones de la CPU más simple de las que hay en esa categoría, funcionara en CPU’s i686 pero no en anteriores…
Es por ello que Debian y algunas distribuciones en su afán de soportar el máximo de equipos posibles precompilan sus paquetes para i486.
Si se quiere más rendimiento y sacar el máximo rendimiento, el siguiente paso trata por compilar los programas: aquí entran muchos factores que pueden desaconsejar la práctica:
ls puede servir para ganar 0.000001seg lo cual no merece el esfuerzo.Con todo lo dicho, Switfox (ver entrada anterior) puede ser interesante (Firefox es uno de los programas que suele ser útil compilar) aunque lo malo es que luego quieres compilar el núcleo, el KDE/Gnome, el OpenOffice… y al final si lo que quieres es máximo rendimiento y compilarlo todo te sale más a cuenta usar como distribución Gentoo o Slackware.
Nomas una aclaración
El i586 no son procesadores Intel Pentium o superiores hasta el PIII, es solamente el juego de instrucciones del pentium, y el i686 es el juego de instrucciones del pentium pro en adelante, pentium pro, pentium 2, etc,
http://en.wikipedia.org/wiki/I686
saludos.