Manualinux
http://www.nvu.com http://www.gimp.org InicioPresentaciónActualizacionesManualesDescargasNoticiasAgradecimientoEnlaces

Entornos GráficosAplicaciones

DesarrolloEmuladoresInternetJuegosMultimediaSistema

Compiladores Caché - CcacheEditores de Código - SciTE

Compiladores Caché - F90cache




Compiladores Caché - F90cache




Copyright

Copyright © José Luis Lara Carrascal  2012-2014   http://manualinux.eu



Sumario

Introducción
Instalación
Configuración
Enlaces



 
Introducción

F90cache es la versión para Fortran del compilador caché, Ccache. Al igual que este último, puede llegar a acelerar hasta 10 veces la recompilación (esto implica también una instalación de versiones futuras del programa cacheado) de cualquier programa cuyo código fuente esté escrito en Fortran. Soporta versiones superiores de GNU Gfortran, a la 4.3, además de otra serie de compiladores de otros desarrolladores o fabricantes de software.

En este manual trataremos su instalación desde código fuente y su configuración para que todos los procesos de compilación de código escrito en Fortran, que llevemos a cabo en nuestro sistema sean cacheados por F90cache.



Instalación

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado F90cache para la elaboración de este documento.

* GCC - (4.9.0) o Clang - (3.4)
* Make - (4.0)
* Automake - (1.14.1)
* Autoconf - (2.69)



Descarga

f90cache-0.95.tar.bz2

Optimizaciones

$ export {CFLAGS,CXXFLAGS}='-O3 -march=amdfam10 -mtune=amdfam10'

Donde pone amdfam10 se indica el procesador respectivo de cada sistema seleccionándolo de la siguiente tabla:
Nota informativa sobre las optimizaciones para GCC
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado. 

* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.

* En versiones de GCC 3.2.x e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
Nota informativa sobre las optimizaciones para Clang
* La opción '-mtune=' está soportada a partir de la versión 3.4 de Clang.

* Los valores de color azul no son compatibles con Clang.

