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

Контент не найден

More Tech Articles

Preparing for the Intel® Many Integrated Core Architecture
- AmandaS (Intel)Опубликовано: 10/16/20133
Compiler Methodology for Intel® MIC Architecture Preparing for the Intel® Many Integrated Core Architecture The Intel® Many Integrated Core Architecture (Intel® MIC Architecture) provides a product family optimized to deliver performance for highly parallel applications or highly parallel kerne...
Programming and Compiling for Intel® Many Integrated Core Architecture
- AmandaS (Intel)Опубликовано: 10/16/20131
Compiler Methodology for Intel® MIC Architecture This methodology enables you to determine your application's suitability for performance gains using Intel® Many Integrated Core Architecture (Intel® MIC Architecture).
Parallelization with Intel® Cilk™ Plus
- Ronald W Green (Intel)Опубликовано: 10/16/20130
Compiler Methodology for Intel® MIC Architecture Efficient Parallelization, Parallelization with Intel® Cilk™ Plus Overview Intel® Cilk™ Plus is an extension to C and C++ that offers a quick, easy and reliable way to improve the performance of programs on multicore processors. The three Inte...
Common Vectorization Tips
- AmandaS (Intel)Опубликовано: 10/07/20132
Compiler Methodology for Intel® MIC Architecture Common Vectorization Tips Handling user-defined function-calls inside vector-loops If you want to vectorize a loop that has a user-defined function call, (possibly re-factor the code and) make the function-call a vector-elemental function. Spec...
Подписаться на Статьи Intel Developer Zone

Supplemental Documentation

Контент не найден
Подписаться на Статьи Intel Developer Zone

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
- 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?
- 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
- 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
- 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
- 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: ?
- 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
- 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?
- 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?
Подписаться на Форумы

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


How to use the cilkview?
- 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
- 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
- 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
- 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?
- 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 ...
simple cilk_spawn Segmentation Fault
- 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.
cilk_for segmentation fault
- Chris Szalwinski5
Hi, I'm having difficulty comparing cilk_for with cilk_spawn.  The following cilk_spawn code executes as I expect for command line arguments like 1000000 30 // Recursive Implementation of Map // r_map.3.cpp #include <iostream> #include <iomanip> #include <cstdlib> #include <ctime> #include <cmath> #include <cilk/cilk.h> const double pi = 3.14159265; template<typename T> class AddSin { T* a; T* b; public: AddSin(T* a_, T* b_) : a(a_), b(b_) {} void operator()(int i) { a[i] = b[i] + std::sin(pi * (double) i / 180.) + std::cos(pi * (double) i / 180.) + std::tan(pi * (double) i / 180.); } }; template <typename Func> void r_map(int low, int high, int grain, Func f) { if (high - low <= grain) for (int i = low; i < high; i++) f(i); else { int mid = low + (high - low) / 2; cilk_spawn r_map(low, mid, grain, f); } } int main(int argc, char** argv) { if (argc != 3) { std::cerr << "Incorrect number of a...
Floating Point ABI
- Nick T.2
Hello I noticed in the latest CilkPlus ABI specification (https://www.cilkplus.org/sites/default/files/open_specifications/CilkPlu...), it says that the caller to the library must set the floating point flags (top of page 8). This is what the LLVM implementation of CilkPlus and its runtime do, but the current Intel version of the run-time has the code to save the floating point status registers that is in LLVM's code generator and not the runtime from the LLVM repository. Please could you tell me whether: a) The floating point status flags should be set/saved by the caller b) The floating point status flags should be set/saved by the callee c) There's something I've overlooked The ABI says: "/** * Architecture - specific floating point state. mxcsr and fpcsr should be * set when CILK_SETJMP is called in client code. Note that the Win64 * jmpbuf for the Intel64 architecture already contains this information * so there is no need to use these fields on that OS/architecture. */" T...
Подписаться на Форумы