Inicio / Wikis / Apuntes / Script para saber que flags usar - Script para saber que flags usar

Script para saber que flags usar - Script para saber que flags usar

Apuntes creado por Mononeurona.org. Extraido de: http://www.mononeurona.org/index.php?idp=424
05 de Noviembre de 2005

1 - Script para saber que flags usar

Como bien lo sabe la gente de Gentoo, una de las muchas ventajas de Linux es que permite compilar el código según nuestro procesador y asi mejoramos el rendimiento. Esto se hace indicándole los flags o banderas a GCC, el compilador de C.

Sin embargo, muchas veces no sabemos exactamente que banderas le corresponden a nuestro procesador. Pixelbeat ha escrito un BASH script que nos ayuda conocer los flags que corresponden.

El programa sólo funciona para Linux y para procesadores de 32 bits.

Descargar: gcccpuopt.txt

El código:

#!/bin/sh

# Author: pixelbeat

#This script is Linux specific
#It should work on any gcc >= 2.95 at least

#these apply to any arch (just here for reference)
unsafe_math_opts="-ffast-math -fno-math-errno -funsafe-math-optimizations -fno-trapping-math"

gcc_version=`gcc -dumpversion | sed 's/\([0-9]\{1,\}\.[0-9]\{1,\}\)\.*\([0-9]\{1,\}\)\{0,1\}/editor/'`

IFS=":"
while read name value; do
    unset IFS
    name=`echo $name`
    value=`echo $value`
    IFS=":"
    if [ "$name"
"vendor_id" ]; then
        vendor_id="$value"
    elif [ "$name"
"cpu family" ]; then
        cpu_family="$value"
    elif [ "$name"
"model" ]; then
        cpu_model="$value"
    elif [ "$name"
"flags" ]; then
        flags="$value"
    fi
done < /proc/cpuinfo
unset IFS
if [ "$vendor_id"
"AuthenticAMD" ]; then
    if [ "$cpu_family"
"4" ]; then
        _CFLAGS="$_CFLAGS -march=i486"
    elif [ "$cpu_family"
"5" ]; then
        if [ "$cpu_model" -lt "4" ]; then
            _CFLAGS="$_CFLAGS -march=pentium"
        elif [ "$cpu_model"
"6" ] || [ "$cpu_model"
"7" ]; then
            _CFLAGS="$_CFLAGS -march=k6"
        elif [ "$cpu_model"
"8" ] || [ "$cpu_model"
"12" ]; then
            if expr $gcc_version '>=' 3.1 >/dev/null; then
                _CFLAGS="$_CFLAGS -march=k6-2"
            else
                _CFLAGS="$_CFLAGS -march=k6"
            fi
        elif [ "$cpu_model"
"9" ] || [ "$cpu_model"
"13" ]; then
            if expr $gcc_version '>=' 3.1 >/dev/null; then
                _CFLAGS="$_CFLAGS -march=k6-3"
            else
                _CFLAGS="$_CFLAGS -march=k6"
            fi
        fi
    elif [ "$cpu_family"
"6" ]; then
        if [ "$cpu_model" -le "3" ]; then
            if expr $gcc_version '>=' 3. >/dev/null; then
                _CFLAGS="$_CFLAGS -march=athlon"
            else
                _CFLAGS="$_CFLAGS -march=k6"
            fi
        elif [ "$cpu_model"
"4" ]; then
            if expr $gcc_version '>=' 3.1 >/dev/null; then
                _CFLAGS="$_CFLAGS -march=athlon-tbird"
            elif expr $gcc_version '>=' 3. >/dev/null; then
                _CFLAGS="$_CFLAGS -march=athlon"
            else
                _CFLAGS="$_CFLAGS -march=k6"
            fi
        elif [ "$cpu_model" -ge "6" ]; then #athlon-{4,xp,mp}
            if expr $gcc_version '>=' 3.1 >/dev/null; then
                _CFLAGS="$_CFLAGS -march=athlon-xp"
            elif expr $gcc_version '>=' 3. >/dev/null; then
                _CFLAGS="$_CFLAGS -march=athlon"
            else
                _CFLAGS="$_CFLAGS -march=k6"
            fi
        fi
    fi
else #everything else "GenuineIntel"
    if [ "$cpu_family"
"3" ]; then
        _CFLAGS="$_CFLAGS -march=i386"
    elif [ "$cpu_family"
"4" ]; then
        _CFLAGS="$_CFLAGS -march=i486"
    elif [ "$cpu_family"
"5" ] && expr $gcc_version '<' 3.1 >/dev/null; then
        _CFLAGS="$_CFLAGS -march=pentium"
    elif [ "$cpu_family" -ge "6" ] && expr $gcc_version '<' 3.1 >/dev/null; then
        _CFLAGS="$_CFLAGS -march=pentiumpro"
    elif [ "$cpu_family"
"5" ]; then
        if [ "$cpu_model" != "4" ]; then
            _CFLAGS="$_CFLAGS -march=pentium"
        else
            _CFLAGS="$_CFLAGS -march=pentium-mmx" #No overlap with other vendors
        fi
    elif [ "$cpu_family"
"6" ]; then
        if echo "$flags" | grep -vq cmov; then #gcc incorrectly assumes i686 always has cmov
            _CFLAGS="$_CFLAGS -march=pentium -mcpu=pentiumpro" #VIA CPUs exhibit this
        else
            if [ "$cpu_model"
"0" ] || [ "$cpu_model"
"1" ]; then
                _CFLAGS="$_CFLAGS -march=pentiumpro"
            elif [ "$cpu_model" -ge "3" ] && [ "$cpu_model" -le "6" ]; then #4=TM5600 at least
                _CFLAGS="$_CFLAGS -march=pentium2"
            elif [ "$cpu_model" -ge "7" ] && [ "$cpu_model" -le "11" ]; then #9 invalid
                _CFLAGS="$_CFLAGS -march=pentium3"
            fi
        fi
    elif [ "$cpu_family"
"15" ]; then
        _CFLAGS="$_CFLAGS -march=pentium4"
    fi
fi
if expr $gcc_version '>=' 3.1 >/dev/null; then
    if echo "$flags" | grep -q sse2; then
        _CFLAGS="$_CFLAGS -mfpmath=sse -msse2"
    elif echo "$flags" | grep -q sse; then
        _CFLAGS="$_CFLAGS -mfpmath=sse -msse"
    fi
    if echo "$flags" | grep -q mmx; then
        _CFLAGS="$_CFLAGS -mmmx"
    fi
    if echo "$flags" | grep -q 3dnow; then
        _CFLAGS="$_CFLAGS -m3dnow"
    fi
fi

echo "$_CFLAGS"
Valora este capítulo:
Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.

Opina sobre este apuntes



* Valoración:
* Nombre:
* Correo electrónico:
* Título:
* Comentario:

Wikis relacionados con 'Script para saber que flags usar - Script para saber que flags usar'

Este documento describe cómo usar el sistema de spooling para impresoras de líneas que provee... Más »
En este documento se presenta la información acerca de la instalación, configuración, ejecución y mantenimiento... Más »
Existen numerosos formatos en que se pueden explotar las capacidades multimediales del WWW. Cada uno... Más »
El conocimiento en la organización es un conjunto colectivo de saber y saber hacer. Gestionarlo... Más »
El principal objetivo de este documento es lograr que el lector adquiera la capacidad de... Más »
Autor y licencia de 'Script para saber que flags usar - Script para saber que flags usar'
Mononeurona.org Extraído de: http://www.mononeurona.org/index.php?idp=424

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.
¿Estás seguro de que deseas eliminar este capítulo?