Accedir a la pàgina principal de la UniversitatbarritaServei d'Informatica de la Universitat de Valencia
[<] Servidors de Càlcul de la UV

Compilació de programes

Encara que totes dues màquines disposen dels mateixos compiladors, el d'Intel i el de GNU (GNU Compiler Collection), l'arquitectura dels processadors és diferent i incompatible, per la qual cosa és necessari compilar les aplicacions per a cada sistema. D'aquesta manera, el binari obtingut estarà optimitzat per a executar-se en un processador donat. A més, és possible optimitzar el binari que es produirà per millorar la seua velocitat d'execució mitjançant l'ús de diferents opcions de compilació. Això no obstant, saber quina opció és la més adequada en cada cas (en cada programa) no és senzill. En funció dels algoritmes que implemente cada codi, aconseguirem un nivell d'optimització diferent emprant les mateixes opcions de compilació. A continuació exposem les possibles opcions que ofereixen els compiladors instal.lats en el sistema, posant èmfasi en els compiladors d'Intel, que són els més adequats a l'hora de compilar programes en els nostres sistemes de càlcul.

Execució del compilador

Per compilar un programa s'utilitzen les línies de comandaments:

  • Compiladors d'Intel
    • Per a C/C++:
      icc [ opcions ] fitxerFont.{c|C|cc|cpp|cxx|i}
    • Per a Fortran:
      ifort [ opcions ] fitxerFont.{f|for|ftn|f90|fpp}
  • Compiladors GNU
    • Per a C/C++:
      gcc|g++ [ opcions ] fitxerFont.{c|C|cc|cxx|m|i|ii}
    • Per a Fortran:
      g77 [ opcions ] fitxerFont.{f|for|F|fpp}

Opcions de compilació

  • Opcions comunes

Les opcions més comunes són:

OpciónDescripció
-o <fitxer>Torna a anomenar l'eixida segons fitxer
-cCompila sense invocar el linkador (genera només un .o)
-gIntrodueix informació simbòlica addicional en el codi per facilitar la depuració
-OActiva l'optimització de l'executable
-I<directori>Busca fitxers addicionals per incloure'ls en directori
-wElimina tots els missatges de tipus warning
-WallImprimeix tots els missatges de tipus warning (excepte per a efc)
-vEixida en mode verbose, és a dir, el compilador aporta informació extra
  • Específiques d'Intel

Les opcions o flags específiques que més sovint s'utilitzen en invocar els compiladors Intel són els següents:

Bàsics

OpcióDescripció
-O0Deshabilita totes les optimitzacions. És útil quan s'està desenvolupant i depurant codi
-O1Optimitza en espai. Omet les optimitzacions que augmenten de grandària sense millorar de manera apreciable de rendiment
[-O[2]]Optimitza en velocitat. És el nivell d'optimització per defecte. Millora de manera apreciable el rendiment a costa de la grandària de l'executable
-O3Optimització agressiva en velocitat. Inclou les optimitzacions introduïdes amb -O2 més unes altres de nivell més alt.

Intermedis

OpcióDescripció
-fno-alias Assumeix que NO hi ha aliàsing en el programa, és a dir, el programador assegura que MAI dos identificadors diferents (punters) es refereixen a la mateixa posició de memòria. L'ús d'aquest sol traduir-se en un increment del rendiment
-falias Assumeix que hi ha aliàsing en el programa (PER DEFECTE)
-fno-fnalias Assumeix que NO hi ha aliàsing dins de les funcions
-ffnalias Assumeix que hi ha aliàsing dins de les funcions (PER DEFECTE)

Avançats

OpcióDescripció
Coma flotant i precisió numèrica
-mp Manté la precisió numèrica i deshabilita aquelles optimitzacions que puguen afectar-hi
-mp1 Millora la precisió numèrica, però no tant com -mp, per la qual cosa tampoc no afecta tant el rendiment
-IPF_fltacc[-] Activa[Desactiva] les optimitzacions que afecten la precisió en coma flotant
-IPF_fma[-] Activa[Desactiva] les operacions de coma flotant combinació de multiplicació i suma/resta
-IPF_flt_eval_method0 Els operands de coma flotant s'avaluen a la precisió indicada pel programa
-IPF_fp_speculation (fast/safe/off) Activa l'especulació sobre operacions de coma flotant segons la condició indicada
Optimitzacions interprocedurals (IP)
-ip Activa optimitzacions interprocedurals (IP) dins d'un mateix fitxer
-ipo Activa optimitzacions interprocedurals (IP) entre diversos fitxers
-ip_no_inlining Deshabilita la inserció ("inlining") interprocedural (requereix alguna optimització IP activada)
Optimització basada en "profiling"
-prof_gen Activa la generació d'informació que puga emprar l'eina d'optimització basada en "profiling"
-prof_use Activa l'ús de la informació per l'eina d'optimització basada en "profiling"
Informe d'optimització
-opt_report Genera un informe d'optimització (s'envia a l'eixida d'error, stderr)
-opt_report_file <fitxer> Especifica un fitxer per a l'informe d'optimització
-opt_report_level (min/med/max) Especifica el nivell de detall de l'informe d'optimització
Altres indicadors d'optimització interessants
-ftz Fixa els resultats desnormalitzats ("underflows") a zero. N'evita la captura (trap), amb la qual cosa n'augmenta el rendiment (activat automàticament per l'indicador -O3)
-ansi_alias[-] Activa(PER DEFECTE)[Desactiva] el compliment del programa compilat i de les optimitzacions dels estàndards ANSI corresponents
-nolib_inline Deshabilita l'expansió en línia de funcions intrínseques
-unroll0 Deshabilita desenvolupament de bucles

Eines per a portabilitat

OpcióDescripció
Fortran
-safe_cray_ptr Assumeix que els punters tipus Cray no presenten aliàsing
-posixlib Enllaça amb la llibreria POSIX (funcions IEEE POSIX FORTRAN-77)
-Vaxlib Enllaça amb la llibreria de funcions de portabilitat (Vax) no estàndard en Fortran
-vms Activa extensions per a instruccions VMS i DEC
-zero Inicialitza implícitament totes les variables a zero
-i2 Representació interna d'enters a 2 bytes (KIND d'enters serà 2)
-i4 Representació interna d'enters a 4 bytes (KIND d'enters serà 4)
-i8 Representació interna d'enters a 8 bytes (KIND d'enters serà 8)
-r8 Representació interna de reals i complexos a 8 bytes
-r16 Representació interna de reals i complexos a 16 bytes
C/C++
-size_lp64 Assumeix una grandària de 64 bits per a "long" i punters
-[no]restrict Activa[Desactiva] la paraula clau "restrict" per a punters no ambigus
-Xa Selecciona el dialecte ANSI extés
-Xc, ansi Selecciona el dialecte ANSO estricte
-c99[-] Activa(PER DEFECTE)[Desactiva] el suport de l'estàndard ANSI C99

[<] Tornar
Acudeix al CAU per sol·licitar més informació      Última modificació 11 desembre 2008 10:31      wiki| traça| editar