The Intel® C++ Compiler and Intel® Fortran Compiler contain certain internal limits intended to prevent excessive memory usage or compile times for very large and/or complex compilation units. When such a limit is exceeded, some optimizations are skipped to reduce the memory footprint and compile time. In such cases, for the version 15.0 update 1 and later compilers, one of the following diagnostic remarks may be printed at the head of the optimization report:
remark #25463: Optimization for this routine was skipped to constrain compile time. Consider overriding limits (-qoverride-limits).
remark #25464: Some optimizations were skipped to constrain compile time. Consider overriding limits (-qoverride-limits).
Skipping some optimizations later in the optimization sequence will typically have less impact on performance than skipping optimization for an entire function. If memory footprint and compilation time are not a concern, or if you wish to make tests, the compiler may be asked to ignore the internal limits and continue optimizing by adding the command line switch -qoverride-limits (Linux* or OS X*) or /Qoverride-limits (Windows*). This may substantially increase compile time and/or memory usage. It is the user's responsibility to ensure that sufficient memory is available. This is not a general optimization switch; it should only be used where there is a specific need and is not recommended for inexperienced users.
Other possible ways to avoid restricting optimization due to internal limits include:
- Splitting up very large functions that trigger the diagnostic into two or more smaller functions;
- Reducing the number of functions with a single source file;
- Restricting the amount of interprocedural optimization (including inlining) between source files or within a source file;
- Disabling bounds checking. (Note that bounds checking is enabled by default for debug builds within Intel Visual Fortran).
- Reducing the optimization level (e.g. from -O3 to -O2) either for the whole source file, or, by using the "optimize" pragma or directive, for the particular function within a source file. (See the compiler user and reference guide).
Compiler versions earlier than 15.0 update 1 accept the -qoverride-limits (/Qoverride-limits) switch, but they do not print diagnostic remarks 25463 and 25464. 15.0 update 1 and later compilers print these remarks only if the optimization report is enabled, e.g. with -qopt-report or /Qopt-report.