Intel® C and C++ Compilers

Leadership application performance

  • Rich set of components to efficiently implement higher-level, task-based parallelism
  • Future-proof applications to tap multicore and many-core power
  • Compatible with multiple compilers and portable to various operating systems

Performance without compromise

  • Industry leading performance on Intel and compatible processors.
  • Extensive optimizations for the latest Intel processors, including Intel® Xeon Phi™ coprocessor
  • Scale forward with support multi-core, manycore and multiprocessor systems with OpenMP, automatic parallelism, and Intel Xeon Phi coprocessor support
  • Patented automatic CPU dispatch feature gets you code optimized for the current running processor runs code optimized for specified processors identified at application runtime.
  • Intel® Performance Guide provides suggestions for improving performance in your Windows* applications.

Broad support for current and previous C and C++ standards, plus popular extensions

  • Language support with full C++11 and most C99 support. For details on C++11, see http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler
  • Extensive OpenMP 4.0* support

Faster, more scalable applications with advanced parallel models and libraries

Intel provides a variety of scalable, easy to use parallel models. These highly abstracted models and libraries simplify adding both task and vector parallelism. The end result is faster, more scalable applications running on multi-core and manycore architectures.

Intel® Cilk™ Plus (included with Intel C++ compiler)

  • Simplifies adding parallelism for performance with only three keywords
  • Scale for the future with runtime system operates smoothly on systems with hundreds of cores.
  • Vectorized and threaded for highest performance on all Intel and compatible processors
  • Click here for sample code, contributed libraries, open specifications and other information from the Cilk Plus community.
  • Included with Intel C++ compiler and available in GCC 4.9 development branch (with –fcilkplus and the caveat that Cilk_for is not supported yet in a Clang*/LLVM* project at http://cilkplus.github.io/.
  • More information

OpenMP 4.0 (included with Intel C++ compiler)

  • Support for most of the new features in the OpenMP* 4.0 API Specification (user-defined reductions not yet supported)
  • Support for C, C++, and Fortran OpenMP programs on Windows*, Linux*, and OS X*
  • Complete support for industry-standard OpenMP pragmas and directives in the OpenMP 3.1 API Specification
  • Intel-specific extensions to optimize performance and verify intended functionality
  • Intel compiler OpenMP libraries are object-level compatible with Microsoft Visual C++* on Windows and GCC on Linux*

Intel® Math Kernel Library

  • Vectorized and threaded for highest performance using de facto standard APIs for simple code integration
  • C, C++ and Fortran compiler-compatible with royalty-free licensing for low cost deployment
  • More information

Intel® Integrated Performance Primitives

  • Performance: Pre-optimized building blocks for compute-intensive tasks
  • A consistent set of APIs that support multiple operating systems and architectures
    • Windows*, Linux*, Android*, and OS X*
    • Intel® Quark™, Intel® Atom™, Intel® Core™, Intel® Xeon®, and Intel® Xeon Phi™ processors
  • More information

Intel® Threading Building Blocks

  • Rich set of components to efficiently implement higher-level, task-based parallelism
  • Compatible with multiple compilers and portable to various operating systems
  • More information

Intel® Media SDK 2014 for Clients

  • A cross-platform API for developing consumer and professional media applications.
  • Intel® Quick Sync Video: Hardware-accelerated video encoding, decoding, and transcoding.
  • Development Efficiency: Code once now and see it work on tomorrow's platforms.
  • More information

A drop-in addition for C and C++ development

  • Windows*
    • Develop, build, debug and run from the familiar Visual Studio IDE
    • Works with Microsoft Visual Studio* 2008, 2010, 2012 and 2013
    • Source and binary compatible with Visual C++*
  • Linux*
    • Develop, build, debug and run using Eclipse* IDE interface or command line
    • Source and binary compatible with GCC
  • OS X*
    • Develop, build, debug and run from the familiar Xcode* IDE
    • Works with Xcode 4.6, 5.0 and 5.1
    • Source and binary compatible with LLVM-GCC and Clang* tool chains
  • 32-bit and 64-bit development included

  1. Project and source in Visual Studio
  2. C/C++ aware text editor
  3. Debug C/C++ code
  4. Call Stack information
  5. Set breakpoints at certain source lines on IDE.

Outstanding support

One year of support included with purchase – gives you access to all product updates and new versions released in the support period plus access to Intel Premier Support. There's a very active user forum for help from experienced users and Intel engineers

  • Videos on Getting Started with Intel® C++ Compiler
  • Vectorization Essentials
  • Performance Essentials with OpenMP 4.0 Vectorization
  • View slides

Register for future Webinars


Previously recorded Webinars:

  • Update Now: What’s New in Intel® Compilers and Libraries
  • Performance essentials using OpenMP* 4.0 vectorization with C/C++
  • Intel® Cilk™ Plus Array Notation - Technology and Case Study Beta
  • OpenMP 4.0 for SIMD and Affinity Features with Intel® Xeon® Processors and Intel® Xeon Phi™ Coprocessor
  • Introduction to Vectorization using Intel® Cilk™ Plus Extensions
  • Optimizing and Compilation for Intel® Xeon Phi™ Coprocessor

Featured Articles

No Content Found

More Tech Articles

Resolving problem when building HDF5* with Intel® compiler 14.0
By Yolanda Chen (Intel)Posted 11/12/201310
Introduction To build the latest HDF5* with Intel® compiler 14.0, a segmantation fault occurs when running "make check". This article is to provide a solution in resolving this issue. The information in this article is assuming you already undertand how to build HDF5* with Intel compilers by read...
Getting Started with Intel® Composer XE 2013, New User Compiler Basics
By AmandaS (Intel)Posted 11/07/20130
Compiler Methodology for Intel® MIC Architecture Getting Started with Intel® Composer XE 2013, New User Compiler Basics Overview Modern compilers can be invoked with hundreds of options. From these, what are the essential set of options needed by the typical application programmer? This chapter h...
Memory Allocation and First-Touch
By AmandaS (Intel)Posted 11/07/20132
Compiler Methodology for Intel® MIC Architecture Memory Allocation and First-Touch Memory allocation is expensive on the coprocessor compared to the Intel® Xeon processor so it is prudent to reuse already-allocated memory wherever possible. For example, if a function gets called repeatedly (say...
Overview of Vectorization Reports and the -vec-report6 Option
By Ronald W Green (Intel)Posted 11/07/20130
Compiler Methodology for Intel® MIC Architecture Overview of Vectorization Reports and the -vec-report6 Option Note: This article applies to Intel Compiler version 14.X and earlier. With version 15.0, the four optimization report options (-opt-report, -vec-report, -openmp-report, and -par-re...
Subscribe to Intel Developer Zone Articles

Supplemental Documentation

No Content Found
Subscribe to Intel Developer Zone Articles

You can reply to any of the forum topics below by clicking on the title. Please do not include private information such as your email address or product serial number in your posts. If you need to share private information with an Intel employee, they can start a private thread for you.

New topic    Search within this forum     Subscribe to this forum


__builtin_expect() for switch() statement
By Marián "VooDooMan" Meravý20
Greetings, I am using hints for ICC regarding branch prediction, i.e.: #ifndef my_likely # if defined(__GNUC__) || defined(__INTEL_COMPILER) # define my_likely(x) __builtin_expect(!!(x),1) # define my_unlikely(x) __builtin_expect(!!(x),0) # else # define my_likely(x) (x) # define my_unlikely(x) (x) # endif #endifand it is used as e.g.: signed int x=...; if(my_likely(x>0)) { .... }but what about "switch(...)" branching statement + "case:" "labels" ? is there any way to instruct compiler that "case:" label is "likely" more than others? This is crucial for my application to enforce branch prediction at compile time. If Intel have no support for this, then, please, take this as a "feature support request". Best, VooDooMan
OMP task final
By Sergey L.9
Hello, I have just started to learn omp tasks and have a question about final clause. I compiled the following code based on the example from https://software.intel.com/sites/products/documentation/doclib/iss/2013/...  with Intel C++ 15.0.0.108 and ran it on simple binary tree of level 3. #include <iostream> #include <omp.h> const int MAX_LEVEL = 3; using namespace std; struct node { struct node *left; struct node *right; int nodeNumber; }; void process(node * pNode) { #pragma omp critical { cout<<omp_get_thread_num()<<" "<<pNode->nodeNumber<<endl; } } void traverse( struct node *p, int lev, int finLevel ) { if (p->left) #pragma omp task final(1) // p is firstprivate by default traverse(p->left,lev+1,finLevel); if (p->right) #pragma omp task final(1)// p is firstprivate by default traverse(p->right,lev+1, finLevel); process(p); } void allocateNodes(node **p, int level, int *nodeNumber) { *p = new node; (*p)-&g...
Intel Non-Commercial Software Development Programme Discontinued?
By tp2
Intel used to offer a license for non-commercial software development, valid for a year. I notice the page is under revision, and has been since September, which I interpret as subtle code for discontinued. https://software.intel.com/en-us/non-commercial-software-development
icpc generates invalid symbol
By ed_rosenbloom5
I am using icpc 11.1.073. I have seen this same behavior with other versions as well. In my cross compilation env, building for SLES11 SP1, icpc generates the following symbol:  _ZNSi5seekgElSt12_Ios_Seekdir  I link w/ libstdc++ and all is well. If I use the same compiler and build for RHEL 6.2.0, icpc generates the following symbol for the same source code: _ZNSi5seekgExSt12_Ios_Seekdir.  This symbol is not found in libstdc++.  Strangely, this definition is used in the 32bit version of libstdc++. All compilation is done for 64-bit output. Any ideas what might cause this discrepancy?    
Bug with nested device data environments implementation
By Alexandros P.5
According to OpenMP 4.0 specification page 177 line 17 If a corresponding list item of the original list item is in the enclosing device data environment, the new device data environment uses the corresponding list item from the enclosing device data environment. No additional storage is allocated in the new device data environment and neither initialization nor assignment is performed, regardless of the map-type that is specified. When running the program below the output I get is: line 32: Error on "x_start" expected value 2 found value 3 line 37: Error on "x" expected value 6 found value 5 This is with "icc version 14.0.4 (gcc version 4.4.7 compatibility)". The "map(x)" clause is working correctly on the "target" clause in line 27 but not on the "target data" clause in line 24. While it uses the existing "corresponding list item" like it should, it still acts as a "tofrom", updating the corresponding variable before executing the clause's body and updating the original ...
Multiple constexpr bugs
By qweasd q.9
Hello, The following program doesn't compile with icpc version 15.0.1 but compiles fine with clang++ 3.5 and g++ 4.9.2: #include <iostream> #include <type_traits> template<class K> class Bar {     public:         typedef K type; }; template<class K> class Foo {     public:         static constexpr const char* const foobar = std::is_same<K, typename Bar<K>::type>::value ? "yo" : "lo"; }; Searching for a workaround on the web, it looks like the following bug is still present with icpc version 15.0.1: http://stackoverflow.com/questions/22540153/intel-icpc-constexpr (compiles fine with clang++ 3.5 and g++ 4.9.2). Could you please confirm that you can reproduce both bugs ? If so, could you figure out a work around please ? Thank you for looking.
OpenMP with multiple processes
By schwitrs6
  I have an computational application which makes heavy use of fork to generate subprocesses which carry out (mostly) independent calculations. With Intel C++ 14.0.3 20140422, I find that the application gives incorrect results for OMP_NUM_THREADS>1 if I have called fork(), but works otherwise. Is there some way to fix this? Could I, for instance, explicitly shut down OpenMP before the fork and then restart it? thank you-- Charles
Intel Composer 2015 will throw a Segmentation fault when installed to a docker container
By the c.15
Intel Composer 2015 will throw a Segmentation fault when installed to a docker container. Steps to reproduce (using ubuntu as a host): mkdir data cd data wget http://registrationcenter-download.intel.com/akdlm/irc_nas/4933/l_compxe... tar xvzf l_compxe_2015.1.133.tgz docker run -i -t -v `pwd`:/data ubuntu /bin/bash data/l_compxe_2015.1.133/install.sh # This step will throw segfault ############################## root@8d5781f9642a:/# sh -x data/l_compxe_2015.1.133/install.sh ...... + //data/l_compxe_2015.1.133/pset/32e/install --TEMP_FOLDER=/tmp/install.KErWQr --log-disable --__get_string__=/tmp/intel.pset.strings..8d5781f9642a Segmentation fault (core dumped) .... root@8d5781f9642a:/# dmesg [ 8350.149422] install[4080]: segfault at 0 ip 00007f526644e67a sp 00007fff6d345538 error 4 in libc-2.19.so[7f52663c5000+1bb000] root@8d5781f9642a:/data# strace //data/l_compxe_2015.1.133/pset/32e/install --TEMP_FOLDER=/tmp/install.KErWQr --log-disable --__get_string__=/tmp/intel.pset.strings..8d...
Subscribe to Forums

You can reply to any of the forum topics below by clicking on the title. Please do not include private information such as your email address or product serial number in your posts. If you need to share private information with an Intel employee, they can start a private thread for you.

New topic    Search within this forum     Subscribe to this forum


intel cilk plus cilkscreen and tbb/scalable_allocator
By pitsianis0
Dear friends, the following simple code seems to run just fine, however, cilkscreen is shouting "Race condition"! Shall I trust it? Or it is just false sharing? So, what scalable memory allocator is fast and thread safe to use with intel cilk plus?   #include <cilk/cilk.h> #include "tbb/scalable_allocator.h" char * array[10000000]; int main(int argc, char **argv) { cilk_for (int i = 0; i < 10000000; i++) { array[i] = (char *) scalable_malloc(1); } cilk_for (int i = 0; i < 10000000; i++) { scalable_free(array[i]); } return 0; } I compile it with icc -lcilkrts -ltbbmalloc -o example -O3 -std=c99 example.cbut  $ /usr/pkg/intel/bin/cilkscreen ./example Cilkscreen Race Detector V2.0.0, Build 3566 Race condition on location 0x7fc83fd4ae90 write access at 0x7fc83fb0fd5c: (/tmp/tbb.MXm12595/1.0/build/fxtcarvm024icc13_0_64_gcc4_6_cpp11_release/../../src/tbbmalloc/tbbmalloc_internal.h:913, rml::internal::TLSKey::createTLS+0xec) read access at 0x7fc83fb0...
Internal compiler error 010101_239
By martin.toeltsch@symena.com12
Hi guys, I condensed our project down to a piece of code that lets you reproduce the following issue. When I compile this in Release configuration (Debug works), I get this compiler error: 1>------ Build started: Project: ng-gtest, Configuration: Release x64 ------ 1> CilkTest.cpp 1>" : error : 010101_239 1> 1> compilation aborted for General\CilkTest.cpp (code 4) ========== Build: 0 succeeded, 1 failed, 3 up-to-date, 0 skipped ========== This is our compiler: Intel(R) C++ Intel(R) 64 Compiler XE for Intel(R) 64, version 14.0.3 Package ID: w_ccompxe_2013_sp1.3.202 OS: Windows 7, x64. This is the code: #include <math.h> const int VecSize = 8; const short* acdata; const short* lowdata; const unsigned short* meas_data; const unsigned short* rdval; short trident[2 * VecSize]; short speed[2 * VecSize]; float spdfact[VecSize]; float spdfact2[VecSize]; float tdat[VecSize]; float array1[VecSize]; float array2[VecSize]; const float *input_01; const float *inpu...
Efficient prefix scan library in Cilk Plus and accessible from C?
By pitsianis3
Is there any efficient prefix scan library for Cilk Plus accessible from C? I was not able to find any and my implementation can hardly compete with the sequential version :-) An interface similar to the reducers will work nicely. Thank you.
Cilk worker scheduling
By Haris R.1
Hello, I would like to understand better how Cilk scheduling works.  I am not sure how to phrase this question so I give it my best. I have downloaded the latest Intel Cilk runtime release (cilkplus-rtl-003365 -  released 3-May-2013). I use the classical Fibonacci example in Cilk. I wanted to know on what CPU core each worker executes. To Fibonacci example, I added a function that checks CPU affinity for every worker as in here: http://linux.die.net/man/3/pthread_getaffinity_np “printf” is located in “int fib(int n)” of the Fibonacci sample code. I get WORKER ID using “__cilkrts_get_worker_number()” While the program runs, I print each WORKER's ID and the CPU core affinity of each worker.  However, the result surprises me. I expected that some of the workers would run on different CPU cores but it seems that all workers are running on the same exact CPU core.  For example, I get this for every “printf” when running “./fib 30”: ***** WORKER ID: 0 on CPU core: 7 ***** ***** W...
Parallel Search With Cilk Plus
By Ömer Faruk Kalkan6
Hi everyone , I have a program that generating random number if it does not exist in ( allocated custom size) array  then add array. But if custom size is very big   ( 1 million )  after a period search is very slowing down. I did learn  cilk_for and reducers.I want to paralleize but I could not decide what reducer is suitable for array. Is there someone who can help me ?  (Sorry for my english if you do not understand my problem you can write my e-mail   " 03011241@st.meliksah.edu.tr " )    
Question on the Status of Cilk Plus Support in GCC Mainline
By Yufeng Z.5
Hi, I read from the GCC 4.9.0 release notes that http://gcc.gnu.org/gcc-4.9/changes.html Support for Cilk Plus has been added and can be enabled with the -fcilkplus option. Cilk Plus is an extension to the C and C++ languages to support data and task parallelism. The present implementation follows ABI version 1.2; all features but _Cilk_for have been implemented. I wonder if _Cilk_for is the only feature that is missing from the GCC 4.9.0 release as well as the mainline branch. Another question is about the libcilkplus in the GCC.  For patches to libcilkplus in GCC, is http://www.cilkplus.org/submit-cilk-contribution still the right place to submit a patch? If yes, how often is the GCC libcilkplus synced with the upstream version? Thanks, Yufeng  
Cilk Plus and Graphics Application
By Yaknan G.12
Hi, I am trying to parallelize a c++ raytracing engine which renders pixels to screen using cilk plus. How can I convert a windows application to a console application so that I can use the cilk keywords in cilk_main() or is there perhaps another alternative way to using cilk keywords with the WinMain() method. I tried using OpenGL calls but am having trouble with that, you can see my post on the link http://stackoverflow.com/questions/23289466/how-do-i-display-the-result-of-a-raytracing-engine-in-using-opengl I will appreciate any help I can get Thanks
Cilk view got error with program compiled by GCC 4.9.0
By Son D.0
Hi, Recently, I have been compiling my Cilk plus program with GCC 4.9.0. Then I ran Cilk view to measure its parallelism and got this error: Cilkview: Generating scalability data Cilkview Scalability Analyzer V2.0.0, Build 3229 C:Tool (or Pin) caused signal 11 at PC 0x7f9124cd1dd3   Interestingly, when I compiled the program with GCC 4.8.2 and ran it with Cilk view again, it ran fine. So does it only happen with GCC 4.9.0? My guess is that GCC 4.9.0 isn't stable enough or not compatible with Cilk view at this time. Thanks, 
Subscribe to Forums