Intel C++ Compiler 16.0 Update 4 for OS X* Release Notes for Intel Parallel Studio XE 2016

This document provides a summary of new and changed product features and includes notes about features and problems not described in the product documentation. 

Please see the licenses included in the distribution as well as the Disclaimer and Legal Information section of these release notes for details. Please see the following links for information on this release of the Intel® C++ Compiler 16.0 Update 4.

Change History

This section highlights important from the previous product version and changes in product updates.  

Changes in Update 4 (Intel® C++ Compiler 16.0.4)

  • Fixes for reported problems

Changes in Update 3 (Intel® C++ Compiler 16.0.3)

Changes in Update 2 (Intel® C++ Compiler 16.0.2)

Changes in Update 1 (Intel® C++ Compiler 16.0.1)

 

  • Support for Xcode* 7.0, 7.1
  • Support for new features in OpenMP* draft specification TR3
  • Support for OS X* 10.11
  • Fixes for reported problems
  • Documentation updates

Changes since Intel® C++ Compiler 15.0 (New in Intel® C++ Compiler 16.0.0)

Back to top

System Requirements

  • A 64-bit Intel®-based Apple* Mac* system host (development for 32-bit is still supported)
  • 2GB RAM minimum, 4GB RAM recommended
  • 3GB free disk space
  • One of the following combinations of OS X*, Xcode* and the Xcode SDK: 
    • OS X 10.10, 10.11, 10.11.1, 10.11.2, 10.11.3, or 10.11.4
    • Xcode* 6.0, 6.1, 6.2, 6.3, 6.4, 7.0, 7.1, 7.2, or 7.3
  • If doing command line development, the Command Line Tools component of Xcode* is required

Note: Advanced optimization options or very large programs may require additional resources such as memory or disk space.

Back to top

How to use the Intel® C++ Compiler

The Getting Started Guide at <install-dir>/documentation_2016/ps2016/getstart_comp_oc.htm. contains information on how to use the Intel® C++ Compiler from the command line and from Xcode*.

Back to top

Documentation

Product documentation is linked from <install-dir>/documentation_2016/en/ps2016/getstart_comp_oc.htm.  Full documentation for all tool components is available at the Intel® Parallel Studio XE Support page.

Intel-provided debug solutions

Back to top

Samples

Product samples can be located in the <install-dir>/samples_2016/en/compiler_c/psxe directory.

Back to top

Technical Support

If you did not register your compiler during installation, please do so at the Intel® Software Development Products Registration Center at http://registrationcenter.intel.com. 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: http://www.intel.com/software/products/support/ 
Note: If your distributor provides technical support for this product, please contact them for support rather than Intel.

Back to top

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.

New version of x86intrin.h header replaces version from Xcode* 7.3

  • The x86intrin.h header from Xcode* 7.3 changes the definition of certain vector types (for example, the definition of __m256) and is incompatible with Intel's version of x86intrin.h as provided in Intel® C++ Compiler 16.0.2 or earlier.  A new version of the header is provided with Intel® C++ Compiler 16.0.3 that replaces the Xcode* 7.3 version for codes that #include <x86intrin.h>

Intrinsics for the Short Vector Random Number Generator (SVNG) Library

  • The Short Vector Random Number Generator (SVRNG) library provides intrinsics for the IA-32 and Intel® 64 architectures running on supported operating systems.  The SVRNG library partially covers both standard C++ and the random number generation functionality of the Intel® Math Kernel Library (Intel® MKL).  Complete documentation may be found in the Intel® C++ Compiler 16.0 User and Reference Guide.

Support for new features in OpenMP* 4.5 Specification

 

  • Support for #pragma omp simd simdlen(n)
  • Support for #pragma omp ordered simd
  • Intel® processor clause extension added to #pragma omp declare simd (proposed; not officially part of OpenMP* 4.5)
  • The linear clause on the #pragma omp declare simd directive is extended with new modifiers:
    • linear (linear-list [ : linear-step]) where linear-list is one of:
      • list
      • modifier (list) where modifier is one of ref, val, or uval
    • All list items must be arguments of the function that will be invoked on each SIMD lane
    • If no modifier is specified, or if the val or uval modifier is specified, the value of each list item on each lane corresponds to the value of the list item upon entry to the function plus the logical number of lanes times linear-step
    • If the uval modifier is specified, each invocation uses the same storage location for each SIMD lane; this storage location is updated with the final value of the logically last lane
    • If the ref modifier is specified, the storage location of each list item on each lane corresponds to an array at the storage location upon entry to the function indexed by the logical number of the lane times linear-step

