<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated on Wed, 25 Nov 2009 01:06:50 -0800 -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="http://software.intel.com/en-us/articles/intel-c-compiler-for-windows-kb/type/technical-notes/feed/" rel="self" type="application/rss+xml" />
    <title>Intel Software Network articles feed</title>
    <link>http://software.intel.com/en-us/articles/intel-c-compiler-for-windows-kb/technical-notes/</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Redistributable libraries for the Intel(R) C++ and Visual Fortran Compiler for Windows</title>
      <description><![CDATA[ <p><strong class="sectionHeading">Overview<br /></strong><br />This article contains links to the redistributable installation packages for the Intel Compiler Professional Editions for Windows. <br /><br />The redistributable packages are for the end users who use applications that are built with Intel Compilers. Please note that there is one redistributable package for every compiler update. Make sure you download and install the one recommended by the application vendor. <br /><br /><span class="sectionHeading">OS requirement for redistributable packages for Intel Compiler Professional Editions for Windows 11.1<br /></span><br />The supported OS are: Windows XP*, Vista*, Windows Server 2003*, Windows Server 2008*, Windows HPC Server 2008*.<br /><br /><span class="sectionHeading">Installation instructions<br /></span><br />The installation program of the redistributable package will guide you through the installation. You will need to accept the license and the installation will install all the libraries to the fixed directory. <br /><br />For the redistributable package of Intel C++ Professional Compiler for Windows, the installation directory is <br />[Common Files]\Intel\Shared Files\cpp <br /><br />For the redistributable package of the Intel Fortran Professional Compiler for Windows, the installation directory is <br />[Common Files]\Intel\Shared Files\Fortran<br /><br />The installation will add the above directory to your environment variable "path" as well.</p>
<p>If you wish to install the redistributable package "<strong>silently</strong>", so that no output is presented to the user, run the executable with the following options added to the command line like:<br />&gt;&gt; w_cproc_p_11.1.04x_redist_xxx.exe /S /V/qn<br /><br /><span class="sectionHeading">Links to the redistributable packages<br /></span><br />
<table border="1" cellpadding="0" cellspacing="0" style="width: 653px; height: 182px;">
<tbody>
<tr>
<td width="295" valign="top"><b>Intel C++ Compiler for Windows <br />11.1.048 (update 2 revised) </b><br /><br />
<p><a href="http://registrationcenter.intel.com/irc_nas/1605/w_cproc_p_11.1.048_redist_ia32.exe">• Redistributable library package for IA32</a><br /><a href="http://registrationcenter.intel.com/irc_nas/1605/w_cproc_p_11.1.048_redist_intel64.exe">• Redistributable library package for Intel 64</a><br /><a href="http://registrationcenter.intel.com/irc_nas/1605/w_cproc_p_11.1.048_redist_ia64.exe">• Redistributable library package for IA-64</a></p>
</td>
<td width="295" valign="top"><b>Intel Visual Fortran Compiler for Windows<br />11.1.048 (update 3)</b><br /><br />
<p><a href="http://registrationcenter.intel.com/irc_nas/1604/w_cprof_p_11.1.048_redist_ia32.exe">• Redistributable library package for IA32</a><br /><a href="http://registrationcenter.intel.com/irc_nas/1604/w_cprof_p_11.1.048_redist_intel64.exe">• Redistributable library package for Intel 64</a><br /><a href="http://registrationcenter.intel.com/irc_nas/1604/w_cprof_p_11.1.048_redist_ia64.exe">• Redistributable library package for IA-64</a></p>
</td>
</tr>
<tr>
<td width="295" valign="top"><b>Intel C++ Compiler for Windows <br />11.1.051 (update 3) </b><br /><br />
<p><a href="http://registrationcenter.intel.com/irc_nas/1630/w_cproc_p_11.1.051_redist_ia32.exe">• Redistributable library package for IA32</a><br /><a href="http://registrationcenter.intel.com/irc_nas/1630/w_cproc_p_11.1.051_redist_intel64.exe">• Redistributable library package for Intel 64</a><br /><a href="http://registrationcenter.intel.com/irc_nas/1630/w_cproc_p_11.1.051_redist_ia64.exe">• Redistributable library package for IA-64</a></p>
</td>
<td width="295" valign="top"><b>Intel Visual Fortran Compiler for Windows<br />11.1.051 (update 3)</b><br /><br />
<p><a href="http://registrationcenter.intel.com/irc_nas/1627/w_cprof_p_11.1.051_redist_ia32.exe">• Redistributable library package for IA32</a><br /><a href="http://registrationcenter.intel.com/irc_nas/1627/w_cprof_p_11.1.051_redist_intel64.exe">• Redistributable library package for Intel 64</a><br /><a href="http://registrationcenter.intel.com/irc_nas/1627/w_cprof_p_11.1.051_redist_ia64.exe">• Redistributable library package for IA-64</a></p>
</td>
</tr>
</tbody>
</table>
<br /><br /><span class="sectionHeading">References<br /></span><br /><a href="http://software.intel.com/en-us/articles/redistribution-of-application-binaries-built-for-microsoft-windows/">Redistribution of Application Binaries Built for Microsoft* Windows</a></p> ]]></description>
      <link>http://software.intel.com/en-us/articles/redistributable-libraries-of-the-intel-c-and-fortran-compiler-for-windows</link>
      <pubDate>Wed, 14 Oct 2009 10:13:19 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/redistributable-libraries-of-the-intel-c-and-fortran-compiler-for-windows#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/redistributable-libraries-of-the-intel-c-and-fortran-compiler-for-windows</guid>
      <category>Intel® C++ Compiler for Windows* Knowledge Base</category>
      <category>Intel® Visual Fortran Compiler for Windows* Knowledge Base</category>
    </item>
    <item>
      <title>Building ACE/TAO with Intel(R) C++ Compiler for Windows XP 64-bit using Visual Studio</title>
      <description><![CDATA[ <br />
<div id="art_pre_template"><b>Introduction : </b><br />This document explains how to build ACE/TAO using Intel(R) C++ Compiler for Windows XP 64-bit. From the ACE/TAO web site:<br /><br /><a href="http://www.cs.wustl.edu/~schmidt/ACE.html">ACE</a>† is an open-source framework that provides many components and patterns for developing high-performance, distributed real-time and embedded systems. ACE provides powerful, yet efficient abstractions for sockets, demultiplexing loops, threads, synchronization primitives. <br /><br /><a href="http://www.cs.wustl.edu/~schmidt/TAO.html">TAO</a>† (The ACE ORB) is an open-source implementation of a CORBA Object Request Broker (ORB) built using components and patterns in the ACE framework. <br />Several companies provide commercial support for ACE/TAO, see <a href="http://www.cs.wustl.edu/~schmidt/commercial-support.html">http://www.cs.wustl.edu/~schmidt/commercial-support.html</a>† for information. <br /><br /><br /><b>Version : </b><br />The version of ACE/TAO used in this document is 5.7.2. <br />The 11.1.038 version of the Intel C++ compiler (Intel64) is used.<br /><br /><br /><b>Obtaining Source Code : </b><br />The ACE/TAO source code was downloaded from <a href="http://download.dre.vanderbilt.edu/">http://download.dre.vanderbilt.edu/</a>†.<br /><br /><br /><b>Prerequisites : </b><br />- WinZIP or similar tool for extracting software archives<br />- Microsoft Visual Studio (2003, 2005 or 2008)<br /><br /><br /><b>Configuration and Set-up information : </b><br /><br />1. Extract the archive into a path with no spaces in the path name (e.g., C:\ACE_wrappers).<br /><br />2. Set ACE_ROOT, TAO_ROOT, and PATH environment variables.<br /><br />For example, if ACE/TAO is installed in C:\ACE_wrappers, the variables should look like this:<br />ACE_ROOT=C:\ACE_wrappers<br />TAO_ROOT=%ACE_ROOT%\TAO<br />The PATH variable should contain these directories: %ACE_ROOT%\bin;%ACE_ROOT%\lib<br /><br />Please follow these steps to set the environment variables:<br /><br />- Log into an account with Administrator privilege<br />- Open the Control panel<br />- Click System<br />- Click the Advanced tab and then click the Environment Variables button<br />- Add new ACE_ROOT and TAO_ROOT variables<br />- Edit PATH variable from the System variables list<br />- Click OK<br /><br />3. Create a file named config.h in %ACE_ROOT%\ace with the following contents:<br /><br />#include "ace/config-win32.h"<br /><br />4. Open the solution file that matches your version of Visual Studio. <br />For example, you could find following solution files:<br /><br />%TAO_ROOT%\TAO_ACE.sln (Visual Studio 2003)<br />%TAO_ROOT%\TAO_ACE_vc8.sln (Visual Studio 2005)<br />%TAO_ROOT%\TAO_ACE_vc9.sln (Visual Studio 2008)<br /><br />The projects in the TAO_ACE solution build the ACE and TAO libraries, TAO IDL compiler, gperf, ORB services<br />libraries and executables, and some common utilities. They do not include any examples, tests, or performance<br />tests. (Separate directories and solutions exist for them.) Libraries will be installed in %ACE_ROOT%\lib.<br />Some executables will be installed in %ACE_ROOT%\bin, others (the ORB services executables) will be installed<br />in their source directories.<br /><br />5. It is necessary to update the solution to use the Intel(R) C++ Compiler. <br />In the Solution Explorer, select the solution and click the Use Intel C++ toolbar button. <br />Alternatively, select Intel C++ Compiler Pro &gt; Use Intel C++ from the Visual Studio Project menu.<br />Click the OK button to continue. <br />The TAO_ACE solution constains many projects and it will take some time to update them to use Intel C++.<br /><br />Finally, you should see the message in the output window with the list of the successfully updated projects.<br /><br /><br />6. Open Solution Properties and create a new platform configuration for x64 using the Configuration Manager. <br />Make sure, that current (target) configuration is Debug|x64 or Release|x64 and build solution (Build &gt; Build Solution).<br /><br /><br />During building of the solution, go to the Output window to verify that the Intel C++ Compiler is used. If Intel C++ Compiler is used, you should see a message similar to the following:<br /><br />Compiling with Intel(R) C++...[Intel(R) 64]... (Intel C++ Environment)<br /><br /><br /><strong>Verifying Correctness</strong> <br /><br />There are many examples and tests included in ACE/TAO. Additional separate directories and solutions exist for them.<br />It is possible to compile all tests using corresponding test solution files from %ACE_ROOT%\tests folder.<br />There is one solution file for all tests (each for different versions of VS) there, however, it is also possible to compile each test separately.<br /><br />For example, you could compile ACE_Test to verify the correctness of ACE compilation using following instructions:<br /><br />1. Open ACE_Test project file from %ACE_ROOT%\tests folder (e.g.,ACE_Test_vc9.vcproj for VS2008).<br /><br />2. It is necessary to update the solution to use the Intel(R) C++ Compiler. Please follow the same instructions as described previously in step 5. You will be also asked to save the solution.<br /><br />3. Make sure, that current (target) configuration is Debug|x64 or Release|x64 (it should be the same with the compiled libraries) and build solution.<br /><br />4. Run the test (F5 or Ctrl+F5).<br /><br />5. You could check the logs in %ACE_ROOT%\tests\log folder (ACE_Test.log file). In case of normal execution the output looks like this:<br /><br />Sep 08 15:52:11.103 2009@LM_DEBUG@(3820|5884) Starting ACE_Test test at Tue Sep 8 2009 15:52:11.103000<br />Sep 08 15:52:11.103 2009@LM_DEBUG@(3820|5884) Ending ACE_Test test at Tue Sep 8 2009 15:52:11.103000<br /><b><br /><br />Source Code Changes : </b><br />None required. <br /><br /><br /><b>Related topics: </b><br /><a href="http://software.intel.com/en-us/articles/building-acetao-with-intelr-c-compiler-for-linux/">http://software.intel.com/en-us/articles/building-acetao-with-intelr-c-compiler-for-linux/</a><br /><br /><br /><b>Known Issues or Limitations : </b><br />None. Please contact Intel® Premier Support website or Intel® User Forums if you encounter problems or want to provide feedback.<br /><br />† This link will take you off of the Intel Web site. Intel does not control the content of the destination Web Site.</div> ]]></description>
      <link>http://software.intel.com/en-us/articles/building-acetao-with-intelr-c-compiler-for-windows-xp-64-bit-using-visual-studio</link>
      <pubDate>Tue, 08 Sep 2009 05:19:48 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/building-acetao-with-intelr-c-compiler-for-windows-xp-64-bit-using-visual-studio#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/building-acetao-with-intelr-c-compiler-for-windows-xp-64-bit-using-visual-studio</guid>
      <category>Open Source</category>
      <category>Intel® Compilers</category>
      <category>Intel® C++ Compiler for Windows* Knowledge Base</category>
    </item>
    <item>
      <title>Message catalog file not opening in Russian Windows OS</title>
      <description><![CDATA[ <br />
<div id="art_pre_template"><b>Problem : </b><br /><br />When compiling with Intel(R) C++ 11.1.035 [IA-32] using MS VS2008 IDE under Russian Windows XP OS, we get the following warning.<br />1&gt;warning #13000: could not open message catalog file: <br />1&gt;charstest.cpp<br />1&gt;warning #13000: could not open message catalog file: diagscUI.dll<br />We could compile without this warning using Intel C++ compiler 11.0.074 and older.<br />Is 11.1 trying to automatically detect the locale language and select localized message catalog?<br /><br /><br /><b>Environment : </b><br />Intel C++ compiler 11.1 for Windows, VS2008 English, Windows XP (Russian).<br /><br /><b>Resolution : </b><br /><br /><br />Yes. It seems that Intel C++ compiler 11.1 is trying to automatically detect the locale language and select localized message catalog. You may copy locale 1033 (English) catalog to 1049 (Russian locale) and compiler would not display the warning.</div> ]]></description>
      <link>http://software.intel.com/en-us/articles/message-catalog-file-not-opening-in-russian-windows-os</link>
      <pubDate>Tue, 25 Aug 2009 23:00:51 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/message-catalog-file-not-opening-in-russian-windows-os#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/message-catalog-file-not-opening-in-russian-windows-os</guid>
      <category>Intel® C++ Compiler for Windows* Knowledge Base</category>
    </item>
    <item>
      <title>Intel thread affinity environment variable for OpenMP*</title>
      <description><![CDATA[ <br />
<div id="art_pre_template"><b>Problem : <br /></b><br />I am using the Intel® compiler and openMP* to parallelize some work as follows:<br /><br />
<pre name="code" class="cpp">#pragma omp parallel num_threads(4)
{
DoWork();
}</pre>
<br />I would d like to experiment with Intel's thread affinity feature for OpenMP but I a unsure of exactly how to use the environment variable (for example, where do I place the environment statement in my code?).<br /><br />Could you give a little example showing proper usage and where to place the statement ? <br /><br /><br /><b>Environment : </b><br />Intel C++ compiler, Linux*, Mac OS* X, Windows*<br /><br /><b>Resolution : </b><br /><br /><br />Intel thread affinity environment variable KMP_AFFINITY for openMP is explained in Compiler Intel® compiler user guide topic “Thread Affinity Interface (Linux* and Windows*)”. You may review the topic for detailed information.<br /><br />There are many ways to set the thread affinity using KMP_AFFINITY. I am providing an example below. In the example I am mapping OpenMP threads 0, 1, 2 and 3 to OS processor 3, 2, 1 and 0 respectively. <br /><br />
<pre name="code" class="cpp">$ cat tstcase.cpp
// tstcase.cpp
// Thread afinity interface
//


#include &lt;omp.h&gt;
#include &lt;iostream&gt;
using namespace std;

#define N 1000

int main ()
{
cout &lt;&lt; "Starting openmp test." &lt;&lt; endl;

int i;
float a[N], b[N], c[N], d[N];

/* Some initializations */
for (i=0; i &lt; N; i++)
{
a[i] = i * 1.5;
b[i] = i + 22.35;
}

#pragma omp parallel shared(a,b,c,d) private(i)
{

#pragma omp sections nowait
{

// Section #1
//
#pragma omp section
{
cout &lt;&lt; "Section #1." &lt;&lt; endl;
for (i=0; i &lt; N; i++)
c[i] = a[i] + b[i]; // End of section #1
a[0] = 3.45;
}

// Section #2
//
#pragma omp section
{
cout &lt;&lt; "Section #2." &lt;&lt; endl;
for (i=0; i &lt; N; i++)
d[i] = a[i] * b[i]; // End of section #2
a[1] = 5.67;
}

} // End of sections

} // End of parallel

cout &lt;&lt; "Exiting openmp test." &lt;&lt; endl;
return 0;
}</pre>
<br />$ icc -openmp tstcase.cpp<br />$ export KMP_AFFINITY="verbose,proclist=[3,2,1,0]"<br />$ ./a.out<br />OMP: Warning #63: KMP_AFFINITY: proclist specified, setting affinity type to "explicit".<br />Starting openmp test.<br />OMP: Info #149: KMP_AFFINITY: Affinity capable, using global cpuid instr info<br />OMP: Info #154: KMP_AFFINITY: Initial OS proc set respected: {0,1,2,3}<br />OMP: Info #156: KMP_AFFINITY: 4 available OS procs<br />OMP: Info #157: KMP_AFFINITY: Uniform topology<br />OMP: Info #159: KMP_AFFINITY: 2 packages x 2 cores/pkg x 1 threads/core (4 total cores)<br />OMP: Info #160: KMP_AFFINITY: OS proc to physical thread map ([] =&gt; level not in map):<br />OMP: Info #168: KMP_AFFINITY: OS proc 0 maps to package 0 core 0 [thread 0]<br />OMP: Info #168: KMP_AFFINITY: OS proc 2 maps to package 0 core 1 [thread 0]<br />OMP: Info #168: KMP_AFFINITY: OS proc 1 maps to package 3 core 0 [thread 0]<br />OMP: Info #168: KMP_AFFINITY: OS proc 3 maps to package 3 core 1 [thread 0]<br />OMP: Info #147: KMP_AFFINITY: Internal thread 0 bound to OS proc set {3}<br />OMP: Info #147: KMP_AFFINITY: Internal thread 1 bound to OS proc set {2}<br />OMP: Info #147: KMP_AFFINITY: Internal thread 2 bound to OS proc set {1}<br />OMP: Info #147: KMP_AFFINITY: Internal thread 3 bound to OS proc set {0}<br />Section #1.<br />Section #2.<br />Exiting openmp test.<br /><br /><br /><br /></div> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-thread-affinity-environment-variable-for-openmp</link>
      <pubDate>Mon, 24 Aug 2009 02:31:41 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-thread-affinity-environment-variable-for-openmp#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-thread-affinity-environment-variable-for-openmp</guid>
      <category>Intel® C++ Compiler for Linux* Knowledge Base</category>
      <category>Intel® C++ Compiler for Mac OS X* Knowledge Base</category>
      <category>Intel® C++ Compiler for Windows* Knowledge Base</category>
    </item>
    <item>
      <title>How to Compile for Intel® AVX</title>
      <description><![CDATA[ <div id="art_pre_template">Intel® AVX (Intel® Advanced Vector Extensions) is a 256 bit instruction set extension to Intel® SSE (Intel® Streaming SIMD Extensions) that was first announced in 2008. Further information about Intel AVX is available at <a href="http://software.intel.com/en-us/avx/">http://software.intel.com/en-us/avx/</a> .<br /><br />The Intel C/C++ and Fortran Compilers, version 11.1, support the building of applications for Intel AVX. On Windows*, use the command line switch /QxAVX. On Linux*, use –xavx. The switches /QaxAVX (Windows) and –axavx (Linux) may be used to build applications that will take advantage of AVX instructions on Intel systems that support these, but will use only SSE instructions on other systems.<br /><br />Both C/C++ and Fortran compilers support automatic vectorization of floating-point loops using AVX instructions. The C/C++ compiler also supports AVX-based intrinsics (via the header file immintrin.h) and inline assembly. Intel AVX allows the vectorization of a wider variety of floating point loops than Intel SSE, with a greater potential performance gain due to the greater width of the SIMD registers. The vectorizer is enabled automatically by the switches listed above. To see which loops have been vectorized, use the switch /Qvec-report1 (windows) or –vec-report1 (Linux).<br /><br />Pending availability of processors supporting Intel AVX, the Intel® Software Development Emulator (Intel® SDE) is available for testing programs built for Intel AVX. See <a href="http://software.intel.com/en-us/articles/intel-software-development-emulator/">http://software.intel.com/en-us/articles/intel-software-development-emulator/</a> .<br />Further general information about the Intel Compilers for C/C++ and Fortran is available at <a href="http://software.intel.com/en-us/intel-compilers/">http://software.intel.com/en-us/intel-compilers/</a> . Further information about compiler support for Intel AVX may be found in the Intel C++ Compiler User and Reference Guides, for example in the section 'Intrinsics for Advanced Vector Extensions', accessible online at <a href="http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/win/compiler_c/index.htm">http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/win/compiler_c/index.htm</a> .</div> ]]></description>
      <link>http://software.intel.com/en-us/articles/how-to-compile-for-intel-avx</link>
      <pubDate>Thu, 16 Jul 2009 16:34:04 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/how-to-compile-for-intel-avx#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/how-to-compile-for-intel-avx</guid>
      <category>Intel® C++ Compiler for Linux* Knowledge Base</category>
      <category>Intel® C++ Compiler for Windows* Knowledge Base</category>
      <category>Intel® Fortran Compiler for Linux* Knowledge Base</category>
      <category>Intel® Visual Fortran Compiler for Windows* Knowledge Base</category>
    </item>
    <item>
      <title>Different result of Volatile variables between icc and vc</title>
      <description><![CDATA[ <div id="art_pre_template"><b>Problem : </b><br /><br />We used keyword "volatile" as below when defining a variable,:<br /><br />volatile int i=5; <br /><br />The volatile has multiple meanings. To a compiler writer it means to take no code generation shortcuts when accessing such an object. "Volatile" is reminder to compiler to not suppose or guess some conditions when optimized, the variable could be change by some unexpected elements anytime. <br /><br />So, the variable i should be stored in SRAM, every time we used it, we read it from SRAM. <br /><br />Let's see a simple case: <br /><br />// tstcase.c<br />include &lt;stdio.h&gt;<br />include &lt;stdlib.h&gt;<br /><br />void foo()<br />{<br />volatile int i=1, j=1;<br />i=(i++)+(j++)+2;<br />j=i=i++;<br />printf("i=%d,j=%d\n",i,j);<br /><br />}<br /><br />Using Intel C++ compiler, result is:<br /><br />i=3,j=2 (same result with gcc)<br /><br />Using VC compiler, result is <br /><br />i=6,j=5 <br /><br />I thinks that i=(i++)+(j++)+2 was translated to:<br /><br />Intel C++ compiler:<br /><br />t=t+t1+2; (t is equal to 4)<br />t++; (t is equal to 1, then execute t++, t is equal to 2)<br />t1++; (t1 is equal to 2)<br />Then, j=i=i++;<br />Output is i=3,j=2<br /><br />Microsoft C++ compiler :<br /><br />t=t+t1+2; (t is equal to 4)<br />t++; (t is equal to 5)<br />t1++; (t1 is equal to 2)<br />Then, j=i=i++;<br />Output is i=6,j=5. <br /><br />If we did not use Volatile, we got same result(i=6,j=5) no matter which compiler used. If integrated Intel C++ compiler to VS2008, compiled both with VC and icl , we got different result. <br /><br /><b>Environment : </b><br />Windows, Linux , Intel C++ compiler, Microsoft C++ compiler, gcc<br /><br /><b>Root Cause : </b><br />The statements use language constructs that have undefined behaviour according to C/C++ standard:<br /><br /><b>Resolution : </b><br /><br />The test uses language constructs that have undefined behaviour according to C/C++ standard:<br /><br />&gt;&gt;&gt; i=(i++)+(j++)+2;<br />&gt;&gt;&gt; j=i=i++;<br /><br />The value of i is being modified more than once between two sequence points. Refer to the rules for expressions (section 5, paragraph 4 of the ISO C++ standard):<br /><br />"Except where noted, the order of evaluation of operands of<br />individual operators and subexpressions of individual<br />expressions, and the order in which side effects take place,<br />is unspecified. Between the previous and next sequence<br />point a scalar object shall have its stored value modified at<br />most once by the evaluation of an expression. Furthermore,<br />the prior value shall be accessed only to determine the value<br />to be stored. The requirements of this paragraph shall be met<br />for each allowable ordering of the subexpressions of a full<br />expression; otherwise the behavior is undefined. <br /><br />[Example:<br />i = v[i++]; // the behavior is unspecified<br />i = 7, i++, i++; // i becomes 9<br />i = ++i + 1; // the behavior is unspecified<br />i = i + 1; // the value of i is incremented<br />-end example]"<br /><br /><br /></div> ]]></description>
      <link>http://software.intel.com/en-us/articles/different-result-of-volatile-variables-between-icc-and-vc</link>
      <pubDate>Mon, 13 Jul 2009 23:20:19 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/different-result-of-volatile-variables-between-icc-and-vc#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/different-result-of-volatile-variables-between-icc-and-vc</guid>
      <category>Intel® Parallel Composer</category>
      <category>Intel® Compilers</category>
      <category>Intel® C++ Compiler for Linux* Knowledge Base</category>
      <category>Intel® C++ Compiler for Mac OS X* Knowledge Base</category>
      <category>Intel® C++ Compiler for Windows* Knowledge Base</category>
      <category>Intel® Parallel Composer Knowledge Base</category>
    </item>
    <item>
      <title>Intel® C++ Compiler for Windows* - Building FFTW with the Intel® compilers</title>
      <description><![CDATA[   
<table border="0" cellpadding="0" cellspacing="15">
<tbody>
<tr>
<td class="bodycopy">
<ul>
<li><a href="#Introduction">Introduction</a></li>
<li><a href="#Version">Version information</a></li>
<li><a href="#appNotes">Application notes</a></li>
<li><a href="#sourceCode">Obtaining the source code</a></li>
<li><a href="#latestVersion">Obtaining the latest version of the Intel® compilers</a></li>
<li><a href="#Prerequisites">Prerequisites</a></li>
<li><a href="#setup">Configuration and set-up information</a></li>
<li><a href="#codeChanges">Source code changes</a></li>
<li><a href="#buildingFFTW">Building PGPLOT</a></li>
<li><a href="#buildingDLL">Building FFTW as a DLL</a></li>
<li><a href="#RunningFFTW">Running FFTW</a></li>
<li><a href="#VerifyingCorrectness">Verifying correctness</a></li>
<li><a href="#benefits">Benefits</a></li>
<li><a href="#knownIssues">Known issues and limitations</a></li>
</ul>
<br />
<p><a name="Introduction"><strong>Introduction</strong></a></p>
<p>This guide is intended to help Intel® C++ Compiler for Windows* customers build the FFTW* library. The FFTW library is used for high performance computation of the Discrete Fourier Transform (DFT).</p>
<br />
<p><a name="Version"><strong>Version information</strong></a></p>
<p>This guide applies to FFTW* version 3.1.2 and the Intel® C++ Compiler for Windows* version 11.1.035.</p>
<br />
<p><a name="appNotes"><strong>Application notes</strong></a></p>
<p>FFTW* is a portable open source library for computing DFTs and is one of the fastest such libraries available. In addition to the library, FFTW also includes a benchmark application. Though FFTW can be used on many platforms, this particular guide is intended for Windows*. FFTW can compute DFTs in multiple dimensions and with arbitrary sizes, using either real or complex data. More information about FFTW can be found at:</p>
<p><a target="_blank" href="http://fftw.org/">http://fftw.org</a>† </p>
<br />
<p><a name="sourceCode"><strong>Obtaining the source code</strong></a></p>
<p>The project files for Microsoft Visual Studio* 2008 can be downloaded <a href="ftp://ftp.fftw.org/pub/fftw/fftw-3.2.1-vs2008.zip">here</a>†:</p>
<p>Currently, the source files are distributed with project files for Microsoft Visual Studio .NET* 2003, but they should work on the newer versions of Visual Studio as well. Here is a direct link to that file:</p>
<p><a target="_blank" href="ftp://ftp.fftw.org/pub/fftw/fftw-3.1.2-vs2003.zip">ftp://ftp.fftw.org/pub/fftw/fftw-3.1.2-vs2003.zip</a>†</p>
<br />
<p><a name="latestVersion"><strong>Obtaining the latest version of the Intel® compilers</strong></a></p>
<p>Licensed users of the Intel compilers may download the most recent versions of the compiler from the Intel download center which is accessed by logging into your account at the <a target="_blank" href="https://registrationcenter.intel.com/">Intel® Registration Center</a> .</p>
<p>Evaluation versions of the Intel compilers may be found at the <a target="_blank" href="http://www.intel.com/cd/software/products/asmo-na/eng/219690.htm">Intel® Evaluation Software Center</a>.</p>
<br />
<p><a name="Prerequisites"><strong>Prerequisites</strong></a></p>
<p><strong>Hardware</strong>: This note has been tested on Intel® Core® 2 Quad and Pentium® M processors.</p>
<p><strong>Software</strong>: This note applies to use of version 11.1.035 of the Intel® C++ Compiler for Windows*. It is assumed that the reader will be using Microsoft Visual Studio* .NET* 2003 or above to build FFTW. This note has been tested with Microsoft Visual Studio 2008 Professional Edition.</p>
<br />
<p><a name="setup"><strong>Configuration and set-up information</strong></a></p>
<p>In order to use the provided project files you will need Microsoft Visual Studio* version .NET* 2003 or later and have the Intel® C++ Compiler installed. To ensure that the Intel compiler works properly within Visual Studio, the Intel compiler should be installed after Visual Studio. The project files provided are already configured to use the Intel® Compiler. The examples and screen captures shown in this document reflect the Visual Studio 2008 environment.</p>
<br />
<p><a name="codeChanges"><strong>Source code changes</strong></a></p>
<p>No source code changes are required to build FFTW* with the Intel compiler.</p>
<br />
<p><a name="buildingFFTW"><strong>Building FFTW</strong></a></p>
<p>After you download the source code and Microsoft Visual Studio* project files, extract the files. Windows* does not support .tar.gz files natively, so you may need a program like WinZip* that can handle that type of file. The files should be extracted by default to a directory named <em>fftw-3.1.2</em>. Inside that directory, open the <em>win32</em> directory and open the <em>bench.sln</em> solution file. That solution file contains all of the FFTW projects.</p>
<p>If you are using a version of Microsoft Visual Studio newer than the .NET* 2003 edition and using the projects for .NET 2003 supplied with the source, it will tell you that it needs to convert the project files from the older version. Just follow the onscreen wizard with the default options and the project should convert without any problems.</p>
<p>There are several different configurations to choose from in the solution. Perhaps the most relevant one is the <em>Release SSE2</em> configuration, which uses double precision floats and Intel® Streaming SIMD Extensions 2 (SSE2) instructions. To build FFTW*, just select a configuration and then click <em>Build Solution</em> in the <em>Build</em> menu.</p>
<p>You may encounter one of these two errors when building the solution:</p>
<p>Command-line error: cannot open precompiled header input file .\bench___Win32_Release_SSE2\bench.pchi&lt;</p>
<p>or<br /><br />Project : error PRJ0019: A tool returned an error code from "Performing Post-Build Event..."<br />LINK : fatal error LNK1181: cannot open input file 'libfftw.lib'<br /><br />If so, please refer to the <em>Known Issues and Limitations</em> section at the bottom of this document.</p>
<p>After the solution builds successfully, both the benchmark executable and the FFTW static library will placed in the <em>fftw-3.1.2</em> directory. The names of the files depend on the configuration that is used, but for the <em>Release SSE2</em> configuration, the benchmark is called <em>bench_sse2.exe</em> and the static library is called <em>libfftw_sse2.lib</em>.</p>
<br />
<p><a name="buildingDLL"><strong>Building FFTW as a DLL</strong></a></p>
<p>The FFTW* library normally compiles as a static library (.lib file), but can be compiled as a dynamic library (.dll file) as well. Follow the procedure from above for building as a static library, but with the following modifications.</p>
<p>Before building the solution, you will need to change some of the settings for the <em>libfftw</em> project. Right-click the <em>libfftw</em> project in the Solution Explorer and click <em>Properties</em>. On the <em>General</em> page (top level), change the <em>Configuration Type</em> to <em>Dynamic Library (.dll)</em>.</p>
<p><img border="0" src="http://software.intel.com/file/7252" alt="FFTW configuration type screen capture" /></p>
<p>Next, on the <em>Preprocessor</em> page under the <em>C/C++</em> section, add <em>FFTW_DLL</em> to the <em>Preprocessor Definitions</em>, so that it reads:</p>
<p>WIN32;NDEBUG;_WINDOWS;HAVE_SSE2;FFTW_DLL <br /><br /><img border="0" src="http://software.intel.com/file/7253" alt="FFTW processor definitions screen capture" /></p>
<p>Now the FFTW library should build as a DLL. The resulting file will be called <em>libfftw.dll</em> and will be placed in the <em>libfftw___Win32_Release_SSE2</em> (for the <em>Release SSE2</em> configuration). Although the library will build successfully, the benchmark executable will try to link to the static library, so building the <em>bench</em> project will either fail (if the static library doesn’t exist) or use a previously built static library. This is not really a problem unless you need to build the benchmark and don’t want to keep switching between building the library statically and dynamically. The most elegant solution would be to create a separate project or configuration for building the library as a DLL. However, that goes beyond the scope of this document.</p>
<br />
<p><a name="RunningFFTW"><strong>Running FFTW</strong></a></p>
<p>Since FFTW* is a library, it cannot be run independently. It must be linked with an executable. However, there is a benchmark executable that uses FFTW which can be used for testing. The benchmark can be run from the Windows command line. Here is an example:</p>
<p>bench_sse2.exe -opatient 512 1024 2048 4096&lt;</p>
<p>The <em>–opatient</em> switch is recommended for benchmarking. The numbers listed are the problem sizes that should be run in each trial. In the example shown, we are running four problems of sizes 512, 1024, 2048, and 4096. The number of trials and problem sizes chosen in this example are arbitrary. Also, problem sizes can be repeated in the list for multiple trials of the same problem size.</p>
<br />
<p><a name="VerifyingCorrectness"><strong>Verifying correctness</strong></a></p>
<p>To verify that the results are being computed correctly, you can use the benchmark executable as you normally would, but with the <em>--verify</em> switch. For example, you could execute the following command on the Windows* command prompt from the <em>fftw-3.1.2</em> directory:</p>
<p>bench_sse2.exe --verify 4096&lt;</p>
<p>If the results were correct, no output will be shown. Otherwise, there will be an error message.</p>
<br />
<p><a name="benefits"><strong>Benefits</strong></a></p>
<p>This note demonstrates the use of FFTW* with the latest version 11.1.035 Intel® C++ Compiler technology. Following this method will produce object files and libraries that are compatible with the latest Intel compilers.</p>
<br />
<p><a name="knownIssues"><strong>Known issues and limitations</strong></a></p>
<p>#1. When building the solution, you may encounter an error in the output window that says:</p>
<p>Command-line error: cannot open precompiled header input file .\bench___Win32_Release_SSE2\bench.pchi</p>
<p>This issue can be resolved by disabling precompiled headers in the <em>bench</em> project. As shown below, this option can be accessed in the properties page of the <em>bench</em> project. Right-click the <em>bench</em> project in the solution explorer and click <em>Properties</em>. Then, select the <em>Precompiled Headers</em> page under the <em>C/C++</em> section. Change the <em>Create/Use</em><em>Precompiled Header</em> option to <em>Not Using Precompiled Headers</em> and click <em>OK</em>. The project should now build successfully.</p>
<p><img border="0" src="http://software.intel.com/file/7254" alt="Bench project properties screen capture" /></p>
<p><br />#2. When building the solution, you may encounter an error in the output window that says:<br /><br />Project : error PRJ0019: A tool returned an error code from "Performing Post-Build Event..."<br />LINK : fatal error LNK1181: cannot open input file 'libfftw.lib'<br /><br />You can fix the error by:<br /><br />- Go to the properties for libfftw.<br />- Go to Configuration Properties-&gt;Build Events-&gt;Post-Build Event as shown below, and open the Command Line.<br /><br /><img src="http://software.intel.com/file/21009" alt="errorExample2.bmp" title="errorExample2.bmp" /><br /><br />- Surround the following code in quotations: "$(OutDir)\$(ProjectName).lib"<br />- Within the bench project, use this same method to also surround "$(OutDir)\$(ProjectName).exe" in quotations.<br /><br /><img width="1" src="http://software.intel.com/file/6408" height="10" /></p>
<p class="xs"><span style="font-family: Arial,Helvetica,sans-serif; font-size: xx-small;"><sup>†</sup> This link will take you off of the Intel Web site. Intel does not control the content of the destination Web Site.</span></p>
<p><span style="font-family: Arial,Helvetica,sans-serif; font-size: xx-small;"></span></p>
</td>
</tr>
</tbody>
</table> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-c-compiler-for-windows-building-fftw-with-the-intel-compilers</link>
      <pubDate>Mon, 06 Jul 2009 10:48:32 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-c-compiler-for-windows-building-fftw-with-the-intel-compilers#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-c-compiler-for-windows-building-fftw-with-the-intel-compilers</guid>
      <category>Intel® C++ Compiler for Windows* Knowledge Base</category>
    </item>
    <item>
      <title>Abstract class type  not allowed as a type for parameter</title>
      <description><![CDATA[ <br />
<div id="art_pre_template"><strong>Problem : <br /></strong>I encounter an error when compiling "parameter of abstract class type "type" is not allowed", as described in http://software.intel.com/en-us/articles/cdiag646/. Does anybody know why and how to fix it?<br /><br /><strong>Environment : <br /></strong>Windows, Linux, Mac and Intel C++ compiler.<br /><br /><br /><strong>Resolution : </strong><br /><br /><br />The problem is you are trying to declare a parameter that has the type of an abstract base class.<br /><br />Abstract classes are designed to be only interfaces to real classes because they have one or<br />more pure virtual functions, i.e.:<br />class abstract {<br />virtual void foo() = 0; // pure virtual function since it is declared with = 0<br />};<br />void foo(abstract); // not allowed since the class is abstract<br /><br />The workaround would be to only use pointers or references to the abstract class as parameters, or change the type to a non-abstract class that is derived from the abstract class or change the class so it is no longer abstract, i.e. define the virtual functions instead of declaring them pure virtual.<br /><br /></div> ]]></description>
      <link>http://software.intel.com/en-us/articles/abstract-class-type-not-allowed-as-a-type-for-parameter</link>
      <pubDate>Sun, 14 Jun 2009 23:02:04 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/abstract-class-type-not-allowed-as-a-type-for-parameter#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/abstract-class-type-not-allowed-as-a-type-for-parameter</guid>
      <category>Intel C++ Compiler and Performance Library for QNX* Neutrino* RTOS Knowledge Base</category>
      <category>Intel® C++ Compiler for Linux* Knowledge Base</category>
      <category>Intel® C++ Compiler for Mac OS X* Knowledge Base</category>
      <category>Intel® C++ Compiler for Windows* Knowledge Base</category>
      <category>Intel® Parallel Composer Knowledge Base</category>
    </item>
    <item>
      <title>ISO/IEC Standards language conformance for Intel C++ compiler</title>
      <description><![CDATA[ The Intel C++ compiler option /Qstd=val or –std=val could be used to get the specific version of ISO/IEC standards language conformance for the compiler. <br /><br />The possible values are for “val” are given below:<br /><br />c89 - Conforms to the ISO/IEC 9899:1990 International Standard.<br /><br />c99 - Conforms to The ISO/IEC 9899:1999 International Standard.<br /><br />gnu89 - Conforms to ISO C90 plus GNU* extensions.<br /><br />gnu++98 - Conforms to the 1998 ISO C++ standard plus GNU extensions.<br /><br />c++0x - Enable support for the following C++0x features. Please refer to Intel C++ compiler documentation for details.<br /><br />The default for Intel C++ compiler 11.0 are as given below:<br /><br />-std=gnu89 - default for C, Conforms to ISO C90 plus GNU extensions.<br />-std=gnu++98 - default for C++, Conforms to the 1998 ISO C++ standard plus GNU* extensions.<br />/Qstd=c89 - Conforms to the ISO/IEC 9899:1990 International Standard.<br /><br /> ]]></description>
      <link>http://software.intel.com/en-us/articles/iso-iec-standards-language-conformance-for-intel-c-compiler</link>
      <pubDate>Thu, 04 Jun 2009 02:01:38 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/iso-iec-standards-language-conformance-for-intel-c-compiler#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/iso-iec-standards-language-conformance-for-intel-c-compiler</guid>
      <category>Intel C++ Compiler and Performance Library for QNX* Neutrino* RTOS Knowledge Base</category>
      <category>Intel® C++ Compiler for Linux* Knowledge Base</category>
      <category>Intel® C++ Compiler for Mac OS X* Knowledge Base</category>
      <category>Intel® C++ Compiler for Windows* Knowledge Base</category>
      <category>Intel® Parallel Composer Knowledge Base</category>
    </item>
    <item>
      <title>Redistributing libraries and dlls of Intel C++ compiler for Windows </title>
      <description><![CDATA[ <br />
<div id="art_pre_template"><strong>Problem : </strong><br />We have developed a multilevel iterative solver that we would like to distribute as a DLL and LIB on Windows to students at our university and also to project partners.<br /><br />The iterative solver needs optimized BLAS and LAPACK kernels and we recently purchased a Intel professional compiler suite that includes the MKL. I have compiled the solver using icl and ifort. We need the MKL library on Windows and as far as I understand, we have included the MKL in our DLL, but only our symbol iterative_solver can be used by the project partners.<br /><br />My question is whether the Intel licensing conditions allows me to redistribute our DLLs and the libraries  to our project partners.<br /><br /><br /><strong>Environment : <br /></strong>Intel C++ Compiler for Windows<br /><br /><strong>Resolution : </strong><br /><br />You may provide the "Redistributables" from Intel C++ compiler Professional Edition as part of your product. The "Redistributables" are the files listed in the following text files that may be included in the Materials for the applicable Intel Software Development Product: clredist.txt, credist.txt, fredist.txt, redist.txt.<br /><br />Intel grants to you a non-exclusive, non-assignable copyright license to distribute (except under an Evaluation License as specified below) the Redistributables, or any portions thereof, as part of the product or application you developed using the Materials. If such application is a software development library, then attribution, as specified in the product release notes of the corresponding Materials, shall be displayed prominently in that application's product documentation and on the application's product web site. <br /><br />For example, you may find the files that list the redistributables at following location in the default installation of Intel ®C++ compiler 11.0.074 Professional for Windows:<br /><br />C:\Program Files (x86)\Intel\Compiler\11.0\074\cpp\Documentation\en_US\credist.txt.<br />C:\Program Files (x86)\Intel\Compiler\11.0\074\cpp\doc\redist.txt<br />C:\Program Files (x86)\Intel\Compiler\11.0\074\cpp\Documentation\tbb\redist.txt<br />C:\Program Files (x86)\Intel\Compiler\11.0\074\cpp\ipp\em64t\redist.txt<br /><br />For the Intel C++ Compiler 11.1.035 Professional for Windows: <br />C:\Program Files\Intel\Compiler\11.1\035\Documentation\en_US\credist.txt<br /><br />Please refer the End User License Agreement of the product on this for further details.<br /><br /><br />The 11.x Intel® C++ Compiler Professional Edition for Windows* product includes the Intel® C++ Compiler, the Intel® Math Kernel Library, the Intel® Integrated Performance Primitives, and the Intel® Threading Building Blocks products. The Knowledge Base article at the following link includes information on redistributable libraries for all the component products included with Intel C++ Compiler Professional Editions for Microsoft Windows*.<br /><br /><a href="http://software.intel.com/en-us/articles/redistribution-of-application-binaries-built-for-microsoft-windows/">http://software.intel.com/en-us/articles/redistribution-of-application-binaries-built-for-microsoft-windows/</a><br /><br /></div> ]]></description>
      <link>http://software.intel.com/en-us/articles/redistributing-libraries-and-dlls-of-intel-c-compiler-for-windows</link>
      <pubDate>Thu, 21 May 2009 22:42:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/redistributing-libraries-and-dlls-of-intel-c-compiler-for-windows#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/redistributing-libraries-and-dlls-of-intel-c-compiler-for-windows</guid>
      <category>Intel® C++ Compiler for Windows* Knowledge Base</category>
    </item>
  </channel></rss>