* Las filas con el fondo de color amarillo son valores exclusivos de Clang, y por lo tanto, no son aplicables con GCC.
Valores CPU
generic Produce un código binario optimizado para la mayor parte de procesadores existentes. Utilizar este valor si no sabemos el nombre del procesador que tenemos en nuestro equipo. Este valor sólo es aplicable en la opción '-mtune=', si utilizamos GCC. Esta opción está disponible a partir de GCC 4.2.x.
intel Intel Haswell y Silvermont. Este valor sólo es aplicable en la opción '-mtune='. Esta opción está disponible a partir de GCC 4.9.x.
i386 Intel i386.
i486 Intel i486.
i586, pentium Intel Pentium sin soporte de instrucciones MMX.
pentium-mmx Intel PentiumMMX basado en Pentium con soporte de instrucciones MMX.
pentiumpro Intel PentiumPro.
i686 Produce un código binario optimizado para la mayor parte de procesadores compatibles con la serie 80686 de Intel. Todos los actuales lo son.
pentium2 Intel Pentium2 basado en PentiumPro con soporte de instrucciones MMX.
pentium3, pentium3m Intel Pentium3 basado en PentiumPro con soporte de instrucciones MMX y SSE.
pentium-m Versión de bajo consumo de Intel Pentium3 con soporte de instrucciones MMX, SSE y SSE2. Utilizado por los portátiles Centrino.
pentium4, pentium4m Intel Pentium4 con soporte de instrucciones MMX, SSE y SSE2.
x86-64 Procesadores AMD y compatibles con soporte de instrucciones x86-64, SSE2 y extensiones 64-bit.
yonah Procesadores basados en la microarquitectura de Pentium M, con soporte de instrucciones MMX, SSE, SSE2 y SSE3.
prescott Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2 y SSE3.
nocona Versión mejorada de Intel Pentium4 con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2 y SSE3.
core2 Intel Core2 con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3 y SSSE3. Esta opción está disponible a partir de GCC 4.3.x.
nehalem Intel Nehalem con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
westmere Intel Westmere con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
sandybridge Intel Sandy Bridge con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
ivybridge Intel Ivy Bridge con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND, F16C y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
haswell Intel Haswell con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
broadwell Intel Broadwell con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
bonnell Intel Bonnell con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3 y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
silvermont Intel Silvermont con soporte de instrucciones MOVBE, MMX, SSE, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMU, RDRND y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
penryn Intel Penryn con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y SSE4.1.
corei7 Intel Core i7 con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 y SSE4.2. Soporta también los procesadores Intel Core i3 e i5. Esta opción está disponible desde GCC 4.6.x, hasta GCC 4.8.x.
corei7-avx Intel Core i7 con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES y PCLMUL. Soporta también los procesadores Intel Core i3 e i5. Esta opción está disponible desde GCC 4.6.x, hasta GCC 4.8.x.
core-avx-i Intel Core (ivyBridge) con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND y F16C. Esta opción está disponible desde GCC 4.6.x, hasta GCC 4.8.x.
core-avx2 Intel Core (Haswell). Esta opción está disponible desde GCC 4.6.x, hasta GCC 4.8.x.
atom Intel Atom con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3 y SSSE3. Esta opción está disponible desde GCC 4.6.x, hasta GCC 4.8.x.
slm Procesadores basados en la microarquitectura de procesador Silvermont de Intel. Esta opción está disponible a partir de Clang 3.4.
knl Procesadores basados en la microarquitectura de procesador Haswell de Intel. Esta opción está disponible a partir de Clang 3.4.
k6 AMD K6 con soporte de instrucciones MMX.
k6-2, k6-3 Versiones mejoradas de AMD K6 con soporte de instrucciones MMX y 3DNow!.
athlon, athlon-tbird AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y SSE prefetch.
athlon4, athlon-xp, athlon-mp Versiones mejoradas de AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y full SSE.
k8, opteron, athlon64, athlon-fx Procesadores basados en AMD K8 core con soporte de instrucciones x86-64 (MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! y extensiones 64-bit).
k8-sse3, opteron-sse3, athlon64-sse3 Versiones mejoradas de AMD K8 core con soporte de instrucciones SSE3. Esta opción está disponible a partir de GCC 4.3.x.
amdfam10, barcelona Procesadores basados en AMD Family 10h core con soporte de instrucciones x86-64 (MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.3.x.
btver1 Procesadores basados en AMD Family 14h core con soporte de instrucciones x86-64 (MMX, SSE, SSE2, SSE3, SSE4A, CX16, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.6.x.
btver2 Procesadores basados en AMD Family 16h core con soporte de instrucciones x86-64 (MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.8.x.
bdver1 Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.7.x.
bdver2 Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (BMI, TBM, F16C, FMA, LWP, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.7.x.
bdver3 Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.8.x, y Clang 3.4.
bdver4 Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.9.x.
winchip-c6 IDT Winchip C6, que equivale a un i486 con soporte de instrucciones MMX.
winchip2 IDT Winchip2, que equivale a un i486 con soporte de instrucciones MMX y 3DNow!.
c3 Via C3 con soporte de instrucciones MMX y 3DNow!.
c3-2 Via C3-2 con soporte de instrucciones MMX y SSE.
geode AMD integrado con soporte de instrucciones MMX y 3DNow!. Esta opción está disponible a partir de GCC 4.3.x.
native Produce un código binario optimizado para el procesador que tengamos en nuestro sistema, siendo éste detectado utilizando la instrucción cpuid. Procesadores antiguos pueden no ser detectados utilizando este valor. Esta opción está disponible a partir de GCC 4.2.x.

Extracción y Configuración  Bloc de Notas

$ tar jxvf f90cache-0.95.tar.bz2
$ cd f90cache-0.95
$ export CC=clang CXX=clang++
$ ./configure --prefix=/usr

Explicación de los comandos

export CC=clang CXX=clang++ : Si vamos a compilar el paquete con Clang, establecemos la correspondiente variable de entorno.
--prefix=/usr : Instala F90cache en el directorio principal /usr.

Compilación

$ make

Instalación como root

$ su 
# make install
# ln -s /usr/bin/f90cache /bin/gfortran

Con la creación del enlace simbólico lo que hacemos es que F90cache gestione todas las compilaciones de código Fortran que vayamos a realizar en nuestro sistema, utilizamos el directorio /bin, porque éste siempre aparece por delante del directorio /usr/bin en la configuración del PATH en los sistemas GNU/Linux, directorio éste último, que es el habitual de ubicación del ejecutable de la versión de Gfortran que tengamos en nuestro sistema.

Para comprobar que estamos utilizando este enlace simbólico, nada mejor que utilizar el programa which, que se encarga de buscar el binario que le indiquemos previamente. Por último recordar que la ejecución de F90cache es completamente transparente en los procesos de compilación, es decir, no vamos a notar que se está ejecutando cuando compilemos un programa, la única manera de saberlo es comprobar con cualquier administrador de archivos que el directorio de la caché, tiene actividad.

[jose@localhost ~]$ which gfortran
/bin/gfortran

Desde la versión 0.95 de F90cache, tenemos que crear un enlace simbólico con el sufijo de la serie de GCC que tengamos como principal del sistema, ya que F90cache no acepta el nombre gfortran, para poder trabajar con el mismo. Un ejemplo personal:

$ su 
# ln -s /opt/gcc-4.9.0/bin/gfortran /usr/bin/gfortran-4.9

Otro ejemplo con Slackware 14.1:

$ su 
# ln -s gfortran-gcc-4.8.2 /usr/bin/gfortran-4.8

Desinstalación como root

1) MODO TRADICIONAL

Este programa no tiene soporte para desinstalación con el comando 'make uninstall'

2) MODO MANUALINUX

El principal inconveniente del comando anterior es que tenemos que tener el directorio de compilación en nuestro sistema para poder desinstalar el programa. En algunos casos esto supone muchos megas de espacio en disco. Con el paquete de scripts que pongo a continuación logramos evitar el único inconveniente que tiene la compilación de programas, y es el tema de la desinstalación de los mismos sin la necesidad de tener obligatoriamente una copia de las fuentes compiladas.

f90cache-0.95-scripts.tar.gz

$ su 
# tar zxvf f90cache-0.95-scripts.tar.gz
# cd f90cache-0.95-scripts
# ./Desinstalar_f90cache-0.95

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los binarios compilados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su 
# tar zxvf f90cache-0.95-scripts.tar.gz
# cd f90cache-0.95-scripts
# ./Respaldar_f90cache-0.95

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su 
# cd /var/copibin/restaurar_copias
# ./Restaurar_f90cache-0.95



Configuración de F90cache  

1) El directorio por defecto de ubicación de la caché

~/.f90cache

Tanto en nuestro directorio personal, como en el directorio del root, el tamaño máximo definido por defecto de la caché es de 1 GB, tamaño que podemos modificar desde la línea de comandos, con el siguiente comando, un ejemplo estableciéndola en 500 MB.

[jose@localhost ~]$ f90cache -M 500M
Set cache size limit to 512000k

También podemos utilizar G (para GB) y K (para KB), otro ejemplo, esta vez la pongo en 2 GB.

[jose@localhost ~]$ f90cache -M 2G
Set cache size limit to 2097152k

2) Limpiar la caché

 Para ajustar el tamaño de la caché al máximo establecido en su configuración, ejecutamos el siguiente comando, aunque esto no es necesario hacerlo ya que el programa lo hace de forma automática.

