Intel® C++ Compiler 19.0 for Windows* Targets Release Notes for Intel® System Studio 2019

By Devorah Hayman, Published: 05/30/2018, Last Updated: 12/18/2018

This document provides a summary of new and changed features of the Intel® C++ Compiler for applications running on Windows* targets. It also includes notes about features and problems not described in the product documentation.

Intel® C++ Compiler 19.0 in Intel® System Studio 2019 is based on the Intel® C++ Compiler 19.0 in Intel® Parallel Studio XE 2019 for C++ Windows* with some limitations.

Change History

Changes since Intel® C++ Compiler 19.0.4 (New in Intel® C++ Compiler 19.0.5)

  • Corrections to reported problems
  • Includes certain functional and security updates.  We recommend updating for these functional and security updates.
  • The Intel® C++ Compiler in this update includes a new /Qnextgen compiler option that uses LLVM Technology.  See the special Additional Requirements for ICC NextGen and the ICC NextGen Notes below for more details.

Changes since Intel® C++ Compiler 19.0.3 (New in Intel® C++ Compiler 19.0.4)

  • Microsoft Visual Studio 2019* support added
  • Corrections to reported problems

Changes since Intel® C++ Compiler 19.0.2 (New in Intel® C++ Compiler 19.0.3)

Corrections to reported problems

Changes since Intel® C++ Compiler 19.0.1 (New in Intel® C++ Compiler 19.0.2)

Intel® C++ Compiler 19.0 Update 2 includes functional and security updates. Users should update to the latest version.

Changes since Intel® C++ Compiler 19.0 (New in Intel® C++ Compiler 19.0 Update 1)

Changes since Intel® C++ Compiler 18.0 (New in Intel® C++ Compiler 19.0)

System Requirements

For an explanation of architecture names, see Intel® Architecture Platform Terminology for Development Tools

  • A PC based on an Intel® 64 architecture processor supporting the Intel® Streaming SIMD Extensions 2 (Intel® SSE2) instructions (Intel® 2nd Generation or newer Generation of Intel® Core™ i3, i5, or i7 processors and Intel® Xeon® E3 or E5 processor family, or compatible non-Intel processor)
  • 2GB of RAM (4GB recommended)
  • 4GB free disk space for all features
  • A version of binutils (specifically 2.24.51.20131210) for Windows (available at Open Source Downloads)
    • Note that after installing binutils, you will need to set your PATH to include the directory containing ld.exe.
  • Microsoft Windows 7* (SP1) (will be deprecated in future releases), Microsoft Windows 10*, or Microsoft Windows Server 2012 (R2)* (embedded editions not supported)1
    • On Microsoft Windows Server 2012, the product installs into the "Desktop" environment.  
  • To use the Microsoft Visual Studio development environment or command-line tools to build IA-32 or Intel® 64 architecture applications, one of:
    • Microsoft Visual Studio 2019* Professional Edition (or higher edition) with 'Visual C++' component installed
    • Microsoft Visual Studio 2017* Professional Edition (or higher edition) with 'Desktop development with C++' component installed4
    • Microsoft Visual Studio 2015* Professional Edition (or higher edition) with 'Common Tools for Visual C++ 2015' component installed 3
    • Microsoft Visual Studio Community 2015* with 'Common Tools for Visual C++ 2015' component installed 3
    • Microsoft Visual Studio 2013* Professional Edition (or higher edition) with C++ component installed
    • Microsoft Visual Studio Community 2013* with C++ component installed
  • To use command-line tools only to build IA-321 architecture applications, one of:
    • Microsoft Visual Studio Express 2015 for Windows Desktop*
    • Microsoft Visual Studio Express 2013 for Windows Desktop*
  • To use command-line tools only to build Intel® 64 architecture applications, one of:
    • Microsoft Visual Studio Express 2015 for Windows Desktop*
    • Microsoft Visual Studio Express 2013 for Windows Desktop*
    • Microsoft Build Tools 2017*