Intel® C++ Compiler SIMD Data Layout Templates (SDLT)

  • SDLT is a library that helps you leverage SIMD hardware and compilers without having to be a SIMD vectorization expert.
  • SDLT can be used with any compiler supporting ISO C++11, Intel® Cilktm Plus SIMD extensions, and #pragma ivdep
  • Intel® C++ Compiler SIMD Data Layout Templates:
    • Enable you to program in an AOS style while data layout is SOA for vectorization
    • Target effective SIMD vectorization for performance
    • Are compatible with other explicit SIMD programming models
  • For SDLT to generate efficient SIMD code, the following compiler options are required or recommended:
    • C++11 support
      • /Qstd:c11 (Windows*) or -std=c11 (Linux*/OS X*)
    • Code optimization level of 2 or higher
      • /O2 or /O3 (Windows*) or -O2 or -O3 (Linux*/OS X*)
    • ANSI aliasing rules in optimizations
      • /Qansi-alias (Windows*) or -ansi-alias (Linux*/OS X*)
    • Optionally tell the compiler which processor features it may target
      • /Qxcode (Windows*) or -xcode (Linux*/OS X*)
    • Optionally tell the compiler to generate multiple, feature-specific auto-dispatch code paths for Intel® processors if there is a performance benefit
  • GCC 4.7 or later is required for SDLT to work on Linux* due to C++11 dependencies.  GCC 4.8 or later is recommended for using SDLT with STL algorithms.
  • Microsoft Visual Studio* 2012 or later is required for SDLT to work on Windows* due to C++11 dependencies

Support for OS X* 10.11

  • OS X* 10.11 introduces a new security policy called System Integrity Protection (SIP).  This significantly impacts certain installation scenarios.  Please see OS X* 10.11 Support in Intel® Parallel Studio XE 2016 for important information before attempting to install on OS X* 10.11

Support for additional OpenMP* 4.0 features

  • Support for #pragma omp declare reduction to define user-defined reductions
  • Support for #pragma omp simd collapse(n)

Intel® Data Analytics Acceleration Library (Intel® DAAL)

  • Intel® DAAL boosts big data analytics and machine learning performance with this easy-to-use library.

C++14 features supported
The Intel® C++ Compiler 16.0 supports the following features with compiler option /Qstd:c++14 (Windows*) or -std=c++14 (Linux*/OS X*)

C11 features supported

The Intel® C++ Compiler 16.0 supports the following features with compiler option /Qstd:c11 (Windows*) or -std=c11 (Linux*/OS X*)

cilk_for loops now accepted with #pragma simd
C/C++ for loops parallelized using the Intel® Cilk™ Plus cilk_for keyword can now also be targeted for explicit vectorization using either #pragma simd or the _Simd keyword.

-fstack-protector-strong now supported
The Intel(R) C++ Compiler in beta update 2 now supports the gcc* 4.9 option -fstack-protector-strong.

Intel(R) Math Kernel Library (Intel(R) MKL) with Intel(R) Threading Building Blocks (Intel(R) TBB) Threading Layer supported
The Intel(R) C++ Compiler in beta update 2 adds support for using the Intel MKL threading layer support for Intel TBB. These libraries will be used when both /Qmkl and /Qtbb (Windows*) or -mkl and -tbb (Linux* / OS X*) are specified and /Qopenmp, -qopenmp, or -fopenmp are not specified. If OpenMP* is required, but you want to utilize the Intel MKL libraries that use Intel TBB, you will need to explicitly specify the libraries at link time.

Enable respect for parentheses when determining order of operations in expressions
The /Qprotect-parens (Windows*) and -fprotect-parens (Linux*/OS X*) require the compiler optimizer to honor parentheses when evaluation expressions and to not reassociate operations. For example, when these options are used, the compiler would no longer be free to convert:

double y = (a + b) + c;

to

double y = a + (b + c);

These options are not enabled by default, and their use may negatively impact performance.

Compiler intrinsic functions now defined internally
To improve compilation time, the Intel® C++ Compiler 16.0 no longer checks header files for intrinsic function declarations. This can impact type-checking, so to add the function prototypes for this purpose, add the compiler option -D__INTEL_COMPILER_USE_INTRINSIC_PROTOTYPES.

