Ifort
From MohidWiki
Ifort is the intel fortran compiler. Intel bought and continued the former compaq Fortran, which in turn was originally known as DEC Fortran and used in VAX machines.
Contents
Installing
Windows
*nix
In order to install Ifort für *nix, you need to do the following steps:
- get the correct Ifort sources from [1] (registration required)
- make sure, the required libraries are installed: g++ libstdc++5 zlib1g-bin zlib1g-dev libc6 (Note: the names may differ depending on your distribution. The names above apply to Debian Sid)
- compile the Ifort sources: un-tar the sources and execute the installation script. With Debian, you need to manually convert the rpms (see below).
- integrate the compiler into your working environment:
- Symlink the installation version, to avoid having to edit all the config files again, once you install a new compiler version.
- Add the source lines to your bashrc (see below).
Debian specific installation notes: With Debian (Sid), the shipped install.sh script from the Ifort sources does not work [2],[3]. You need to execute the following commands as root (VERSION is the version number):
aptitude install alien tar xzvf l_fc_p_VERSION.tar.gz cd l_fc_VERSION/data/ alien intel-ifortVERSION-VERSION-1.i386.rpm alien intel-iidbVERSION-VERSION-1.i386.rpm dpkg -i --force-overwrite *.deb
Note: The resources below mention the additional command ./install.sh -finalize-only, executed in the source folder. This parameter belongs to versions < 10 and is not supported by the install.sh script any more.
Now, replace every occurance of <INSTALLDIR> in the newly created files with the path to the Ifort installation. The files to edit are:
/opt/intel/fc/VERSION/bin/ifort /opt/intel/fc/VERSION/bin/ifort.cfg /opt/intel/fc/VERSION/bin/ifc /opt/intel/fc/VERSION/bin/ifc.cfg /opt/intel/fc/VERSION/bin/ifortvars.csh /opt/intel/fc/VERSION/bin/ifortvars.sh /opt/intel/idb/VERSION/bin/idbvars.csh /opt/intel/idb/VERSION/bin/idbvars.sh
You can check if there are other files with the following command:
grep -r INSTALLDIR /opt/intel/
Links and source lines: The path to the compiler executables includes the version. Hard coding it has the disadvantage that you need to edit every file, once you install a new version. Therefore, link the current compiler version to current and add the virtual link in all of your path lines:
cd /opt/intel/fc/ ln -s ./VERSION current cd ../idb/ ln -s ./VERSION current
Add the following lines to your .bashrc, or use the global /etc/bashrc (Debian: /etc/bash.bashrc):
source /opt/intel/fc/current/bin/ifortvars.sh source /opt/intel/idb/current/bin/idbvars.sh
Tools for linking
dumpbin
For example, here's an extract of the external references of ftest.obj after compiling with ifort:
ifort /c /nologo /Zi /Od ftest.for dumpbin /SYMBOLS ftest.obj
094 00000000 UNDEF notype () External | _NCDREN@20 095 00000000 UNDEF notype () External | _NCVID@16 096 00000000 UNDEF notype () External | _NCVREN@20 097 00000000 UNDEF notype () External | _NCAREN@28 098 00000000 UNDEF notype () External | _NCVDEF@28 099 00000000 UNDEF notype () External | _NCVGT@24 09A 00000000 UNDEF notype () External | _NCVGTC@32 09B 00000000 UNDEF notype () External | _NCVGT1@20 09C 00000000 UNDEF notype () External | _NCVG1C@24 09D 00000000 UNDEF notype () External | _NCVPT@24 09E 00000000 UNDEF notype () External | _NCVPTC@32 09F 00000000 UNDEF notype () External | _NCVPT1@20 0A0 00000000 UNDEF notype () External | _NCVP1C@24
Troubleshoots
Windows
- Q: I get this error. What should I do?
Fatal error cannot open "ifconsol" ifort: error: problem during multi-file optimization compilation (code 1)
A: This error happens because some environment variables need to be declared. To solve this simply open from the intel fortran folder in your Start->Programs the Build Environment for applications and run make from there.
*nix
Help screen
Here's the help screen for windows:
ifort /?
Intel(R) Fortran Compiler Help ============================== usage: ifort [options] file1 [file2 ...] [/link linker_options] where options represents zero or more compiler options fileN is a Fortran source (.f .for .ftn .f90 .fpp .i .i90), assembly (.asm), object (.obj), static library (.lib), or other linkable file linker_options represents zero or more linker options Notes ----- 1. Many FL32 options are supported; a warning is printed for unsupported options. 2. Intel Fortran compiler options may be placed in your ifort.cfg file. Compiler Option List -------------------- Performance ----------- /O1 optimize for maximum speed, but disable some optimizations which increase code size for a small speed benefit: /Ob1gysi- /O2 optimize for maximum speed (same as /Ox) /O3 enable /O2 plus more aggressive optimizations that may not improve performance for all programs /Ox enable maximum optimizations (DEFAULT): /Ob1gyti /Od disable optimizations; useful for selective optimizations (i.e. /Od /Og) /optimize:<val> 0 - disable optimization (same as /Od) 1 - optimize for maximum speed, but disable some optimizations which increase code size for a small speed benefit (same as /O1) 2 - same as 1, or /O1 3 - optimize for maximum speed (default) (same as /O2) 4 - same as 3, or /O2 5 - enable /optimize:3 plus more aggressive optimizations that may not improve performance for all programs (same as /O3) /fast enable /QxP /O3 /Qipo /Qprec-div- /Ob<n> control inline expansion: n=0 disable inlining (same as /inline:none) n=1 no inlining (unless /Qip specified) n=2 inline any function, at the compiler's discretion (same as /Qip or /inline:all) /Og enable global optimizations /Op[-] enable/disable better floating-point precision /[no]fltconsistency specify that improved floating-point consistency should be used /Os enable speed optimizations, but disable some optimizations which increase code size for small speed benefit (overrides /Ot) /Ot enable speed optimizations (overrides /Os) /Oy[-] enable/disable using EBP as general purpose register (no frame pointer) /Qax<codes> generate code specialized for processors specified by <codes> while also generating generic IA-32 code. <codes> includes one or more of the following characters: K Intel Pentium III and compatible Intel processors W Intel Pentium 4 and compatible Intel processors N Intel Pentium 4 and compatible Intel processors. Enables new optimizations in addition to Intel processor-specific optimizations P Intel Pentium 4 processors with SSE3 extensions B Intel Pentium M and compatible Intel processors /Qx<codes> generate specialized code to run exclusively on processors indicated by <codes> as described above. /tune:<keyword> pn1 - optimize for Pentium(R) processor pn2 - optimize for Pentium(R) Pro, Pentium(R) II, and Pentium(R) III processors pn3 - same as pn2 pn4 - optimize for Pentium(R) 4 processor (DEFAULT) /architecture:<keyword> pn1 - optimize for Pentium(R) processor pn2 - optimize for Pentium(R) Pro, Pentium(R) II, and Pentium(R) III processors pn3 - same as pn2 pn4 - optimize for Pentium(R) 4 processor (DEFAULT) SSE - same as QxK SSE2 same as QxW Advanced Performance -------------------- Enable and specify the scope of Interprocedural (IP) Optimizations: /Qip enable single-file IP optimizations (within files, same as /Ob2) /Qipo[n] enable multi-file IP optimizations (between files) /Qipo-c generate a multi-file object file (ipo_out.obj) /Qipo-S generate a multi-file assembly file (ipo_out.asm) Modify the behavior of IP: /Qip-no-inlining disable full and partial inlining (requires /Qip or /Qipo) /Qip-no-pinlining disable partial inlining (requires /Qip or /Qipo) /Qipo-separate create one object file for every source file (overrides /Qipo[n]) Other Advanced Performance Options: /reentrancy:<keyword> specify whether the threaded, reentrant run-time support should be used Keywords: none (same as /noreentrancy), threaded /noreentrancy don't use reentrant run-time support /Qpad[-] enable/disable(DEFAULT) changing variable and array memory layout /Qunroll[n] set maximum number of times to unroll loops. Omit n to use default heuristics. Use n=0 to disable loop unroller. /unroll[:n] set maximum number of times to unroll loops. Omit n to use default heuristics. Use n=0 to disable loop unroller. /Qprof-dir <d> specify directory for profiling output files (*.dyn and *.dpi) /Qprof-file <f> specify file name for profiling summary file /Qprof-gen instrument program for profiling /Qprof-use enable use of profiling information during optimization /Qprof-gen-sampling prepare code for use with profrun sample gathering tool /Qfnsplit[-] enable/disable function splitting (enabled with /Qprof-use) /Qpc32 set internal FPU precision to 24 bit significand /Qpc64 set internal FPU precision to 53 bit significand (DEFAULT) /Qpc80 set internal FPU precision to 64 bit significand /QIfist[-] enable/disable(DEFAULT) fast float-to-int conversions /Qrcd same as /QIfist /Qrct set internal FPU rounding control to truncate /rounding-mode:chopped set internal FPU rounding control to truncate /Qprec improve floating-point precision (speed impact less than /Op) /Qfp-port round fp results at assignments & casts (some speed impact) /Qfpstkchk enable fp stack checking after every function/procedure call /Qprec-div[-] improve precision of FP divides (some speed impact) /Qprec-sqrt[-] determine if certain square root optimizations are enabled /Qscalar-rep[-] enable(DEFAULT)/disable scalar replacement (requires /O3) /Qvec-report[n] control amount of vectorizer diagnostic information: n=0 no diagnostic information n=1 indicate vectorized loops (DEFAULT) n=2 indicate vectorized/non-vectorized loops n=3 indicate vectorized/non-vectorized loops and prohibiting data dependence information n=4 indicate non-vectorized loops n=5 indicate non-vectorized loops and prohibiting data dependence information /Qprefetch[-] enable(DEFAULT)/disable prefetch insertion /Qsafe-cray-ptr Cray pointers do not alias with other variables /Qopt-report generate an optimization report to stderr /Qopt-report-file<file> specify the filename for the generated report /Qopt-report-level[level] specify the level of report verbosity (min|med|max) /Qopt-report-phase<name> specify the phase that reports are generated against /Qopt-report-routine<name> reports on routines containing the given name /Qopt-report-help display the optimization phases available for reporting /Qtcheck generate instrumentation to detect multi-threading bugs (requires Intel(R) Threading Tools; cannot be used with compiler alone) /Qopenmp enable the compiler to generate multi-threaded code based on the OpenMP directives /Qopenmp-profile link with instrumented OpenMP runtime library to generate OpenMP profiling information for use with the OpenMP component of the VTune(TM) Performance Analyzer /Qopenmp-stubs enables the user to compile OpenMP programs in sequential mode. The openmp directives are ignored and a stub OpenMP library is linked (sequential) /Qopenmp-report{0|1|2} control the OpenMP parallelizer diagnostic level /fpe:{0|1|3} specifies behavior on floating point exceptions /Qparallel enable the auto-parallelizer to generate multi-threaded code for loops that can be safely executed in parallel /Qpar-report{0|1|2|3} control the auto-parallelizer diagnostic level /Qpar-threshold[n] set threshold for the auto-parallelization of loops where n is an integer from 0 to 100 /Qansi-alias[-] enable(DEFAULT)/disable use of ANSI aliasing rules in optimizations; user asserts that the program adheres to these rules /Qcomplex-limited-range[-] enable/disable(DEFAULT) the use of the basic algebraic expansions of some complex arithmetic operations. This can allow for some performance improvement in programs which use a lot of complex arithmetic at the loss of some exponent range. /Qftz[-] enable/disable flush denormal results to zero /[no]recursive compile all procedures for possible recursive execution /Qssp enable software-based speculative pre-computation Output, Debug ------------- /c, /nolink, /compile-only compile to object (.obj) only, do not link /S compile to assembly (.asm) only, do not link /FA[cs] produce assembly file with optional code or source annotations /asmattr:<keyword> specify the information to generate in the assembleable listing file keywords: [no]source, [no]machine /noasmattr generate default information in the assembleable listing /Fa[file] name assembly file (or directory for multiple files; i.e. /FaMYDIR\) /asmfile[:filename] specifies that an assembleable listing file should be generated /Fo[file] name object file (or directory for multiple files; i.e. /FoMYDIR2\) /object:<filename> specify the name of the object file /Fe<file> name executable file or directory /exe:<filename> specifies the name to be used for the built program (.EXE) or dynamic-link (.DLL) library /map:<filename> specify that a link map file should be generated /pdbfile[:filename] specify that debug related information should be generated to a program database file /nopdbfile do not generate debug related information to a program database file /RTCu report use of variable that was not initialized /Zi, /Z7 produce symbolic debug information in object file /debug[:keyword] enable debug information and control output of enhanced debug information. keywords: all, full, minimal, none (same as /nodebug) inline-debug-info, variable-locations, semantic-stepping, extended /nodebug do not enable debug information /debug-parameters[:keyword] control output of debug information for PARAMETERS keywords: all, used, none (same as /nodebug-parameters) /nodebug-parameters do not output debug information for PARAMETERS /Quse-vcdebug emit debug information compatible with Visual C++ debugger; this disables emission of extended information used by Fortran debuggers /Qinline-debug-info preserve the source position of inlined code instead of assigning the call-site source position to inlined code /Qtrapuv trap uninitialized variables /Qmap-opts enable option mapping tool Fortran Preprocessor -------------------- /D<name>[{=|#}<text>], /define:symbol[=value] Defines the symbol specified for use with conditional compilation metacommands. Optionally, the symbol can be defined to be an integer or string value /nodefines specifies that any /D macros go to the preprocessor only, and not to the compiler too /allow:[no]fpp-comments If a Fortran end-of-line comment is seen within a #define, treat it as part of the definition. Default is nofpp-comments /E preprocess to stdout /EP preprocess to stdout, omitting #line directives /EP /P preprocess to file, omitting #line directives /P, /preprocess-only preprocess to file /Qfpp[n], /[no]fpp run Fortran preprocessor on source files prior to compilation n=0 disable running the preprocessor, equivalent to nofpp n=1,2,3 run preprocessor /Qcpp[n] same as /Qfpp[n] /I<dir>, /[no]include:<dir> define the directories in which the compiler searches for INCLUDE and mod files /module[:path] specify path where mod files should be placed and first location to look for mod files /U<name>, /undefine:<name> remove predefined macro /u remove all predefined macros /X remove standard directories from include file search path Language -------- /4I{2|4|8} set default KIND of integer and logical variables to 2, 4, or 8 /integer-size:<size> specifies the default size of integer and logical variables size: 16, 32, 64 /4R{8|16} set default size of REAL to 8 or 16 bytes /real-size:<size> specify the size of REAL and COMPLEX declarations, constants, functions, and intrinsics size: 32, 64, 128 /Qautodouble same as /4R8 /double-size:<size> defines the size of DOUBLE PRECISION and DOUBLE COMPLEX declarations, constants, functions, and intrinsics size: 64, 128 /[no]fpconstant extends the precision of single precision constants assigned to double precision variables to double precision /[no]intconstant use Compaq Fortran 77 semantics, rather than Compaq Fortran 90, to determine kind of integer constants /Qd-lines, /[no]d-lines compile debug statements (indicated by D in column 1) /4{Y|N}f enable/disable free format source /[no]fixed, /FI specifies source files are in fixed format /[no]free , /FR specifies source files are in free format /4L{72|80|132} specify 72, 80, or 132 column lines for fixed form sources /Qextend-source same as /4L132 /extend-source[:size] determines the column that ends the statement field of each source line in a fixed-format file. /extend-source default size is 132 size: 72 (same as /noextend-source), 80, 132 /noextend-source source lines are expected to be 72 characters /ccdefault:<keyword> specify default carriage control for units 6 and * keywords: default, fortran, list, or none /stand:<keyword> specifies level of conformance with ANSI standard to check for keywords: f90, f95, none /Qpad-source, /[no]pad-source make compiler acknowledge blanks at the end of a line /Qdps[-], /[no]altparam specify if alternate form of parameter constant declarations (without parenthesis) is recognized /1, /Qonetrip execute any DO loop at least once /f66 allow extensions that enhance FORTRAN-66 compatibility /[no]f77rtl specify that the Fortran 77 specific run-time support should be used /4{Y|N}a enable/disable putting local variables on the run-time stack /Qauto same as /4Ya or /automatic /Qauto-scalar make scalar local variables AUTOMATIC /Qsave save all variables (static allocation) (same as /noautomatic or /4Na, opposite of /Qauto) /4{Y|N}d enable/disable default IMPLICIT NONE /Qcommon-args assume "by reference" subprogram arguments may alias one another (same as /assume:dummy_aliases) /[Q]vms enable VMS I/O statement extensions /assume:<keyword> specify assumptions made by the optimizer and code generator keywords: none, [no]accuracy_sensitive, [no]byterecl, [no]buffered_io, [no]dummy_aliases, [no]minus0, [no]protect_constants, [no]source_include, [no]underscore /Qzero[-] enable/disable(DEFAULT) implicitly initialize all data to zero /Qdyncom"blk1,blk2,..." make given common blocks dynamically-allocated /4{Y|N}b enable/disable extensive runtime error checking /CB runtime checks for out-of-bounds array subscript/substring refs Same as /check:bounds /CU runtime check for uninitialized variables same as /check:uninit /check:<keyword> check run-time conditions keywords: all (same as /4Yb), none (same as /nocheck, /4Nb), [no]arg_temp_created, [no]bounds,[no]format, [no]overflow, [no]output_conversion, [no]power, [no]uninit, [no]args /nocheck perform no extra run-time checks /nbs treat backslash as a normal character, not an escape character /us append an underscore to external subroutine names /Qlowercase change routine names to all lowercase (same as /names:lowercase) /Quppercase change routine names to all uppercase (DEFAULT) (same as /names:uppercase) /names:<keyword> specify how source code identifiers and external names are interpreted keywords: as_is, lowercase, uppercase /Gm enable CVF and Powerstation calling convention compatibility (same as /iface:cvf) /Gz make STDCALL the default calling convention (same as /iface:stdcall) /iface:<keyword> specify the calling conventions to be used keywords: [no]mixed_str_len_arg, cref, cvf, default, stdcall, stdref /align[-] analyze and reorder memory layout for variables and arrays /Zp[n] specify alignment constraint for structures (n=1,2,4,8,16) /align:<keyword> specify how data items are aligned keywords: [no]commons, dcommons, [no]records, rec1byte, rec2byte, rec4byte, rec8byte, rec16byte, sequence /Zs, /syntax-only perform syntax check only Compiler Diagnostics -------------------- /cm same as /warn:nousage /w disable all warnings /Wn disable warnings (n=0) or show warnings (n=1, DEFAULT, same as /warn:general) /w90, /w95 suppress messages about use of non-standard Fortran-90/95 /4{Y|N}s enable/disable issuing of errors for non-standard Fortran-90 /warn:<keyword> specifies the level of warning messages issued. keywords: all, none (same as /nowarn), [no]alignments, [no]argument_checking, [no]declarations, [no]errors, [no]general, [no]ignore_loc, [no]interfaces, [no]stderrors, [no]truncated_source, [no]uncalled, [no]uninitialized, [no]unused, [no]usage /nowarn suppress all warning messages /WB turn a compile-time bounds check into a warning /[no]gen-interfaces create interface blocks for all routines in the file. Can then be checked with warn:interfaces /[no]traceback specify whether the compiler generates PC correlation data used to display a symbolic traceback rather than a hexidecimal traceback at runtime failure /error-limit:<size> specify the maximum number of error-level or fatal-level compiler errors allowed /noerror-limit set no maximum number on error-level or fatal-level error messages Miscellaneous ------------- /?, /help print this help message /[no]logo [do not] display compiler version information /watch:<keyword> show driver tool commands but do not execute tools /Tf<file> compile file as Fortran source /source:<filename> specify that the file indicated should be processed as a Fortran source file /extfor:<ext> specify extension of file to be recognized as a Fortran file /extfpp:<ext> specify extension of file to be recognized as a preprocessor file /convert:<keyword> specify the format of unformatted files containing numeric data keywords: big_endian, cray, ibm, little_endian, native, vaxd, vaxg /fpscomp[:keyword] specify the level of compatibility to adhere to with Fortran PowerStation keywords: all, none (same as /nofpscomp), [no]filesfromcmd, [no]general, [no]ioformat, [no]ldio_spacing, [no]libs, [no]logicals /nofpscomp no specific level of compatibility with Fortran Powerstation /libdir[:keyword] control the library names that should be emitted into the object file Keywords: all, none (same as /nolibdir), [no]automatic, [no]user /nolibdir no library names should be emitted into the object file /inline[:keyword] Specifies the level of inline function expansion. keywords: all (same as /Ob2 /Ot), size (same as /Ob2 /Os) speed (same as /Ob2 /Ot), none or manual (same as /Ob0) /Qoption,<str>,<opts> pass options <opts> to tool specified by <str> /Qlocation,<str>,<dir> set <dir> as the location of tool specified by <str> /bintext:<string> place the string specified into the object file and executable /Qsox[-] enable/disable(DEFAULT) saving of compiler options and version in the executable /Qnobss-init disable placement of zero-initialized vars in BSS (use DATA) Linking/Linker -------------- /link specify that all following options are for the linker /extlnk:<ext> specify extension of file to be passed directly to linker /F<n> set the stack reserve amount specified to the linker /Qvc6 use Visual C++ 6.0 linker and debug format (DEFAULT) /Qvc7 enable Visual Studio .NET 2002 linker and debug format /Qvc7.1 enable Visual Studio .NET 2003 linker and debug format /LD[d], /dll produce a DLL instead of an EXE ('LDd' = debug version) /dbglibs use the debug version of runtime libraries, when appropriate /MD use dynamically-loaded, multithread runtime /MDs use dynamically-loaded, single thread runtime /MG, /winapp use Windows API runtime libraries /ML use statically-loaded, single thread runtime (/ML is DEFAULT) /MT use statically-loaded, multithread runtime /MW use statically-loaded, multidocument QuickWin runtime /MWs use statically-loaded, single document QuickWin runtime /libs:<keyword> determine the default libraries to be linked against dll - use dynamically-loaded, multithread runtime qwin - use statically-loaded, multidocument QuickWin runtime qwins - use statically-loaded, single document QuickWin runtime static - use statically-loaded, single thread runtime (DEFAULT) /static synonym to /libs:static /4{Y|N}portlib enable/disable linking with portability library /Zl omit library names from object file (same as /nolibdir) /[no]threads specify whether or not multi-threaded libraries should be linked against Copyright (C) 1985-2005, Intel Corporation. All rights reserved. * Other brands and names are the property of their respective owners.