Notes
  1. Applications can be run on the same Windows versions as specified above for development. Applications may also run on non-embedded 32-bit versions of Microsoft Windows earlier than Windows XP, though Intel does not test these for compatibility. Your application may depend on a Win32 API routine not present in older versions of Windows. You are responsible for testing application compatibility. You may need to copy certain run-time DLLs onto the target system to run your application.
  2. The Intel® C++ Compiler does not support the development of Windows 8* UI apps. We are always interested in your comments and suggestions. For example, if you want to use the Intel® C++ Compiler or other Intel software development capabilities in Windows 8 UI apps, please file a request at the Intel® Online Service Center.
  3. To use the Intel® C++ Compiler with Microsoft Visual Studio 2015*, it is necessary to install the 'Common Tools for Visual C++ 2015' component from Visual Studio. This article explains how.
  4. This article explains how to use the Intel® C++ Compiler with Microsoft Visual Studio 2017*,

Additional Requirements to use the /Qnextgen Option

For the /Qnextgen option to use LLVM Technology only the following are supported:

  • For Intel64, supported Windows OSes and Visual Studio - only those listed below:
    • Windows 10
    • Windows Server 2019
    • Windows Server 2016 (1607)
    • Visual Studio 2019 with Windows SDK 10
    • Visual Studio 2019 Build Tools* with Windows SDK 10 
    • Visual Studio 2017 with Windows SDK 10

Target software requirements

The target platform should be based on one of the following environments:

  • Microsoft Windows 10 IoT Core*, Microsoft Windows 10*, Microsoft Windows Embedded 8*, Microsoft Windows Embedded 7*

How to use the Intel® C++ Compiler

Intel® System Studio 2019: Getting started with the Intel® C++ Compiler 19.0 for Windows* at <install-dir>\documentation_2019\en\compiler_c\iss2019\get_started_wc.htm. contains information on how to use the Intel® C++ Compiler from the command line and from Microsoft Visual Studio*.

Documentation

Product documentation is linked from <install-dir>\documentation_2019\en\compiler_c\iss2019\get_started_wc.htm. Full documentation for all tool components is available at the Intel System Studio Documentation page.

Offline Core Documentation Removed from the Installed Image

Offline core documentation is removed from the Intel® System Studio installed image. The core documentation for the components of Intel® System Studio is available at the Intel® Software Documentation Library for viewing online. You can also download an offline version of the documentation from the Intel® Software Development Products Registration Center: Product List > Intel® System Studio Documentation. See this article for additional information and download.

Intel-provided Debug Solutions

Samples

Product samples are now available online at Intel® System Studio Code Samples and Tutorials

Technical Support

If you did not register your compiler during installation, please do so at the Intel® Software Development Products Registration Center. Registration entitles you to free technical support, product updates and upgrades for the duration of the support term.

For information about how to find Technical Support, Product Updates, User Forums, FAQs, tips and tricks, and other support information, please visit the support page

Note: If your distributor provides technical support for this product, please contact them for support rather than Intel.

New and Changed Features

The following features are new or significantly enhanced in this version. For more information on these features, please refer to the documentation.

Using the /Qnextgen Compiler Option

In Update 5 we allow a new compiler option, /Qnextgen.   This compiler option is provided as a way to use our LLVM Technology.    As an example, here are some suggested compiler options to exercise the LLVM Technology mode:

icl /Qnextgen -flto -Ofast

Note that /Qnextgen allows the LLVM* mode, then -flto -Ofast are Clang* options that are recognized in this new mode.  With /Qnextgen you can use either ICL options, Clang*/LLVM* options, or a mix of both. 

Value safe simd options for #pragma omp simd

Currently "#pragma omp simd" overrides FP value and exception safe settings. The following options change that legacy behaviour and produce value and exception safe code even for SIMD loops.

  • Qsimd-honor-fp-model[-]: Tells the compiler to obey the selected floating-point model when vectorizing SIMD loops
  • Qsimd-serialize-fp-reduction[-]: Tells the compiler to serialize floating-point reduction when vectorizing SIMD loops.

