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

Advanced Optimizations for Intel® MIC Architecture, Low Precision Optimizations
By AmandaS (Intel)Posted 11/25/20130
Compiler Methodology for Intel® MIC Architecture Advanced Optimizations for Intel® MIC Architecture, Low Precision Optimizations Overview The latest Intel Compilers (released after the 13.0.039 Beta Update 1 release) do not generate low-precision sequences unless low-precision options are adde...
OpenMP Related Tips
By AmandaS (Intel)Posted 11/25/20130
Compiler Methodology for Intel® MIC Architecture OpenMP Related Tips OpenMP* Loop Collapse Directive   Use the OpenMP collapse-clause to increase the total number of iterations that will be partitioned across the available number of OMP threads by reducing the granularity of work to be done...
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...
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


x86_64-k1om-linux-ld: final link failed
By sun l.1
Today I compile radiosity program. gcc work fine. There is warnings with icc. Error with "icc -mmic" Any help? Thanks.   ``` [root@amax src]# make make -C glibdumb     make[1]: Entering directory `/home/wang/splash2/apps/radiosity/src/glibdumb' make[1]: Nothing to be done for `all'. make[1]: Leaving directory `/home/wang/splash2/apps/radiosity/src/glibdumb' make -C glibps     make[1]: Entering directory `/home/wang/splash2/apps/radiosity/src/glibps' make[1]: Nothing to be done for `all'. make[1]: Leaving directory `/home/wang/splash2/apps/radiosity/src/glibps' icc -mmic -I./glibdumb -I./glibps -I/usr/local/include -g   -g -w -lpthread -lm  rad_main.o patchman.o elemman.o taskman.o modelman.o smallobj.o display.o visible.o rad_tools.o room_model.o  ./glibdumb/glib.a glibps/glibps.a -o radiosity x86_64-k1om-linux-ld: i386:x86-64 architecture of input file `./glibdumb/glib.a(glib.o)' is incompatible with k1om output x86_64-k1om-linux-ld: i386:x86-64 architecture of input fil...
Why is my project still being linked using LINK instead of xilink?
By dnesteruk6
I've just converted a project that used the Microsoft compiler to use the Intel one. I'm using Visual Studio 2013 and Intel C++ 15. Now, looking at compiler output, I see the following: 1>icl: : warning #10210: problem with Microsoft compilation of 'Everything.cpp' 1>Everything.obj : warning LNK4229: invalid directive '/Intel(R) compiler non-linkable IL object file' encountered; ignored 1>LINK : fatal error LNK1561: entry point must be defined ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== So clearly we are still using Visual Studio's linker and this is why the build fails. So, can someone help me figure out how to get the project to use the Intel linker? Thanks.
Apple OS X 10.9: ld: warning: can't find atom for N_GSYM stabs
By Anthony A.1
Greetings: The following warning doesn't appear to cause any problems however I'd like to understand how to fix it. When I link an application on Apple OS X 10.9.5 with up-to-date Intel C++ I receive the following warnings. ld: warning: can't find atom for N_GSYM stabs __ZN3rml8internal9FreeBlock12minBlockSizeE in /usr/bin/icpc-15.0-base/compiler/lib/libiomp5.a(iomp.o) ld: warning: can't find atom for N_GSYM stabs __ZN3rml8internal13BackRefMaster6dataSzE in /usr/bin/icpc-15.0-base/compiler/lib/libiomp5.a(iomp.o) ld: warning: can't find atom for N_GSYM stabs __ZN3rml8internal10MemoryPool18defaultGranularityE in /usr/bin/icpc-15.0-base/compiler/lib/libiomp5.a(iomp.o) ld: warning: can't find atom for N_GSYM stabs __ZN3rml8internal5Block16emptyEnoughRatioE in /usr/bin/icpc-15.0-base/compiler/lib/libiomp5.a(iomp.o) ld: warning: can't find atom for N_GSYM stabs __ZN3rml8internal18minLargeObjectSizeE in /usr/bin/icpc-15.0-base/compiler/lib/libiomp5.a(iomp.o) ld: warning: can't find atom fo...
Atomic.h(16): internal error: access violation occuring on multiple files
By Alex K.3
Hi all, Using ICL 13 SP1 Update 5 and Visual Studio 2013 Update 4 I get the following error on multiple files: C:\Program Files (x86)\Intel\Composer XE 2013 SP1\compiler\include\atomic(16): internal error: access violation #include_next <atomic> ^I've attached the following things: Files this error occurs on Build log Preprocess of those files There are many more files where the same issue occurs, but too many to include. Any help would be greatly appreciated!
_Pragma(&quot;vector always&quot;) errors
By meldaproduction6
_Pragma("vector always") causes compilation errors with the newest ICC. I'm not explicitly enabling C++11 or anything.
Install on windows to disk other than C: ?
By Mike U.7
It is not obvious to me how to get the compiler to install to an external disk. I do not have sufficient space on my C: drive to install. This is with parallel_studio_2015_update2  
Intel C++ compiler produces a HUGE code
By meldaproduction10
Hi, I'm spending way too much time comparing MSVC and Intel C++ compiler. My current results are that MSVC generates sometimes better code, sometimes worse, but if it is better, than it's just a little, but if it is worse, the proportions are worse. Since my code is highly dependent on floating point signal processing, I assume the better vectorization and AVX dispatching could be the reason. So I'm keen on switching to Intel compiler. BUT MSVC output executables are almost 2x smaller than Intel executables!! To be specific, a big project of mine has 44MB by intel and 24MB by msvc. This makes it rather difficult to justify the rather small difference in performance. I also tried to zip them just to see the difference in entropy and msvc compressed to 5 MB, intel to 6 MB. That looks like there's a lot of redundant data in the executables and I'm thinking if I'm not missing some compiler/linker option to remove these things. Here are my command lines (just options, some of them are pr...
Is pointer aliasing a problem if the pointers are the same?
By meldaproduction10
Hi, consider this functions intended for vectorization: void AddSqr(float* restrict dst, float* restrict src, int cnt) { for (int i=0; i<cnt; i++) dst[i] = src[i] * src[i]; }; This would work if the src & dst are not aliased of course. But what if src == dst? Extreme cases such as src == dst+1 are not allowed of course. But if the pointers are the same, there shouldn't be a problem, or am I missing something?
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


Less performance on 16 core than on 4 ?!
By sdfsadfasdf s.2
Hi there, I evaluated my cilk application using "taskset -c 0-(x-1) MYPROGRAM) to analyze scaling behavior.   I was very suprised to see, that the performances increases up to a number of cores but decreases afterwards. for 2 Cores, I gain a speedup of 1,85. for 4, I gain 3.15. for 8 4.34 - but with 12 cores the performance drops down to a speedup close to the speedup gained by 2 cores (1.99). 16 cores performe slightly better (2.11) How is such an behaviour possible? either an idle thread can steal work or it cant?! - or may the working packets be too coarse grained and the stealing overhead destroys the performance with too many cores in use?!
Exception when run project at debug mode using cilk_for
By Tam N.1
Dear all, I have used cilk_plus to make parallel processing into my source code with visual studio 2008 IDE. But when I build it at debug mode, the project throw an exception below: "Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function pointer declared with a different calling convention" How can  I resolve it to make debug mode operated ? Thanks of all, Tam Nguyen  
Cilk Tools error while loading shared libraries
By Nicholas N.7
I have successfully compiled cilkplus for gcc (4.8 branch) on Ubuntu 14.04 LTS and compiled the example program fib on the cilkplus website.  I would like to run cilkview and cilkscreen on it, and so I downloaded cilk tools from the website as well.  However, when I try to run cilkview, I get the following error: Cilkview: Generating scalability data -t: error while loading shared libraries: -t: cannot open shared object file: No such file or directory I've tried changing the environment variables $LIBRARY_PATH and $LD_LIBRARY_PATH to point to the libraries in the cilk tools directory, but I still come up with the same error.  I also noticed that on the cilk tools downloads, for linux there is an extra set of libraries (libelf and libdwarf), which I have also installed on my system.  I tried looking at the depenencies for cilkview, but I couldn't find anything unusual with those.  Here is the output: $ ldd cilkview     linux-gate.so.1 =>  (0xf7735000)     libm.so.6 => /lib32/l...
Cilk_for returns wrong data in array.
By Đặng P.8
Hello everyone. I am new to multi threading programming. Recently, i have a project, which i apply cilk_for into it. Here is the code: void myfunction(short *myarray) { m128i *array = (m128i*) myarray cilk_for(int i=0; i<N_LOOP1; i++) { for(int z = 0; z<N_LOOP2; z+=8) { array[z] = _mm_and_si128(array[z],mym128i); array[z+1] = _mm_and_si128(array[z+1],mym128i); array[z+2] = _mm_and_si128(array[z+2],mym128i); array[z+3] = _mm_and_si128(array[z+3],mym128i); array[z+4] = _mm_and_si128(array[z+4],mym128i); array[z+5] = _mm_and_si128(array[z+5],mym128i); array[z+6] = _mm_and_si128(array[z+6],mym128i); array[z+7] = _mm_and_si128(array[z+7],mym128i); array+=8; } } }After the above code ran, ridiculous thing happens. The data in array isn't updated correctly. For example, if i have an array with 1000 elements, there is a chance that the array will be updated correctly (100...
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...
Subscribe to Forums