$ f90cache -c

Para borrarla por completo, el siguiente,

$ f90cache -C

3) Estadísticas de uso

Como cualquier aplicación caché que se precie, F90cache también nos muestra estadísticas de uso, con el siguiente comando,

$ f90cache -s

Y yo en estos momentos las tengo así,

[jose@localhost .f90cache]$ f90cache -s
cache directory                     /home/jose/.f90cache
cache hit                             10
cache miss                          1014
called for link                       74
no input file                        117
files in cache                       392
cache size                           788 Kbytes
max cache size                    1024.0 Mbytes

Lo único que nos debe de interesar de todo esto, son los dos últimos datos, cache size, que nos indica el espacio que está ocupando en estos momentos, y max cache size, que nos indica el tamaño máximo que tenemos configurado. Para poner a cero las estadísticas, ejecutamos el siguiente comando,

$ f90cache -z

La función de cambio de compilador mediante el uso de la variable de entorno FF90CACHE_FC, produce errores en mi sistema, por lo que no la incluyo en este manual. Ejecutar man f90cache para más información sobre este apartado.



Enlaces


http://people.irisa.fr/Edouard.Canot/f90cache/ >> La web de F90cache.


Foro Galería Blog


Actualizado el 23-04-2014

Compiladores Caché - F90cache

Compiladores Caché - CcacheEditores de Código - SciTE