OpenMP SIMD specification and FP model flag can contradict in the requirement. Compiler’s default is to follow OpenMP specification and vectorize the loop. With this new flag, a programmer can override so that the compiler follows the FP model flag instead and serialize the loop.
Note 1: When –qsimd-honor-fp-model is used and OpenMP SIMD reduction specification is the only thing causing serialization of entire loop addition of qsimd-serialize-fp-reduction will result in vectorization of the entire loop except reduction calculation which will be serialized.
Note 2: This option does not affect auto-vectorization of loops.

New code names are to be supported in -[Q]x / -[Q]ax / -[m]tune / -[m]arch options.

Code names supported: cascadelake, kabylake, coffeelake, amberlake, whiskeylake, cannonlake.

Added support of Build Tools for Visual Studio 2017

Now it is possible to use Intel C++ Compiler in compilervars environment and build Microsoft Visual Studio* C++ projects using MSBuild with Intel C++ Compiler toolset within Build Tools for Visual Studio 2017 without installation of entire Visual Studio 2017 IDE.

nodynamic_align and vectorlength clauses for pragma vector

  • Explicit syntax for dynamic alignment
    #pragma vector dynamic_align[(pointer)] #pragma vector nodynamic_align

    With no pointer specified, compiler behaves normally (automatically decides which pointer has to be aligned or doesn’t generate peel loop at all). With pointer specified, compiler generates peel loop for that pointer. With nodynamic_align clause, the compiler will not generate a peel loop.

  • #pragma vector vectorlength(vl1,vl2, .. , vln)
    #pragma vector vectorlength(vl1,vl2, .. , vln)

    Vectorizer chooses the best vector length from the list according to the cost model. If all vector length from the list are not profitable, the loop remains scalar. This pragma doesn’t force vectorization, thus it can be safely used for all loops.

GNU style inline asms

__asm("nop" :); _asm("nop" :); asm("nop" :); __asm { nop }; _asm { nop }; asm { nop };

Microsoft Visual Studio* integration changes

  • Restored context sensitive help in Visual Studio 

    On clicking F1, It is possible to restore context-sensitive help in Visual Studio, to download and install documentation to the system. See this article for additional information and download: Download Documentation: Intel® Compiler (Current and Previous)

  • Changes in /Q[a]x, -[a]x properties
    • Added switches icelake and cannonlake in Intel Processor Specific Optimization property
    • Removed switches : /QxSSE2, /QxSSE3,/QxCORE-AVX-1,/QxSSEE4.1
  • Changes in /tune,-mtune propeties
    • Added switches icelake and cannonlake
  • CPP language standards
    • Removed Configuration properties > C/C++ > Language[Intel C++] > Enable C99 Support(/Qstd=c99),Enable C++11 support (/Qstd=c+11)
    • Exposed /std option in Visual Studio 2017 for compatibility with VC++
    • Exposed /Qstd option in all supported versions of Visual Studio

Parallel STL for parallel and vector execution of the C++ STL

Intel® C++ Compiler is installed with Parallel STL, an implementation of the C++ standard library algorithms with support for execution policies.

Features and API changes

  • More algorithms support parallel and vector execution policies: find_first_of, is_heap, is_heap_until, replace, replace_if.
  • More algorithms support vector execution policies: remove, remove_if.
  • More algorithms support parallel execution policies: partial_sort.

To learn more, please refer to article Get Started with Parallel STL.

Features from OpenMP* TR6 Version 5.0 Preview 2

Language features from the OpenMP* Technical Report 6 : Version 5.0 Preview 2 specifications are now supported.

  • Explicit syntax for inclusive scan *
    #pragma omp simd[parallel] scan(scan-op: item-list)
    #pragma omp inclusive_scan(item-list)
  • Explicit syntax for exclusive scan *
    #pragma omp simd[parallel] scan(scan-op: item-list)
    #pragma omp inclusive_scan(item-list)

    Prefix sum is computed correctly during vector execution
    *The syntax will be renamed in product release
  • UDI for OpenMP* Parallel pragmas
    #pragma omp declare induction ( induction-id : induction-type :step-type : inductor ) [collector( collector )]

