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:
icc [ opcions ] fitxerFont.{c|C|cc|cpp|cxx|i}
ifort [ opcions ] fitxerFont.{f|for|ftn|f90|fpp}
gcc|g++ [ opcions ] fitxerFont.{c|C|cc|cxx|m|i|ii}
g77 [ opcions ] fitxerFont.{f|for|F|fpp}
Opcions de compilació
Les opcions més comunes són:
| Opción | Descripció |
| -o <fitxer> | Torna a anomenar l'eixida segons fitxer |
| -c | Compila sense invocar el linkador (genera només un .o) |
| -g | Introdueix informació simbòlica addicional en el codi per facilitar la depuració |
| -O | Activa l'optimització de l'executable |
| -I<directori> | Busca fitxers addicionals per incloure'ls en directori |
| -w | Elimina tots els missatges de tipus warning |
| -Wall | Imprimeix tots els missatges de tipus warning (excepte per a efc) |
| -v | Eixida en mode verbose, és a dir, el compilador aporta informació extra |
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ó |
| -O0 | Deshabilita totes les optimitzacions. És útil quan s'està desenvolupant i depurant codi |
| -O1 | Optimitza 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 |
| -O3 | Optimització 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