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
  • 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
  • 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

Kein Inhalt gefunden

More Tech Articles

Windows C++ Compiler and Sealed or abstract unions
Von Veröffentlicht am 07/08/20090
The sealed union is not allowed by C++ language.
Namespace-scope using-declarations for class member types
Von Veröffentlicht am 07/08/20090
In Microsoft compatibility, the namespace-scope using-declarations for class member types are no longer accepted by Intel C++ compiler.
OMP: Error #15: Initializing libguide.lib, but found libguide40.dll already initialized.
Von Roland Wiele (Intel)Veröffentlicht am 07/02/20090
Linker error generated when different parts of a program try to link both the static and dynamic versions of the OpenMP runtime. The solution is to expilcitly call out either a dynamic or static link.
OpenMP und inkrementelle Parallelisierung - (article in german)
Von Veröffentlicht am 06/26/20090
In diesem Artikel wird der inkrementelle OpenMP Ansatz zur Parallelisierung von sequentiellen Programmen vorgestellt. Der Schwerpunkt liegt auf der praktischen Darstellung von einfachen Programmbeispielen und nicht auf der Vollständigkeit der Beschreibung
Intel Developer Zone Beiträge abonnieren

Supplemental Documentation

Kein Inhalt gefunden
Intel Developer Zone Beiträge abonnieren

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
Von 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 file …
Why is my project still being linked using LINK instead of xilink?
Von 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
Von 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 for …
Atomic.h(16): internal error: access violation occuring on multiple files
Von 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
Von 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: ?
Von 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
Von 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 prob…
Is pointer aliasing a problem if the pointers are the same?
Von 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?
Foren abonnieren

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

Issue with gather &amp; scatter operations
Von Loïc T.2
Hi, I read on the doc that array notation can be used for array indicies in both cases : C[:] = A[B[:]] and A[B[:]] = C[:]I try to use this notation for left & right operands at the same time but it gives me wrong results. Here is my problem: double tmp[VEC_SIZE]; // Already initialized int index[VEC_SIZE]; // Already initialized tab[index[:]] = tab[index[:]] + tmp[:]; // This line gives wrong result for (int i = 0; i < VEC_SIZE; i++) { tab[index[i]] = tab[index[i]] + tmp[i]; // While this loop gives the correct result }To me, these two versions of the code are supposed to be equivalent, am I wrong ? Can we use array notation for array indicies in left & right operands at the same time ? Thanks
Question on reducers
Von Lawrence R.6
In my search application there are globally variables defined outside any function that I would like to use the cilk reducers on. Specifically I have code like this: #include "search.h" static int total_users = 0; static int total_matches = 0;These total_x variables are incremented throughout the application on different functions. I tried adding the following for total_users and received the following error: cilk::reducer_opadd<static int> total_users;cilk plus error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token What am I doing wrong here?    
How to use the cilkview?
Von Lawrence R.11
I have a C search application  on a centos 6.x 64 bit linux server that I just installed the cilkplus compiler on to take advantage of more cpu/cores. I've added the cilk_spawn function to some recursive scanning functions in my program.  After re-compiling the search application with the cilkplus gcc compiler, the search program is working as intended without any seg faults or any other errors. My question is how do I use the cilkview analyzer? I want to if cilkplus/spawning is helping my search application and if so by how much? Thanks! Lawrence        
developer documents for Cilk Plus
Von Romanov A.0
Hi, First I would like to thank you all for the awesome cilk plus tools you have open source in GCC and LLVM. I am trying to study the runtime library and finding it a bit difficult to follow the execution in a sample application. Are there any developer documents available? A wiki perhaps. Specifically, I am trying to trace the execution path for cilk_spawn which is a key word. Any helpful links to get me started would be really great! Thanks, Arya
Question about steal-continuation semantics in Cilk Plus, Global counter slowing down computation, return value of functions
Von Robert M.5
1) What I understood about steal-continuation is, that every idle thread does not actually steal work, but the continuation which generates a new working item. Does that mean, that inter-spawn execution time is crucial? If 2 threads are idle at the same time, from what I understand only one can steal the continuation and create its working unit, the other thread stays idle during that time?! 2) As a debugging artefact, I had a global counter incremented on every function call of a function used within every working item. I expect this value to be wrong (e.g. lost update), as it is not protected by a lock. what I didn't expect was execution time being 50% longer. Can somone tell me, why this is the case? 3) Du I assume correctly, that a cilk-spwaned function can never (directly) return a result, as the continuation might continue in the mean time and one would never know when the return value is actually written?
Cilk plus implicit threshold
Von Guilherme R.1
Hi, I'm new to cilk, and i wanted to ask if it has an implicit threshold for the task creation, in recursive computations like fib? If so, is it based on the number of tasks created, or in the depth of the computation?   Thanks!
How to make this reduction in Cilk Plus?
Von Ioannis E. Venetis10
Hello, I have code that is structured like this: float A[3], X[M], Y[M], Z[M], OUTX[N], OUTY[N], OUTZ[N]; for (i = 0; i < N; i++) { // Use other arrays and i as an index to these arrays to initialize A[0], A[1], A[2] for (j = 0; j < M; j++) { // Calculate new values for A[0], A[1], A[2] // using more arrays where i and/or j are used as indexes X[j] += A[0]; Y[j] += A[1]; Z[j] += A[2]; } OUTX[i] = A[0]; OUTY[i] = A[1]; OUTZ[i] = A[2]; }I have successfully parallelized the outer loop using OpenMP, making the array A private and adding the atomic directive before the updates to the elements of X, Y and Z (using critical was actually worse). But now I would like to try this code out using Cilk Plus. Although I have read all the documentation about reducers and reduction operations in Cilk Plus, I still cannot formulate in my mind how the above code could be implemented in Cilk Plus. I would like to replace the outer loop with a cilk_for and have so…
simple cilk_spawn Segmentation Fault
Von Chris Szalwinski1
I'm having difficulty running a simple test case using cilk_spawn.  I'm compiling under gcc 4.9.0 20130520. The following fib2010.cpp example, executes in 0.028s without cilk and takes 0.376s with cilk as long as I set the number of workers to 1.  If I change the number of workers to any number greater than one, I get a segmentation fault. // fib2010.1.cpp // #include <iostream> #include <cilk/cilk.h> #include <cilk/cilk_api.h> int fib(int n) { if (n < 2) return n; int x = cilk_spawn fib(n-1); int y = fib(n-2); cilk_sync; return x + y; } int main(int argc, char* argv[]) { std::cout << "No of workers = " << __cilkrts_get_nworkers() << std::endl; int n = 32; std::cout << "fib(" << n << ") = " << fib(n) << std::endl; }  The hardware is Dual Core AMD Opteron 8220.
Foren abonnieren