For more information, see the compiler documentation or the link to the OpenMP* Specification above.

C++17 features supported

The Intel® C++ Compiler 19.0 supports the following features under the /Qstd=c++17 (Windows*) or -std=c++17 (Linux*/macOS*) options:

  • Fold expressions(N4295)
  • Inline variables(P0386R2)
  • Construction rules for enum classes(P0138R2)
  • Removing deprecated dynamic exception specifications(P0003R5)
  • Make exception specifications part of the type system(P0012R1)
  • constexpr lambda expressions(P0170R1)
  • Lambda capture of *this(P0018R3)
  • constexpr if-statements(P0292R2)
  • Structured bindings(P0217R3)
  • Separate variable and condition for if and switch(P0305R1)
  • Please see C++17 Features Supported by Intel® C++ Compiler for an up-to-date listing of all supported features, including comparisons to previous major versions of the compiler.

C++14 features supported

The Intel® C++ Compiler 19.0 supports the following features under the /Qstd=c++14 (Windows*) or -std=c++14 (Linux*/macOS*) options:

Please see C++14 Features Supported by Intel® C++ Compiler for an up-to-date listing of all supported features, including comparisons to previous major versions of the compiler.

C++11 features supported

The Intel® C++ Compiler 19.0 supports the following features under the /Qstd=c++11 (Windows*) or -std=c++11 (Linux*/macOS*) options:

Please see C++11 Features Supported by Intel® C++ Compiler for an up-to-date listing of all supported features, including comparisons to previous major versions of the compiler.

C11 features supported

The Intel® C++ Compiler supports the C11 features under the /Qstd=c11 (Windows*) or -std=c11(Linux*/macOS*) options:

Please see C11 Support in Intel® C++ Compiler for an up-to-date listing of all supported features, including comparisons to previous major versions of the compiler.

New and Changed Compiler Options

For details on these and all compiler options, see the Compiler Options section of the Intel® C++ Compiler 19.0 User's Guide.

  • -qopenmp-simd set by default
  • Canary bytes are cleared right after read with /GS by default/
  • New /Q[a]xcannonlake option
  • New /tune=cannonlake option
  • /Qrcd option enabled "fast" float-to-integer conversions, by using round-to-nearest instead of truncating rounding. This option has been deprecated.

For a list of deprecated compiler options, see the Compiler Options section of the Intel® C++ Compiler 19.0 User's Guide.

Support Deprecated

  •  
  • Intel® Cilk™ Plus is a deprecated feature in the Intel® C++ Compiler 18.0. For more information see Migrate Your Application to use OpenMP* instead of Intel® Cilk™ Plus.
  • Offload support for Intel® Graphics Technology has been deprecated.

Known Limitations

Parallel STL

unseq and par_unseq policies only have effect with compilers that support '#pragma omp simd' or '#pragma simd. Parallel and vector execution is only supported for a subset of algorithms if random access iterators are provided, while for the rest execution will remain serial. Depending on a compiler, zip_iterator may not work with unseq and par_unseq policies.

Pointer Checker requires a dynamic runtime library

When using the /Q check-pointers option, the runtime library libchkp.dll must be linked in. When using options like /MD with /Q check-pointers, be aware that this dynamic library will be linked in regardless of your settings. See the article at Pointer Checker in ICC: requires dynamic linking of runtime libraries for more information.

Some multi-pane documents do not display correctly in the Visual Studio* internal browser

There is a limitation of Visual Studio* internal browser that some multi-pane documents do not display correctly, the table of contents appears in the left pane, but the right pane does not display any content.
Workaround: Access the same documentation from the Visual Studio Help menu.

Mixed Microsoft* or Intel compilation of 256 vector bit type parameters may generate code that causes an access violation at runtime

A general protection fault caused by an unaligned data access may occur when an application is built using two different compilers - the Microsoft Visual C++ 2013* compiler and the Intel® C++ Compiler 15.0 or above. The problem may arise when 256 vector bit type parameters are passed by reference in a call when the caller is built with Visual C++*, and the parameters are accessed by functions built with the Intel C++ Compiler.