BLOCK_LOOP and NOBLOCK_LOOP pragmas and private clause for unroll_and_jam pragma added
New and updated pragmas have been added to provide loop blocking information to the compiler. This includes new pragmas #pragma BLOCK_LOOP [clause[[,] clause...] ] and #pragma NOBLOCK_LOOP. This also includes the addition of a private(var list) clause to the #pragma unroll_and_jam. See the Intel® C++ Compiler User’s Guide for details.

New and Changed Compiler OptionsFor details on these and all compiler options, see the Compiler Options section of the Intel® C++ Compiler 16.0 User's Guide.

  • -daal[= lib]     Tells the compiler to link certain libraries in the Intel® Data Acceleration Library (Intel® DAAL)
  • -mregparm-version=n   Determines which version of the Application Binary Interface (ABI) is used for the regparm parameter passing convention

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

Compiler options starting with –o are deprecated
All compiler options starting with –o are deprecated. These will be replaced by new options preceded with –q. For example, -opt-report should now be –qopt-report. This is to improve compatibility with third-party tools that expect –o<text> to always refer to output filenames.

Back to top

Known Limitations

Xcode* requires explicit acceptance of Intel bundle at startup for integration to be installed
Beginning with Xcode* 6.3.2, the IDE integration for Intel® Parallel Studio XE does not complete installation until the next time Xcode is started after completing the product installation. When Xcode* is started, you will see a dialog:

The dialog is titled “Unexpected code bundles”, and mentions that Xcode found one or more code bundles not provided by Apple. It then has two buttons, one to “Load Bundles” and one to “Skip Bundles”. “Load Bundles” is required to be clicked to complete the Intel Parallel Studio XE IDE integration. Clicking “Skip Bundles” will cause the Intel tools to not be selectable in Xcode*.

Incompatible with the default libc++ library
Some applications are incompatible with libc++, which is currently enabled as default C++ library in the Intel® C++ Compiler 16.0. For example, the 435.gromacs and 447.dealII from SPEC CPU2006 suite. 
Please use -stdlib=libstdc++ to compile such applications.

“Build” or “Run” in Xcode* 5 do not accurately detect and rebuild modified dependencies
When the Intel® C++ Compiler is selected for a project in Xcode* 5, there is an issue where if a file that other files/projects depend on is modified, for example a header file, then the dependent files or libraries will not be automatically rebuilt with the “Build” or “Run” commands. Instead, a “Clean” needs to be done first to do a full rebuild. This issue is being investigated.

Creating new project in Xcode* causes hardcoding of –stdlib=libc++
A new project created in Xcode* causes the hardcoding of a setting for -stdlib=libc++ even for projects that have the Intel® C++ Compiler toolset added. So setting the Intel® C++ Compiler field for the C++ Standard Library setting to libstdc++ is ineffective because libc++ overrides the setting. To change this, do the following:
1.    Select the project row in the navigator area at the left of the workspace window 
2.    In the project editor that appears, select the row that represents the project level of build settings 
3.    You should see the C++ Standard Library setting in bold, indicating that it has a custom value in this project 
4.    Select that row and press the Delete key to remove the customized value 
5.    The C++ Standard Library build property should now have the value Compiler Default
Note that you may have to follow the above steps before adding the Intel® C++ Compiler toolset to your project build rules.

Building Tachyon
For building from Xcode*, you may run into problems building the build_with_tbb configuration with llvm gcc*.  The problem will be that the libtbb.dylib cannot be found.  In this case, go to the Summary->Linked Frameworks and Libraries section, and manually add the libtbb.dylib library from the <install-dir>/tbb/lib directory

Spurious error when a call to a template dependent function is made in a decltype expression in an out-of-line definition for a late-specified return type

  • This is a known regression in Intel® C++ Compiler 16.0 Update 2.  An example is:
  • template <class T>
    struct C {
      int then(int*,int*);
      template <class T2>
      auto then(T2 arg) -> decltype(this->then(&arg, &arg));
    };
    template <class T>
    template <class T2>
    auto C<T>::then(T2 arg) -> decltype(this->then(&arg, &arg)) { return 0; }
    void foo() {
       C<int> f;
       f.then(99);
    }
    
    To work around this problem, the definition can be moved inline, or the use of a late-specified return type should be avoided (by explicitly declaring the return type). 

.

Back to top

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, 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 © 2016 Intel Corporation. All Rights Reserved.

Back to top

 
For more complete information about compiler optimizations, see our Optimization Notice.