The problem arises due to a mismatch in the alignment of the 256 vector bit type parameters.

This problem will not occur when the /Qx<code> compiler option is used with <code> equal to AVX or with a newer code value, such as CORE-AVX-I, CORE-AVX2, etc., due to the fact that unaligned access instructions are used in these instances unless __mm256_stream_* (non-temporal data load/store intrinsics) are used explicitly in the application source code.

Microsoft Visual Studio* Known Issues

  • Users might encounter the issue with freezing of Visual Studio 2017 during opening projects from file explorer when Intel compiler integration is installed. The workaround is to open the project from within Visual Studio.
  • In mixed ICL/MSVC compilation projects, users might encounter the following problem in Visual Studio 2017 Update 4 or older: "The "ConformanceMode" parameter is not supported by the "CL" task. Verify the parameter exists on the task, and it is a settable public instance property."
    The workaround is to update Visual Studio 2017 or comment the following line inside two sections in\Common7\IDE\VC\VCTargets\Platforms\ \PlatformToolsets\Intel C++ Compiler 19.0\Toolset.targets file: "ConformanceMode ="%(ClCompile.ConformanceMode)""
  • MSVCP90D.dll (or other Microsoft runtime DLL) is missing

    There are situations where the sample projects provided (or any Microsoft Visual C++* project potentially) could run into a runtime System Error where the application cannot find a Microsoft Visual Studio* runtime DLL. This is related to manifest files and SXS assemblies potentially missing. The simplest solution is to go to your redist directory for the version of Microsoft Visual Studio* you are using (default location would be c:\program files[ (x86)]\Microsoft Visual Studio X.X\VC\redist). There will be several subdirectories under this location, sorting files out by amd64, x86 or Debug_NonRedist (if you have D in the runtime name, this usually indicates a Debug library found in this folder). Find the appropriate folder that contains the runtime you are looking for, and then copy the entire contents of that folder (including a .manifest file) to the directory where the .exe you are trying to run is located.
  • Warning #31001:The dll for reading and writing the pdb (for example, mspdb110.dll) could not be found on your path.

    When using Microsoft Visual Studio Express*, compilation for IA-32 with -debug (General > Debug Information Format) enabled may result the warning: warning #31001: The dll for reading and writing the pdb (for example, mspdb110.dll) could not be found on your path. This is usually a configuration error. Compilation will continue using /Z7 instead of /Zi, but expect a similar error when you link your program. The warning is expected and occurs because a 64 bit Windows* applications (i.e. the Intel® Fortran compiler) must use 64 bit dlls; however, Microsoft Visual Studio Express* only provides a 32 bit version of mspdb*.dll. The missing 64 bit version leads to the warning. This is a warning-level diagnostic that does not impede successfully building an executable; however, debug information requested is embedded into the object (.obj) file for use with the debugger. No .pdb file is produced by the compiler when /Z7 is enabled.

 Disclaimer and Legal Information

Optimization Notice

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804

INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL(R) PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT. UNLESS OTHERWISE AGREED IN WRITING BY INTEL, THE INTEL PRODUCTS ARE NOT DESIGNED NOR INTENDED FOR ANY APPLICATION IN WHICH THE FAILURE OF THE INTEL PRODUCT COULD CREATE A SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR.

Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined." Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information.

The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.

Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order.

Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1-800-548-4725, or go to:  http://www.intel.com/design/literature.htm 

Intel processor numbers are not a measure of performance. Processor numbers differentiate features within each processor family, not across different processor families. Go to: 

http://www.intel.com/products/processor%5Fnumber/

The Intel® C++ Compiler is provided under Intel’s End User License Agreement (EULA). 

Please consult the licenses included in the distribution for details.

Intel, Intel logo, Pentium, Core, Atom, Iris, Intel® Xeon®, Intel® Xeon Phi, and Cilk are trademarks of Intel Corporation in the U.S. and other countries.

* Other names and brands may be claimed as the property of others.

Copyright © 2018 Intel Corporation. All Rights Reserved.

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804