<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated on Tue, 09 Feb 2010 08:34:45 -0800 -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="http://software.intel.com/en-us/articles/feed" rel="self" type="application/rss+xml" />
    <title>Intel Software Network articles feed</title>
    <link>http://software.intel.com/en-us/articles/all</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Intel® AMT High-level API</title>
      <description><![CDATA[ <p><a href="javascript:void(0)" onclick="ndownload('http://software.intel.com/file/25083')">HLAPI+6.0.0.47.zip</a>Thank you for your interest in the Intel® Active Management Technology (Intel® AMT) High-level API Technology.</p>
<div class="sectionHeading">Introduction</div>
<p>The High-level API is being implemented using the <a href="http://en.wikipedia.org/wiki/Scrum_%28development%29">SCRUM method</a>, where functionality is built up in stages. This way we are able to share incremental high quality releases on a regular basis. This version of the High Level API holds partial functionality but has been tested and found to be of high quality (validated against Intel AMT 3.2 and above.) The main theme of this package is an easier to use interface for developing applications for Intel® AMT.<br /><br /><strong>Note:</strong> This software is provided for purposes of demonstration and experimentation only and therefore there is currently no technical support for this package. <br /><br /><strong>Introduction to the High-level API Intel Management Library Technology </strong></p>
<p>The Intel Manageability Library, or High Level API (HLA), provides an easier to use interface for developing applications that work with systems equipped with Intel® Active Management Technology (Intel® AMT).</p>
<p>The library is written in C#, for Microsoft Windows* systems and is intended to be complementary to the <a href="http://software.intel.com/en-us/articles/download-the-latest-intel-amt-software-development-kit-sdk/">Intel® AMT SDK</a>.</p>
<p><b>Features include:</b></p>
<p>This release supports the following features which have been through validation cycles:</p>
<ul>
<li>Hardware Asset</li>
<li>Remote Control / Power</li>
<li>Storage</li>
</ul>
<p><strong>This release includes the following components:</strong></p>
<ul>
<li><strong>HLAPI Library</strong> - HLAPI interface and implementation</li>
<li><strong>HLA_CLI</strong> - A command line tool to invoke the currently supported features</li>
<li><strong>HardwareCmdDll</strong> - A DLL for demonstrating the HardwareInventory feature, used by HLA_CLI</li>
<li><strong>PowerCmdDLL</strong> - A DLL for demonstrating the power management feature </li>
<li><strong>StorageCmdDll</strong> - A DLL for demonstrating the Storage feature </li>
<li><strong>HLA.sln</strong> - A Visual Studio 2008 solution file for building everything</li>
</ul>
<p>Once everything is built, you can either run the command line sample directly inside a DOS prompt window, or you can modify the debug settings for the command of interest to point to your AMT system (IP address / host name), user name and password, and run the sample from within Visual Studio 2008.</p>
<p><b>Creating a C# Application:</b></p>
<p>To create a C# application that uses the HLA and runs with Intel AMT Release 6.0, add references to the following DLLs, located in the Bin in the distribution:</p>
<ul>
<li>HLA.sln - A Visual Studio 2008 solution file for building everything</li>
<li>CIMFramework.dll</li>
<li>DotNetWSManClient.dll </li>
</ul>
<p>The DLLs and sample application require that the .NET Framework 3.0 be installed. Recompiling the source code requires Visual Studio 2008, which requires that the .NET Framework 3.5 be installed.</p>
<span style="font-weight: bold;"><a href="http://software.intel.com/en-us/articles/intel-software-license-agreement-intel-amt-high-level-api-intel-manageability-library-to-manageability-webpage/">Download Intel High-level API.</a></span>*
<p><br />* Please note that the terms of the software license agreement included with any software you download will control your use  of the software.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-amt-high-level-api-intel-manageability-library-to-manageability-webpage</link>
      <pubDate>Mon, 08 Feb 2010 16:23:43 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-amt-high-level-api-intel-manageability-library-to-manageability-webpage#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-amt-high-level-api-intel-manageability-library-to-manageability-webpage</guid>
      <category>Manageability</category>
      <category>Code & Downloads</category>
    </item>
    <item>
      <title>Intel at Mobile World Congress 2010</title>
      <description><![CDATA[ <p><a href="http://www.mobileworldcongress.com/index.htm" target="_blank"><img style="float: right; margin-left: 20px; margin-right: 20px; margin-top: 10px; margin-bottom: 10px;" title="mwc.bmp" src="http://software.intel.com/file/24789" alt="Visit us at MWC 2010" width="330" /></a></p>
Visit Intel(R) Software Network and the Intel(R) Atom(TM) Developer Program team at booth A49 in hall 7 during Mobile World Congress in Barcelona, Spain, from February 15 - 18, 2010.<br /><br />
<p>Whether you want to get deeper mobile content than ever before, take a sneak preview of the latest tools, netbooks and apps, meet with top experts of the mobile industry, socialize at one of the many structured or informal MWC community gatherings or have a deeper insight to our new Intel AppUp Center... then Mobile World Congress 2010 is for you!</p>
<p>For more information please visit the official <a href="http://www.mobileworldcongress.com/index.htm">MWC web site</a> - or just follow us on <a href="http://twitter.com/Develop4AtomEU">Twitter</a>.</p>
<!-- NewsFeed Links -->
<p><span style="font-size: small;"><b><br />Read our latest Mobile World Congress related blog posts:</b></span></p>
<div>


<ul id="newsFeed">
<li>Gathering Events, one moment... </li>
</ul>
</div>
<!-- RSS Feed of Events -->
<p><a href="http://www.mobileworldcongress.com/index.htm"><br /></a></p> ]]></description>
      <link>http://software.intel.com/en-us/articles/mobile-world-congress-2010</link>
      <pubDate>Mon, 08 Feb 2010 09:40:01 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/mobile-world-congress-2010#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/mobile-world-congress-2010</guid>
      <category>Mobility</category>
      <category>Intel® Atom™ Software Developer Community</category>
      <category>MID</category>
      <category>Events</category>
    </item>
    <item>
      <title>Intel® Parallel Amplifier – What&amp;#39;s new?</title>
      <description><![CDATA[ <p class="MsoNormal"><span style="font-family: Tahoma, sans-serif; color: #000080; font-size: small;"><span style="font-size: 13px;"> </span></span></p>
<p class="MsoNormal"><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;">Intel® Parallel Amplifier<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;"><br /></span></p>
<p class="Default"><span style="font-size: 11.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: black; mso-themecolor: text1;"><o:p> </o:p></span></p>
<p class="Default"><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;">Update 2: <o:p></o:p></span></p>
<p style="margin-top: 0in; margin-right: 0in; margin-bottom: 13.25pt; margin-left: .75in; text-indent: -.25in; mso-list: l0 level1 lfo1;" class="Default"><span style="font-size: 10.0pt; font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; color: black; mso-themecolor: text1;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;">Now Microsoft Windows 7* is supported. <o:p></o:p></span></p>
<p style="margin-left: .75in; text-indent: -.25in; mso-list: l0 level1 lfo1;" class="Default"><span style="font-size: 10.0pt; font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; color: black; mso-themecolor: text1;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;">Several minor bugs were fixed.</span></p>
<p style="margin-left: .75in; text-indent: -.25in; mso-list: l0 level1 lfo1;" class="Default"><span style="font-size: small;"><span style="font-size: 13px;"><br /></span></span></p>
<p class="Default"><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;"><o:p> </o:p></span></p>
<p class="Default"><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;">Update 1: <o:p></o:p></span></p>
<p style="margin-top: 0in; margin-right: 0in; margin-bottom: 13.3pt; margin-left: .75in; text-indent: -.25in; mso-list: l0 level1 lfo1;" class="Default"><span style="font-size: 10.0pt; font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; color: black; mso-themecolor: text1;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;">Added a command line interface for regression analysis. Now you can automate tests you want to run frequently. (see "About the Intel® Parallel Amplifier Command-line Interface" in the Visual Studio* integrated help) <o:p></o:p></span></p>
<p style="margin-top: 0in; margin-right: 0in; margin-bottom: 13.3pt; margin-left: .75in; text-indent: -.25in; mso-list: l0 level1 lfo1;" class="Default"><span style="font-size: 10.0pt; font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; color: black; mso-themecolor: text1;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;">Better performance. Collection is faster and results finalization is faster. <o:p></o:p></span></p>
<p style="margin-top: 0in; margin-right: 0in; margin-bottom: 13.3pt; margin-left: .75in; text-indent: -.25in; mso-list: l0 level1 lfo1;" class="Default"><span style="font-size: 10.0pt; font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; color: black; mso-themecolor: text1;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;">CPU time accuracy is improved for applications with short scheduler time slices. <o:p></o:p></span></p>
<p style="margin-top: 0in; margin-right: 0in; margin-bottom: 13.3pt; margin-left: .75in; text-indent: -.25in; mso-list: l0 level1 lfo1;" class="Default"><span style="font-size: 10.0pt; font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; color: black; mso-themecolor: text1;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;">New data collection options, including limiting the size of the data collected. <o:p></o:p></span></p>
<p style="margin-top: 0in; margin-right: 0in; margin-bottom: 13.3pt; margin-left: .75in; text-indent: -.25in; mso-list: l0 level1 lfo1;" class="Default"><span style="font-size: 10.0pt; font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; color: black; mso-themecolor: text1;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;">Compare results can now open the source view. <o:p></o:p></span></p>
<p style="margin-left: .75in; text-indent: -.25in; mso-list: l0 level1 lfo1;" class="Default"><span style="font-size: 10.0pt; font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; color: black; mso-themecolor: text1;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;">Several minor bugs were fixed. <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;"><o:p> </o:p></span></p>
<p class="MsoNormal"><span><span style="font-size: 8.5pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: black; mso-themecolor: text1;"><o:p> </o:p></span></span></p>
<p class="MsoNormal"><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;"><br /></span></p>
<p class="MsoNormal"><span style="font-size: 10.0pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; mso-bidi-font-family: Tahoma; color: black; mso-themecolor: text1;">Intel® Parallel Amplifier <span style="color: black; mso-themecolor: text1; text-decoration: none; text-underline: none;"><a href="http://software.intel.com/sites/products/documentation/studio/amplifier/en-us/2009/start/release_notes_amplifier.pdf">Release Notes</a></span><o:p></o:p></span></p>
<p> </p> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-parallel-amplifier-whats-new</link>
      <pubDate>Mon, 08 Feb 2010 08:41:02 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-parallel-amplifier-whats-new#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-parallel-amplifier-whats-new</guid>
      <category>Tools</category>
      <category>Intel® Parallel Amplifier</category>
    </item>
    <item>
      <title>IPP Crypto Sample Performance for OpenSSL too Slow on Hyper-Threading Systems</title>
      <description><![CDATA[ <p><b>Problem: </b></p>
<p>When running the Intel IPP v6.1 crypto sample for OpenSSL (<strong>ipp-samples/cryptography/openssl-ipp</strong>) on Intel® Hyper-Threading (Intel HT Technology) processors, users may find the AES benchmark application reports degraded performance when compared to the non-IPP version of OpenSSL.</p>
<p><b>Cause: </b></p>
<p>This is caused by conflicting OpenMP thread model settings for Intel HT Technology systems.</p>
<p>The Intel IPP crypto sample for OpenSSL links with the dynamic Intel IPP libraries, by default, which enables the use of internal threading (OpenMP) in the threaded Intel IPP AES functions. To overcome this problem, which is associated with how the OpenMP threading mechanism allocates threads within the IPP library, one must adjust the number of available threads and specify the threading affinity model.</p>
<p>Intel HT is most effective when each thread that is sharing an HT-enabled core is performing <em>different</em> types of operations and processor resources on the core are <em>under-utilized</em>. The threaded AES functions in the Intel IPP library execute at high efficiency, consuming most of the available processor resources and performing identical operations on each thread. Thus, these multi-threaded functions generally do not fare well if they are allocated to run side-by-side on a single HT core. It is better to have these threads run on separate cores.</p>
<p>To accommodate this need for thread isolation one must insure that the number of threads available to the OpenMP threading mechanism is equal to the number of cores, not the number of logical threads. (The default number of logical threads equals 2x the number of cores on an Intel HT processor or 1x the number of cores on a non-HT processor.) Moreover, when running the Intel IPP crypto sample on an Intel HT system, the thread scheduler must also be told to assign each crypto thread to a single core, ignoring the second HT thread available on each core. The net effect of applying these two guidelines will direct OpenMP to limit threading to the number of available cores and to spread those threads evenly over those cores.</p>
<p><b>Resolution: </b></p>
<p>There are several avenues available to address this issue. There is no “best” or “worst” solution, the best solution depends on your application and system needs.</p>
<p>If the multi-core processor on your system <em><strong>includes Intel HT</strong></em> (each core supports two hardware threads), for example an Intel Core i7 or Westmere processor, you should use one of the following solutions:</p>
<ol>
<li>disable multi-threading by linking with the static single-threaded version of the Intel IPP library </li>
<li>disable multi-threading within the multi-threaded Intel IPP libraries by calling <em>ippSetNumThreads(1)</em> </li>
<li>disable Intel HT Technology on your system (usually done via a configuration switch in the BIOS) </li>
<li>configure OpenMP to use 1/2 of the available logical threads<br /><em>and</em> set the KMP_AFFINITY environment variable as follows: <em>KMP_AFFINITY=granularity=fine, compact,1,0</em></li>
</ol>
<p>Note that the Intel IPP library overrides the OMP_NUM_THREADS environment variable, so you must use the following technique within your application to set the number of available logical threads to 1/2 the number of hardware threads:</p>
<p>ippGetNumThreads( &amp;numThreads ) ;<br /> ippSetNumThreads( numThreads/2 ) ;</p>
<p>See the IPP library documentation for more information regarding the above functions.</p>
<p>If the multi-core processor on your system <em><strong>does not include Intel HT</strong></em> (each core only supports a single hardware thread), for example an Intel Core 2 Duo or Core 2 Quad processor, you do not need to do anything. The IPP library will automatically configure OpenMP to utilize no more hardware threads than you have available on your system. You may still want to set the OpenMP affinity to a value that will optimize the IPP library for best operation on your system by setting the KMP_AFFINITY environment variable as follows:</p>
<p><em>KMP_AFFINITY=compact<br /></em> or <br /><em>KMP_AFFINITY=granularity=fine,compact,0,0</em></p>
<p>This will configure OpenMP to more readily exploit a shared cache, and is especially important on those processors that have multiple physical dies within a single package or those systems that have multiple sockets on the motherboard (which results in a dedicated cache per core).</p>
<p><strong>More Information:</strong></p>
<p>For more information on how these OpenMP directives work please see the <a href="http://software.intel.com/en-us/articles/intel-software-technical-documentation/" target="_blank">Intel Compiler documentation pages</a>. The section on the <a href="http://www.intel.com/software/products/compilers/docs/flin/main_for/mergedprojects/optaps_for/common/optaps_openmp_thread_affinity.htm" target="_blank">Thread Affinity Interface</a>, in particular, should be helpful.</p>
<p>See this <a href="http://software.intel.com/en-us/blogs/2009/12/18/threading-and-the-intel-ipp-library-part-3-of-3/">Intel Software Network blog entry</a> for more information about OpenMP and the IPP library.</p>
<p>A new Intel IPP interface to address thread affinity is being considered for inclusion in future releases of the Intel IPP library.</p>
<p>To get details about the specific processor on your system, such as how many cores it contains and whether or not those cores support Intel HT, you can compile and run the CPU Information Utility found in the <a href="http://www.intel.com/cd/software/products/asmo-na/eng/220046.htm" target="_blank">IPP samples</a> (<strong>advanced-usage\cpuinfo</strong>) or visit <a href="http://ark.intel.com/" target="_blank">ark.intel.com</a> and locate your specific processor in this on-line database.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/performance-of-crypto-sample-for-openssl-slowing-down-on-hyper-threading-systems</link>
      <pubDate>Fri, 05 Feb 2010 17:03:13 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/performance-of-crypto-sample-for-openssl-slowing-down-on-hyper-threading-systems#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/performance-of-crypto-sample-for-openssl-slowing-down-on-hyper-threading-systems</guid>
      <category>Intel® IPP</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® Integrated Performance Primitives Knowledge Base</category>
      <category>Intel® Parallel Composer Knowledge Base</category>
    </item>
    <item>
      <title>GPA survey Terms and Conditions</title>
      <description><![CDATA[ <br /><span class="sectionHeading"><b>Intel® Graphics Performance Analyzers Toolset Survey Contest</b></span><br /><br /><br /><span class="sectionHeadingText">Contest Description: </span><br /><br />The Intel® Graphics Performance Analyzers team is sponsoring a survey to gather feedback about the usage and suggested improvements to this toolset. In addition, an Apple* iPod nano (8 GB, 5th Generation) will be given out weekly to the best answer to one of the survey questions. The survey and contest is open from February 2nd, 2010 till March 19th 2010<br /><br /><b>Contest is open to all but only U.S. residents are eligible to win the iPod</b><br /><br /><span class="sectionHeadingText">How to enter: </span><br /><br />Take a brief 13-question survey accessible from the email you received or from the following link at the Intel® Graphics Performance Analyzers <a href="http://software.intel.com/en-us/articles/intel-gpa/">website </a>. Answer the survey question “What was the biggest performance surprise you found and resolved by using GPA?”<br /><br />Only the answer to the survey question above is required in order to identify the winner. Any contact information gathered as part of the contest will be treated in accordance with Intel’s privacy policy which participants can review <a href="http://www.intel.com/sites/sitewide/en_US/privacy/privacy.htm?iid=ftr+privacy ">here</a>.<br /><br /><br /><b>Judging Criteria</b>: All submitted answers to the survey question “What was the biggest performance surprise you found and resolved by using GPA?” will be evaluated and the best answer each week will be selected by the Intel® Graphics Performance Analyzers Product Manager based on the following criteria:<br /><br />1) uniqueness of the performance issue<br />2) performance improvement gained<br /><br />One (1) winner will be selected each week and announced on Monday 5:00 PM U.S. PST the following week. All decisions of the judges are made at the judges’ sole discretion and are final in all matters relating to this Survey / Contest. <br /><br /><b>Prizes: </b><br />One (1) Apple iPod nano* (8 GB, 5th Generation) will be given away each week. A total of six (6) iPod nano units will be given out for the duration of the survey / contest. The estimated value for each prize is USD $130, and the total estimated value is USD $800.<br /><br />The winner will be informed by email and prizes will be shipped after the winner provides his / her shipment address. <br /><br /><b>Legal Documents</b><br /><br />Privacy Policy, http://www.intel.com/sites/sitewide/en_US/privacy/privacy.htm?iid=ftr+privacy <br />Terms of Use, http://www.intel.com/sites/corporate/termsofuse.htm <br />Intel® Graphics Performance Analyzers Toolset Contest Rules <br /><br /><br /><b>Intel® Graphics Performance Analyzers Toolset Survey Contest Rules </b><br /><br />1. These rules (including the Intel Privacy Policy and the Terms of Use)) govern the Intel® Performance Analyzers Toolset Survey skills contest (the “contest”) and set out the terms and conditions between Intel Corporation and its affiliates (“Intel” or “us/we”) and each participant (“participant” or “you”).<br /><br />2. No purchase necessary. Purchase does not increase your chance of winning. Void wherever prohibited.<br /><br />3. You must speak, read and understand English and you must be aged 18 years or over or you must obtain the consent of your parents or legal guardian before you participate in the contest. If you apply to register for the contest, if you contribute to the contest or the Intel® SN community once you are registered or if you accept any contest prizes, you accept these rules. Employees of Intel Corporation, its affiliates, subsidiaries, advertising and promotion agencies, and the immediate families of each may not enter. This limitation is void where prohibited.<br /><br />4. The contest is open only to residents of the United States. All national and local laws and regulations apply.<br /><br />5. We may refuse your contribution for any good reason. <br /><br />6. Intel provides you with access to a variety of resources on Intel® SN, including communication forums, documentation, download areas, code samples, videos, blogs, articles and contests (the “resources”).<br /><br />7. You agree to submit contributions to the contest on www.intel.com/software under the following conditions:<br /><br />a. Intel does not claim ownership of your contributions to the contest in form of sample code, content, videos, articles or any other contributions you submit to Intel® SN. By submitting your contributions, you are granting Intel and its affiliated companies the following worldwide, non-exclusive, perpetual, irrevocable, royalty-free, unconditional, fully paid-up rights: (1) to make, have made, use, copy, reproduce, modify, and create derivative works of the contributions, (2) to publicly perform or display, import, broadcast, transmit, distribute (directly and indirectly through multiple tiers), license, offer to sell and sell, rent, lease, or lend copies of the contributions (and derivative works thereof), (3) to sublicense to third parties the foregoing rights, including the right to sublicense to further third parties, and (4) to publish your name or alias in connection with this contest and your contributions.<br /><br />b. Your contributions to the contest will be available to other participants and to ensure they are safe and freely usable by other participants, you warrant that:<br />• you own or otherwise have all rights necessary for you to provide the contributions and grant the rights described above and you do not disclose any information which would constitute a violation of a confidentiality obligation;<br />• your contributions do not contain any viruses, worms, spy ware, or other components or instructions that are malicious, deceptive, or designed to limit or harm the functionality of a computer; and<br />• your contributions are not subject to license terms that require any software or documentation incorporating or being derived from your contributions to be licensed to others.<br /><br />c. Apart from prizes offered as part of the contest, no monetary compensation will be paid for any of your contest contributions.<br /><br />8. Intel is not responsible for contest entries not received due to lost, failed, delayed or interrupted connections or miscommunications, or other electronic malfunctions. Intel is not responsible for incorrect or inaccurate entry information, whether caused by you or any other persons or by any of the equipment or programming associated with or utilized in the contest.<br /><br />9. You may be required to sign and return releases of liability, declarations of eligibility, and where lawful, publicity consent agreements, within five (5) days of acknowledged notification . If a selected potential winner cannot be contacted, is ineligible (under these rules or due to a failure to comply with any of the other applicable policies, licenses, rules, and terms of service, fails to claim a prize, or fails to timely return the completed and executed releases/agreements as required), prize may be forfeited and an alternate potential winner may, at Intel’s discretion, be selected. Physical prizes awarded for the winning contributions will be sent to participants within six (6) weeks from the date of the notification email or confirmation of the winning participant’s physical address, whichever is later. <br /><br />10. Prizes are personal to the participant submitting the winning contribution and cannot normally be transferred. All prizes are subject to availability and they may change at any time and Intel may award substitute prizes of equal or greater value. A cash alternative is not available. Odds of winning depend on the total number of eligible entries received. <br /><br />11. The winner accepts responsibility for all federal, state and local taxes and fees in connection with the prizes. Taxes, if any, are the sole responsibility of the winning participant, and participants may be issued an IRS Form 1099 for the ARV of any awarded prize. This contest is void where prohibited or restricted by law, and subject to applicable federal, state provincial and local laws.<br /><br />12. Acceptance of the prize will constitute permission to use winner’s name and/or likeness for promotional purposes without further compensation except where prohibited by law.<br /><br />13. Intel does not provide any warranty on the prizes. To the fullest extent allowable by law, Intel specifically disclaims any representations or warranties, express or implied, regarding the prizes, including any implied warranty of merchantability or fitness for a particular purpose and implied warranties arising from course of dealing or course of performance.<br /><br />14. We may, on notifying you, immediately suspend or terminate your rights, if you breach these rules or if we reasonably believe that you have submitted a contribution in violation of these rules. <br /><br />15. Intel reserves the right, in its sole discretion, to suspend or cancel the contest at any time for any reason. <br /><br />16. You can withdraw your contribution at any time by notifying us. If a contribution is withdrawn your rights to win a prize in this contest are lost. <br /><br />17. These rules apply to your contribution and the resources, unless we provide any items to you under more specific terms, in which case those more specific terms will apply to the relevant items. We may make changes to these rules at any time without notice to you. The most current version of the rules can be reviewed on the Intel® SN website. Contributing to the contest or accepting prizes will constitute acceptance of the revised rules. <br /><br />18. Our only responsibilities with respect to the contest are set out in these rules. These rules prevail in the event of any conflict or inconsistency with any other communications, including advertising or promotional materials.<br /><br />19. For any feedback or questions regarding the contest or the prizes you can contact Intel by sending an email or by participating in the contest discussion forum at http://software.intel.com/en-us/forums/intel-graphics-performance-analyzers/. <br /><br />20. If Intel improperly denies you any prizes, Intel's entire liability and your sole and exclusive remedy will be limited to a distribution of the equivalent amount of prizes as set forth above. By participating in the contest, you waive any and all rights to bring any claim or action related to such matters in any forum beyond one (1) year after the first occurrence of the kind of act, event, condition or omission upon which the claim or action is based. <br /><br />21. If for any reason this contest is not capable of running as planned due to infection by computer virus, bugs, tampering, unauthorized intervention, fraud, technical failures, or any other causes beyond the control of Intel which corrupt or affect the administration, security, fairness, integrity, or proper conduct of this contest, Intel reserves the right at its sole discretion, to disqualify any individual who tampers with the entry or voting process, and to cancel, terminate, modify or suspend the contest. <br /><br />22. Intel assumes no responsibility for any error, omission, interruption, deletion, defect, delay in operation or transmission, communications line failure, theft or destruction or unauthorized access to, or alteration of entries. Intel is not responsible for any problems or technical malfunction of any telephone network or telephone lines, computer online systems, servers, or providers, computer equipment, software, failure of any e-mail or entry to be received by Intel on account of technical problems, human error or traffic congestion on the internet or at any web site, or any combination thereof, including any injury or damage to participant's or any other person's computer relating to or resulting from participation in this contest or downloading any materials in this contest. <br /><br />23. The promoter of this contest is Intel. The contest is administered by:<br /><br />Intel Corporation<br />2200 Mission College Blvd.<br />Santa Clara, CA 95052 USA<br /><br /><br />Intel is a trademark of Intel Corporation in the U.S. and other countries. <br />*Other names and brands may be claimed as the property of others. <br /><br />© 2009, Intel Corporation. All rights reserved.<br /> ]]></description>
      <link>http://software.intel.com/en-us/articles/gpa-survey-terms-and-conditions</link>
      <pubDate>Fri, 05 Feb 2010 15:26:28 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/gpa-survey-terms-and-conditions#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/gpa-survey-terms-and-conditions</guid>
      <category>Visual Computing</category>
      <category>Game Development</category>
    </item>
    <item>
      <title>Memory Limits for Applications on Windows*</title>
      <description><![CDATA[ <p>When building and running an application under Windows*, you need to be aware of the limitations on the size of code and data your program can declare and use.  This article applies to Intel C++ and Intel Fortran compilers.</p>
<p>In this article, "32-bit" will refer to an application built with a compiler "for applications running on IA-32", even if it is run on a 64-bit version of Windows.  In the Visual Studio* environment, this is a "Win32" platform target.  "64-bit" refers to an application built with a compiler "for applications running on Intel 64" and run on an "x64" variant of Windows. In the Visual Studio environment, this is an "x64" platform target.  Note that 64-bit applications will not run on a 32-bit variant of Windows.</p>
<p>There are three kinds of memory limits:</p>
<ul>
<li>Static code and data - this is all the compiled code plus all static data.  In C or C++, static data is generally created by variables and structs declared at "file scope", outside of a procedure.  In Fortran, COMMON and module variables are always static.  Variables declared in main programs and in procedures may or may not be static - by default, non-ALLOCATABLE/POINTER arrays are static and scalars are not.  Any variable marked as SAVE or data-initialized is static.</li>
<li>Dynamic data - this is memory that is allocated during program execution.  In or C or C++ this is usually done with malloc or new; in Fortran it is done with ALLOCATE or malloc.</li>
<li>Stack data - this is memory that is allocated as a procedure is entered and deallocated when the procedure exits. In C or C++, most routine local variables and variables declared inside blocks are allocated on the stack. In Fortran, automatic arrays (with dimensions based on a dummy argument, common or module variable) are stack-allocated.  Fortran code, in particular, may create temporary copies of arrays on the stack as needed to satisfy language semantics.  In Fortran, a routine declared RECURSIVE uses stack allocation for all local variables (other than POINTER and ALLOCATABLE), and enabling OpenMP also results in variables being allocated on the stack by default.</li>
</ul>
<p>Given these definitions, the following lists the limits on 32-bit and 64-bit variants of Windows:</p>
<p><b>32-bit <br /></b></p>
<ul>
<li>Static data - 2GB</li>
<li>Dynamic data - 2GB</li>
<li>Stack data - 1GB (the stack size is set by the linker, the default is 1MB.  This can be increased using the Linker property System &gt; Stack Reserve Size)</li>
</ul>
<p>Note that on 32-bit Windows, the sum of all types of data must be 2GB or less.  The practical limit is about 1.75GB due to space used by Windows itself</p>
<p><b>64-bit <br /></b></p>
<ul>
<li>Static data - 2GB</li>
<li>Dynamic data - 8TB </li>
<li>Stack data - 1GB (the stack size is set by the linker, the default is 1MB.  This can be  increased using the Linker property System &gt; Stack Reserve Size)</li>
</ul>
<p>Note that the limit on static and stack data is the same in both 32-bit and 64-bit variants.  This is due to the format of the Windows Portable Executable (PE) file type, which is used to describe EXEs and DLLs as laid out by the linker. It has 32-bit fields for image section offsets and lengths and was not extended for 64-bit variants of Windows. As on 32-bit Windows, static data and stack share the same first 2GB of address space.</p>
<p>If you exceed the limit on static code and data you may see the following error when the application is linked:</p>
<p>LNK1248: image size ('size') exceeds maximum allowable size (80000000)</p>
<p>Another possibility is that the application will appear to link successfully, but when run you will see:</p>
<p>&lt;program-name&gt; is not a valid Win32 application</p>
<p>It is important to note that these are Windows operating system limits and are not constraints imposed by the compilers.</p>
<p><b>Resolving the Problem</b></p>
<p>If you are running a 32-bit application, you will need to switch to a 64-bit build and run on a 64-bit variant of Windows.  But even on a 64-bit variant, you must reduce the size of static data.  The best way to do that is to change to dynamic allocation for large arrays.  In C and C++ this is done with pointers and malloc.  In Fortran, replace large static arrays with ALLOCATABLE arrays and allocate them to the desired size at the start of the program. In many cases, you can replace COMMON declarations with variables declared in a module, and USE that module where you would have included the COMMON statements.  Note that you cannot use data-initialization for ALLOCATABLE arrays - such initialization must be in executable code.</p>
<p>If you have questions about appropriate techniques, please ask them in our <a target="_blank" href="http://software.intel.com/en-us/forums/">user forums</a>.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/memory-limits-applications-windows</link>
      <pubDate>Fri, 05 Feb 2010 14:03:34 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/memory-limits-applications-windows#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/memory-limits-applications-windows</guid>
      <category>Intel® C++ Compiler for Windows* Knowledge Base</category>
      <category>Intel® Visual Fortran Compiler for Windows* Knowledge Base</category>
    </item>
    <item>
      <title>Understanding CPU Dispatching in the Intel® IPP Library</title>
      <description><![CDATA[ <p>The Intel IPP library contains a collection of functionally identical processor-specific optimized libraries that are “dispatched” at run-time. The “dispatcher” chooses which of these processor-specific optimized libraries to use when your application makes a call into the IPP library. This is done to maximize each function’s use of the underlying SIMD instructions and other architecture-specific features.</p>
<blockquote>
<p>Note: you can build custom processor-specific libraries that do not require the dispatcher, but that is outside the scope of this article. <a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-intel-ipp-linkage-models-quick-reference-guide/">Please read this IPP linkage models article</a> for information on how to build custom versions of the IPP library.</p>
</blockquote>
<p>Dispatching refers to the process of detecting CPU features at run-time and then selecting the Intel IPP optimized library set that corresponds to your CPU. For example, in the \ia32\bin directory, the <em style="mso-bidi-font-style: normal">ippiv8-x.x.dll</em> library file contains version ‘x.x’ of the optimized image processing libraries for Intel® Core™ 2 Duo processors; ‘ippi’ refers to the image processing library, ‘v8’ refers to the Core 2 architecture, and ‘x.x’ refers to the library’s major version numbers.</p>
<p>In the general case, the “dispatcher” identifies the run-time processor only once, at library initialization time. It sets an internal table or variable that directs your calls to the internal functions that match your architecture. For example, <em>ippsCopy_8u()</em>, may have multiple implementations stored in the library, with each version optimized to a specific Intel® processor architecture. Thus, the <em>p8_ippsCopy_8u()</em> version of <em>ippsCopy_8u()</em> is called by dispatcher when running on an Intel Core 2 Duo processor on IA-32, because it is optimized for this processor architecture.</p>
<blockquote>
<p>Note: IPP architectures generally correspond to SIMD (MMX, SSE, AES, etc.) instructions sets.</p>
</blockquote>
<p><b>Initializing the IPP Dispatcher</b></p>
<p>The process of identifying the specific processor being used, and initialization of the dispatcher, should be performed before you make any calls into the IPP library. If you are using a dynamic link library this process is handled automatically when the dynamic link library is initialized. However, if you are using a static library you must perform this step manually. <a href="http://software.intel.com/en-us/articles/ipp-dispatcher-control-functions-ippinit-functions/">See this article on the ipp*Init*() functions</a> for more information on how to do this.</p>
<p>The following table lists all the architecture codes defined by the Intel IPP library through version 6.1 of the product. Note that some of these IPP architectures have been deprecated and are no longer supported in the current version of the product. Deprecated architectures are identified in the “Notes” column of the table.</p>
<table border="1" cellspacing="0" cellpadding="0" width="700" align="center">
<tbody>
<tr>
<td width="114"><strong>Platform</strong></td>
<td width="84" align="middle"><strong>Architecture</strong></td>
<td width="238"><strong>SIMD Requirements</strong></td>
<td width="163"><strong>Processor / µarchitecture</strong></td>
<td width="100"><strong>Notes</strong></td>
</tr>
<tr>
<td>IA-32</td>
<td align="middle">px</td>
<td>C optimized for all IA-32 processors</td>
<td>i386+</td>
<td></td>
</tr>
<tr>
<td></td>
<td align="middle">a6</td>
<td>SSE</td>
<td>Pentium III</td>
<td>thru 5.3 only</td>
</tr>
<tr>
<td></td>
<td align="middle">w7</td>
<td>SSE2</td>
<td>P4, Xeon, Centrino</td>
<td></td>
</tr>
<tr>
<td></td>
<td align="middle">t7</td>
<td>SSE3</td>
<td>Prescott, Yonah, Atom</td>
<td></td>
</tr>
<tr>
<td></td>
<td align="middle">v8</td>
<td>Supplemental SSE3</td>
<td>Core 2, Xeon® 5100</td>
<td></td>
</tr>
<tr>
<td></td>
<td align="middle">p8</td>
<td>SSE4.1, SSE4.2, AES-NI</td>
<td>Penryn, Nehalem, Westmere</td>
<td>see notes below</td>
</tr>
<tr>
<td></td>
<td align="middle">s8</td>
<td>SSE3 and Atom-specific</td>
<td>Atom</td>
<td>new in 6.0</td>
</tr>
<tr>
<td>Intel® 64 (EM64T)</td>
<td align="middle">mx</td>
<td>C-optimized for all Intel® 64 platforms</td>
<td>P4</td>
<td>SSE2 minimum</td>
</tr>
<tr>
<td></td>
<td align="middle">m7</td>
<td>SSE3</td>
<td>Prescott, Atom</td>
<td></td>
</tr>
<tr>
<td></td>
<td align="middle">u8</td>
<td>Supplemental SSE3</td>
<td>Core 2</td>
<td></td>
</tr>
<tr>
<td></td>
<td align="middle">y8</td>
<td>SSE4.1, SSE4.2, AES-NI</td>
<td>Penryn, Nehalem, Westmere</td>
<td>see notes below</td>
</tr>
<tr>
<td></td>
<td align="middle">n8</td>
<td>Atom-optimized (SSE3)</td>
<td>Atom</td>
<td>new in 6.0</td>
</tr>
<tr>
<td></td>
<td align="middle">e9</td>
<td><a href="http://www.intel.com/software/avx">AVX</a></td>
<td>Sandy Bridge µarchitecture</td>
<td>new in 6.1</td>
</tr>
<tr>
<td>Itanium®</td>
<td align="middle">i7</td>
<td>Intel® Itanium® processor family</td>
<td>Itanium</td>
<td></td>
</tr>
<tr>
<td>IXP4xx</td>
<td align="middle">sx</td>
<td>C-optimized for IXP4xx processors</td>
<td>IXP/XScale</td>
<td>thru 5.3 only</td>
</tr>
<tr>
<td></td>
<td align="middle">s2</td>
<td>IXP4xx optimized</td>
<td>IXP/XScale</td>
<td>thru 5.3 only</td>
</tr>
</tbody>
</table>
<p><br />For more information regarding Intel IPP library support for the Intel® IXP4XX (IXP) and XScale processors, please see the following articles:</p>
<p><a href="http://software.intel.com/en-us/articles/intel-ipp-for-intel-ixp-support/" target="_blank" style="font-family: verdana, sans-serif; color: #0860a8; text-decoration: none; padding: 0px; margin: 0px; border: 0px initial initial;">Intel IPP for Intel IXP Support</a><br /><a href="http://software.intel.com/en-us/articles/pxa9xx-pxa27x-xscale-how-to-get-developer-support/" target="_blank">PXA9xx / PXA27x / XScale -- How to get Developer Support</a></p>
<p><b>P8/Y8 Internal Run-Time Dispatcher</b></p>
<p>Within the 32-bit p8 and equivalent 64-bit y8 architectures there is an additional "run-time" dispatching mechanism, a kind of mini-dispatcher. The Nehalem (Intel Core i7) and Westmere processor families add additional SIMD instructions beyond those defined by SSE4.1. The Nehalem processor family adds the SSE4.2 SIMD instructions and the Westmere family adds AES-NI.</p>
<p>Creating two additional internal versions of the IPP library for the SSE4.2 and AES-NI instructions would be very space inefficient, so they are bundled as part of the SSE4.1 library. When you call a function that includes, for example, AES-NI optimizations, an additional jump directs your call to the AES-NI version within the p8/y8 library. Because the enhancements affect the optimization of only a small number of IPP functions, this additional overhead occurs infrequently and only when your application is executing on a p8/y8 architecture processor.</p>
<p>Additional information regarding dispatching and how it relates to <a href="http://software.intel.com/en-us/articles/use-ipp-on-amd-processor/" target="_blank">non-Intel processors can be found here</a>. How to identify your specific processor is <a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-is-there-any-function-to-detect-processor-type/" target="_blank">described here</a>. To correlate a processor family name with an Intel CPU brand name, use the following web site: <a href="http://ark.intel.com/" target="_blank">ark.intel.com</a>.</p>
<p><strong>Processor Architecture Table</strong></p>
<p><span style="color: #333333;">The following table was copied from an <a style="font-family: verdana, sans-serif; color: #0860a8; text-decoration: none; padding: 0px; margin: 0px; border: 0px initial initial;" href="http://software.intel.com/en-us/articles/performance-tools-for-software-developers-intel-compiler-options-for-sse-generation-and-processor-specific-optimizations/" target="_blank">Intel Compiler Pro options article</a> describing some compiler architecture options. It contains a list of Intel processors showing which processors support which SIMD instructions. For the latest table please refer to the original article; it gets updated on a regular basis. Please note that the behavior of the Intel Compiler SIMD dispatcher described in <a style="font-family: verdana, sans-serif; color: #0860a8; text-decoration: none; padding: 0px; margin: 0px; border: 0px initial initial;" href="http://software.intel.com/en-us/articles/performance-tools-for-software-developers-intel-compiler-options-for-sse-generation-and-processor-specific-optimizations/" target="_blank">that article</a> does not apply to the Intel IPP library.</span></p>
<p><span style="line-height: normal; color: #333333;">
<p style="font-family: verdana, sans-serif; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 16px; padding: 0px;"><i style="font-family: verdana, sans-serif; padding: 0px; margin: 0px;">The Intel IPP library dispatching mechanism behaves differently than that found in the Intel Compiler products, and may also behave differently than other Intel library products.</i></p>
</span></p>
<p><b><b>SSE</b>4.2</b><br />Intel® Core™ i7 Processors<br />Intel® Xeon® 55XX series</p>
<p><b><b>SSE</b>4.1<br /></b>Intel® Xeon® 74XX series<br />Quad-Core Intel® Xeon 54XX, 33XX series<br />Dual-Core Intel® Xeon 52XX, 31XX series<br />Intel® Core™ 2 Extreme 9XXX series<br />Intel® Core™ 2 Quad 9XXX series<br />Intel® Core™ 2 Duo 8XXX series<br />Intel® Core™ 2 Duo E7200</p>
<p><b><b>SSSE</b>3</b><br />Quad-Core Intel® Xeon® 73XX, 53XX, 32XX series<br />Dual-Core Intel® Xeon® 72XX, 53XX, 51XX, 30XX series<br />In tel® Core™ 2 Extreme 7XXX, 6XXX series<br />Intel® Core™ 2 Quad 6XXX series<br />Intel® Core™ 2 Duo 7XXX (except E7200), 6XXX, 5XXX, 4XXX series<br />Intel® Core™ 2 Solo 2XXX series<br />Intel® Pentium® dual-core processor E2XXX, T23XX series</p>
<p><b><b>SSE</b>3</b><br />Dual-Core Intel® Xeon® 70XX, 71XX, 50XX Series<br />Dual-Core Intel® Xeon® processor (ULV and LV) 1.66, 2.0, 2.16<br />Dual-Core Intel® Xeon® 2.8<br />Intel® Xeon® processors with SSE3 instruction set support<br />Intel® Core™ Duo<br />Intel® Core™ Solo<br />Intel® Pentium® dual-core processor T21XX, T20XX series<br />Intel® Pentium® processor Extreme Edition<br />Intel® Pentium® D<br />Intel® Pentium® 4 processors with SSE3 instruction set support</p>
<p><b><b>SSE</b>2</b><br />Intel® Xeon® processors<br />Intel® Pentium® 4 processors<br />Intel® Pentium® M</p>
<p><b>IA32</b><br />Intel® Pentium® III Processor<br />Intel® Pentium® II Processor<br />Intel® Pentium® Processor</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-understanding-cpu-optimized-code-used-in-intel-ipp</link>
      <pubDate>Thu, 04 Feb 2010 17:33:27 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-understanding-cpu-optimized-code-used-in-intel-ipp#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-understanding-cpu-optimized-code-used-in-intel-ipp</guid>
      <category>Intel® IPP</category>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>AI Reasoning and Workload Management of Parallel Sensor Queries in Games</title>
      <description><![CDATA[ <b>By Alex J. Champandard</b><br /> <br /> <i>The demo discussed in this article was implemented with Radu Cristea based on work by Jeremy Tryba. Thanks to Björn Knafla for his help and Damian Isla for his insights.</i><br /> <br /> Making the most of the computation you have available is always important, but when multiple threads working in parallel are available, improving efficiency pays off even more. For game characters, by designing your artificial intelligence (AI) system cleverly, you can get even more information to make better decisions and reduce reaction times to avoid embarrassing pauses.<br /> <br /> In the <a href="http://software.intel.com/en-us/articles/multi-threading-line-of-sight-calculations-to-improve-sensory-system-performance-in-game-ai/ ">previous article</a> in this series, you saw how to leverage multi-threading at a mid-level (that is, relying on Intel® Threading Building Blocks [Intel® TBB]) using parallel line-of-sight (LoS) checks to speed up the process of acquiring information. This article looks into the design of sensory reasoning at a higher level to provide more reliable performance and reduce worst-case scenarios.<br /> <br /> In this article, you'll learn how to:<br /> 
<ul>
<li>Set up persistent queries for information that can be run on demand when time is available.</li>
<li>Reduce redundant computation by better understanding what information is required.</li>
<li>Prioritize queries to ensure that more time is spent on the information that is most important to the AI.</li>
</ul>
You can do all this with a modification to the AI architecture without having to sacrifice determinism.<br /><br /> <br />
<h1 class="sectionHeading">The Existing System</h1>
The system described in the <a href="http://software.intel.com/en-us/articles/multi-threading-line-of-sight-calculations-to-improve-sensory-system-performance-in-game-ai/">previous article</a> is flexible [1]: You can create arbitrary sensory queries and implement jobs that can run in parallel to provide information to the AI. By leveraging multi-core hardware, you can boost performance anywhere from 1.6× to 5× the performance for 4-8 threads.<br /><br />Of course, there's certainly room for additional low-level optimizations:<br /> 
<ul>
<li>Further batching up all the sub-jobs that use identical data to increase cache coherence.</li>
<li>Removing the overhead of indirection for each sub-job when those jobs can be handled in batches.</li>
</ul>
However, the best way to make the most of your hardware is often to introduce domain-specific systems that take advantage of the very nature of the problem. In this case, you can create an extra layer of AI reasoning between the low-level sensory system and the behaviors using the information [2].<br /> <br /> To give you an idea of how much room for improvement there is, if you add low-level parallel queries to your system, you're still most likely facing the following problems. These statistics are based on the same Hide &amp; Seek scenario from the AI Sandbox [1] used in the previous article (see Figure 1).<br /> 
<ul>
<li><b>80% of the queries run by the system in the worst-case frames are redundant.</b> With each actor working independently to find cover, each actor often requests the same LoS calculation as another actor looking for similar cover from the same threat.</li>
<li><b>27% of the frames don't have enough processing to be worth parallelizing.</b> The way an AI actor behaves in a world means it won't continuously require information, because most of the time is simply spent following a course of action.</li>
<li><b>8% of the frames have too much processing to do, so certain calculations must be delayed.</b> When actors wait until the last moment to request information for decisions, you get spikes. You can spread these computations out, but doing so causes unpredictable lags in the behavior.</li>
</ul>
These problems are obvious on lower-end hardware as well as on the high-end multi-core machines. However, when you use any form of multi-threading, these inefficiencies becomes particularly important, and it's worth taking the extra step to resolve such problems. The solution presented in this article works well in both these situations.<br /><br /> <br /> <img src="http://software.intel.com/file/24988" /><br /> <br /> <i><b>Figure 1.</b> Hide &amp; Seek mini-game in the AI Sandbox. A single patrolling agent (in red) is moving around the world in a fixed patrol route, while the hiders (in yellow) are fleeing to cover, because their previous hiding location was invalidated. While hiding, dozens of LoS calculations are evaluated for nearby cover points.</i><br /><br /> <br />
<h1 class="sectionHeading">A Sensory Reasoning System</h1>
The key is to create an extra layer of logic within the AI (see Figure 2)-called a reasoning system-based around a blackboard [2]. This layer contains code that runs independently of the high-level AI to gather information as well as memory that acts as a buffer for information from the sensory system.<br /> <br /> Such an architecture has multiple benefits:<br /> 
<ul>
<li>It avoids redundant computation by centralizing all of the independent queries of all the actors.</li>
<li>It can set up sensory jobs in anticipation of the information being required before it's even needed to reduce delays.</li>
<li>It caches recent information so that there's no need to cap the number of queries made each frame, particularly when lots of queries are made at the same time!</li>
</ul>
In practice, the reasoning layer caches the most commonly used information and the information most expensive to acquire. In the case of a combat game or in the Hide &amp; Seek demo from the AI Sandbox, things like cover points are ideal candidates. The reasoning system is then responsible for acquiring this information independently from the high-level AI or behavior and keeping it as up to date as possible.<br /><br /> <img src="http://software.intel.com/file/24989" /><br /> <br /> <i><b>Figure 2.</b> The sensory and reasoning systems within the AI architecture, with the sensory system discussed in the first article [1] in the box on the left. The new reasoning system stands in the middle and acts as an intermediate between the behavior (or high-level AI) on the right.</i><br /> <br /> <br />Here's an overview of how the system shown in Figure 2 works.<br /> <ol>
<li>In each frame, the reasoning system makes sensory queries to acquire information about the cover locations for which it's trying to determine the validity. These queries are based on the known threats-for instance, the Red actors patrolling in the world. See Figure 3.</li>
<li>The sensory system returns delayed results for the LoS queries as processed by the ray test jobs that were described in the previous article [1]. As this information becomes available, the reasoning system processes it.</li>
<li>The reasoning stores information about each cover location based on the threats. In this case, the cover validity is calculated per "faction," although it could be done individually (at the cost of more computation).</li>
<li>When the high-level AI needs new cover, it can look up the cover suitability for its faction and process the information further to pick a final cover point. The reasoning system tries to guarantee that the cover validity remains as up to date as possi-ble. See Figure 4.</li>
<li>As the AI actors hide in cover, they can ascertain the validity of any cover point simply by looking up the value in the reasoning system. In fact, this particular example is best employed using an event-driven notification rather than polling.</li>
</ol> That covers the architecture and control flow within the system, but there are still quite a few implementation details left.<br /> <br />
<p style="text-align: center;"><img src="http://software.intel.com/file/24990" /></p>
<br /> <i><br /><b>Figure 3.</b> The reasoning component acquires information via asynchronous requests from the sensory component, and stores the results internally.</i> <br /><br /> <br />
<p style="text-align: center;"><img src="http://software.intel.com/file/24991" /></p>
<br /> <br /> <i><b>Figure 4.</b> When the behavior system requires information, direct synchronous calls are made to query the information that's already available.</i><br /><br /> <br />
<h1 class="sectionHeading">Parallel Implementation</h1>
How does the reasoning system manage the validity or suitability of cover locations in practice? What part of the code is responsible for distributing the computation over multiple frames? Can the system predict the requests of the AI actors to pre-cache information before it's even requested?<br /> <br /> The most robust approach is to use a round-robin solution, which goes through requesting LoS information for all known cover locations in turn. Each frame, however, would have a limit on the maximum number of queries that could be made. Here is an example of the main loop split into the three phases: pre-update (sequential), update (parallel), and postupdate (sequential):<br />
<pre name="code" class="cpp">// This sequential phase is run before the parallel Sensory update.<br />void ReasoningSystem::preUpdate()<br />{	<br />	size_t coverCount = m_CoverLocations.size();<br /><br />	// Loop through the pre-allocated queries.  This is the maximum allowed<br />	// number of queries this frame.<br />	for (size_t i=0; i&lt;m_Queries.size(); ++i)<br />	{<br />		// Pick the next location via round-robin.<br />		CoverLocation&amp; cover = m_CoverLocations[m_iCurrentIndex++ % coverCount];<br />		<br />		// Setup a query for known enemies; only one used here.<br />		CoverLineOfSightQuery&amp; q = m_Queries[i];<br />		Actor&amp; enemy = findNearestEnemy(cover);<br />		m_Query.setTargetPosition(enemy.getPosition());<br />		m_Query.setSourcePosition(cover.getPosition());<br />		m_Query.setCover(cover);<br /><br />		// This LoS calculation will be processed in parallel later.<br />		m_pSensorySystem-&gt;addQuery(q);<br />	}<br /><br />} // preUpdate()<br /><br /><br />/** NOTE: The parallel SensorySystem::update() will be called in the meantime. **/<br /><br /><br />// This phase is run sequentially after the sensory results are available.<br />void ReasoningSystem::postUpdate()<br />{<br />	for (size_t i=0; i&lt;m_Queries.size(); ++i)<br />	{<br />		CoverLocation&amp; cover = m_Query.getCover();<br />		cover.setVisibility(m_Query.getVisibility());<br />		m_pSensorySystem-&gt;removeQuery(q);<br />	}<br /><br />} // postUpdate()<br /></pre>
<br />This algorithm is by far the simplest you could implement here, and it's a great default implementation. There are many options for dynamically prioritizing the LoS calculations, but having such a predictable scheduling algorithm running in the background can help guarantee a maximum worst-case response time. Expect to be using round robin at the base of your implementation for a long time to come. The following code provides an example of how the behavior can use this information:<br /><br />
<pre name="code" class="cpp">CoverLocation* MyBehavior::selectCover()<br />{<br />	CoverLocations locations;<br />	findNearbyCoverLocations(locations);<br />	for (size_t i=0; i&lt;locations.size(); ++i)<br />	{<br />		CoverLocation&amp; cover = locations[i];<br />		if (m_pReasoningSystem-&gt;isCoverValid(cover))<br />		{<br />			return &amp;cover;<br />		}<br />	}<br />	return NULL;<br /><br />} // selectCover()<br /></pre>
<br />Going further, many options for dynamic prioritization can help make the most of your parallel calculations while maintaining determinism. For example, use distance to the player and/or camera to boost the priority of the cover calculations and to prevent delays when the AI actors are nearby and particularly visible. Another option is to increase the importance of LoS calculations for cover locations that AI actors are currently using to provide information about invalidation sooner. Also, you can locally boost the priority of cover locations around actors that could potentially look for cover-for example, using a radius based on what the AI is interested in.<br /> <br /> The downside of prioritization is that it does take two extra steps: one to calculate priorities and a second to sort the options before even making requests. However, if done well, the cost is negligible compared to being able to leverage the underlying multi-threaded LoS calculations.<br /><br /> <br />
<h1 class="sectionHeading">Results</h1>
Both viable solutions for managing LoS queries are tested here: one using on-demand query requests, then capping the maximum number of calculations in each frame (as discussed in the previous article [1]), and another using an extra reasoning layer as described in this article. Comparing the two approaches purely in terms of lag and performance emphasizes their relative tradeoffs.<br /> <br /> Figure 5 and Figure 6 show statistics taken from 20 seconds of simulation of the Hide &amp; Seek mini-game in the AI Sandbox [3]. In this configuration, two enemy guards were patrolling, and 12 civilian actors were taking cover and hiding. In this setup, there were 104 different cover locations for taking cover and roughly two dozen obstacles to consider.<br /> <br /> What can you take away from these results? First, capping the maximum number of queries each frame performs rather well! Assuming a reasonable cap, you'll be able to process the majority of the queries in one frame. The downside of using capping is that there's an unpredictable lag in the queries, and that lag becomes worse when you need the information most-during spikes. The managed queries (via the reasoning component) guarantee a certain baseline performance, so the data is available at the very least within three frames in this scenario. Also, in the best case, it means that the data is available immediately without any extra changes to the structure of the main game loop. This extra reasoning layer assures a minimum number of LoS queries during otherwise empty frames, which is useful for maximizing performance of the parallel computation.<br /> <br /> <img src="http://software.intel.com/file/24992" /><br /> <br /> <i><b>Figure 5.</b> Number of sensory queries processed each frame using three different policies for comparison: in red, all queries are executed; in blue, there's a maximum number of queries per frame (in this case, 30); and in grey, an extra reasoning layer manages the queries (20 per frame).</i><br /> <br /> <br />Digging into the details from the simulation in Figure 5, five common patterns are worth noting:<br /> 
<ul>
<li>(a) Small and frequent spikes that cause minor delays in the queries when they are capped per frame</li>
<li>(b) Sustained processing within the capped range, which does not cause any particular delays (These are ideal conditions for efficiency.)</li>
<li>(c) Large spikes when actors request LoS queries at the exact same time, which must be dealt with if the frame rate is to be kept constant</li>
<li>(d) An equally large lag in the results from the LoS calculations because of the capping of the queries per frame</li>
<li>(e) Spikes on top of a sustained period of processing also cause multiple frames of lag-up to eight or more</li>
</ul>
Figure 6 shows how these spikes affect the delay for the average LoS query and how managed queries compare in practice.<br /> <br /> <img src="http://software.intel.com/file/24993" /><br /> <i><b>Figure 6.</b> Comparative analysis of the delay incurred by different query-management policies. In this case, it takes four frames to calculate LoS to relevant objects near the actors. The first results can be available the very same frame when the reasoning layer is used. In contrast, the bulk of the queries made lazily are processed 1-3 frames afterwards (assuming a cap of ~10 queries per frame).</i><br /><br /><br />
<h1 class="sectionHeading">Discussion</h1>
The concept of a reasoning layer has many benefits from an AI and architectural perspective, including decoupling and modularity. In this case, it also provides some performance benefits-particularly in its ability to schedule parallel workloads reliably.<br /><br /> In practice, the reasoning system is often programmed explicitly alongside the AI behavior to make sure it prepares information that closely matches what's going to be requested. This behavior is particularly useful, because you can get up and running very quickly once you've put your architecture in place, and it takes little extra code to start seeing the bene-fits of this approach. Similarly, the overhead of implementing the reasoning logic is insigni-ficant compared to the amount of time spent on the high-level AI and behavior.<br /><br /> The alternative-that is, building a system that can deal with arbitrary requests from the AI (including when it changes throughout development) and pre-caching and pre-empting its queries-isn't an easy task, as it requires tight integration with the high-level AI and a good understanding of how behaviors execute.<br /><br /> Also, it's important to note that the AI can still be given access to the low-level sensory system to make direct requests for one-off LoS queries. Of course, it's best to rely on the middle layer of abstraction provided for the bulk of the information that the AI requires (that is, over 90%).<br /><br /><br />
<h1 class="sectionHeading">Summary</h1>
Making the most of multi-core hardware always requires a good understanding of the problem at hand. Of course, low-level details are important, too; but in the case of AI and processing information from the environment, you can leverage multiple threads to get orders of magnitude better results.<br /><br /> In particular, this article showed how you can create a separate system responsible for managing LoS queries and maintaining things like cover suitability and validity on a per-faction basis. This kind of architecture is not only useful for eliminating redundant computation but also provides an opportunity for further improving the effectiveness of the computation by prioritizing calculations better-according to what the game demands.<br /><br /><br />
<h1 class="sectionHeading">References</h1>
[1] <a href="http://software.intel.com/en-us/articles/multi-threading-line-of-sight-calculations-to-improve-sensory-system-performance-in-game-ai/">Multi-threading Line-of-Sight Calculations to Improve Sensory System Performance in Game AI</a> by Alex J. Champandard, 2009.<br /><br /> [2] Blackboard Architectures and Knowledge Representation with Damian Isla; <a href="http://www.aigamedev.com">AiGameDev.com</a> Masterclass, 2009.<br /><br /> [3] The AI Sandbox [<a href="http://aisandbox.com">http://aisandbox.com/</a>].<br /><br /><br />
<h1 class="sectionHeading">About the Author</h1>
Alex Champandard is the mastermind behind <a href="http://www.aigamedev.com">AiGameDev.com</a>, the largest online hub and continuous training program for artificial intelligence in games. He has worked in the digital entertainment industry as a senior AI programmer for many years, most notably for Rockstar Games. He regularly consults with leading studios in central Europe, recently finishing a contract on the multiplayer bots for KILLZONE 2 at Guerrilla Games. Alex also organizes Paris Game AI Conference and is an Associate Editor for the IEEE Transactions on Computational Intelligence &amp; AI in Games. He serves on the Program Committee for the AIIDE Conference. ]]></description>
      <link>http://software.intel.com/en-us/articles/ai-reasoning-and-workload-management-of-parallel-sensor-queries-in-games</link>
      <pubDate>Thu, 04 Feb 2010 16:26:31 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/ai-reasoning-and-workload-management-of-parallel-sensor-queries-in-games#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/ai-reasoning-and-workload-management-of-parallel-sensor-queries-in-games</guid>
      <category>Visual Computing</category>
      <category>Game Development</category>
    </item>
    <item>
      <title>Unleash the Power of Social Media</title>
      <description><![CDATA[ <h2 class="sectionHeading">Introduction</h2>
As a game developer, imagine this situation happening to your users: You're playing a great multiplayer game and want to easily arrange games with your friends. The only problem is some of your friends aren't a part of your favorite gaming community. When you get home, you boot up your favorite game and find that none of your friends are on line. No problem, you send some IMs, emails and texts, then sign on to a few game networks; what a pain! Imagine if the game could contact your friends for you! Services like Steam*, XFire*, GamerDNA*, and Raptr* exist, but all these services presume that the friends who you'll be gaming with are already using their service. Wouldn't it be great if your favorite multiplayer game made this notification automatically, without you having to install and run specialized software?<br /><br />For game developers looking to broaden their audience base, social media sites present a big market expansion opportunity. Sites like Twitter* and Facebook* have a much broader audience than niche services directed at gaming. In August 2009, Twitter had 66 million unique visitors generating 4 billion page views [<a target="_blank" href="http://www.briansolis.com/2009/10/revealing-the-people-defining-social-networks/">1</a>]. By leveraging social media sites from within your game, you not only connect existing users, but help them introduce it to their friends (your future customers).<br /><br /><br />
<h2 class="sectionHeading">Let's get to it already!</h2>
So now you understand the "why" - the rest of the article is devoted to the "how." I will walk through some code (implemented in C#) for enabling the basic functionality needed to send Tweets through PC games.<br /><br />
<pre name="code" class="cpp">private void tweetBasicAuth(string myMessage)<br />{<br />    //this is the URL where a user sends an update<br />    string tweetURL = "http://twitter.com/statuses/update.xml?";<br /><br />    //building out the querystring to include the message in the status field<br />    string tweetMsg = tweetURL + "status="+ myMessage; <br />   <br />    HttpWebRequest tweetRequest = (HttpWebRequest)WebRequest.Create(tweetMsg);<br />    tweetRequest.Method = WebRequestMethods.Http.Post;<br /><br />    //Set the username and password from where it is stored<br />    //Reminder: passwords should be accessed as little as possible<br />    tweetRequest.Credentials = new NetworkCredential(textBoxUsername.Text, textBoxPasswd.Text);<br /><br />    tweetRequest.ContentType = "application/x-www-form-urlencoded";<br /><br />    try<br />    {<br />        //If the response is normal, we close it.  <br />        //If it generates an exception we handle it in the catch.<br />        HttpWebResponse tweetResponse = (HttpWebResponse)tweetRequest.GetResponse();<br />        tweetResponse.Close();<br /><br />    }<br />    catch (Exception e)<br />    {<br />        //Put your exception catching code here.<br />        //A bad username/password will generate a 401 response <br />        //resulting in this exception being thrown.<br />        MessageBox.Show("Exception Generated: " + e.Message);<br /><br />    }<br />}<br /></pre>
<br />This simple block of code takes the message that you would like to Tweet as an argument and publishes it to the user's Twitter account. It assumes the program has access to the username and password for the account to be updated. It uses basic authentication which puts the user's credentials in the header of the http request. Although this approach is simple, putting that information into the http header is not secure. A more secure method is to use OAuth as detailed <a target="_blank" href="http://apiwiki.twitter.com/OAuth-FAQ">here</a>.<br /><br />One problem encountered with Twitter is that in order to avoid over usage or spam, it has filters that eliminate redundant messages. I found that even toggling between two messages ("Mitch is playing a PC Game" / "Mitch is not playing a PC Game") would not make it through the redundant message filter. Unfortunately, the timeline for these is fairly long so if with the above example I started a game and exited for some reason, and then started within the next hour, my tweets saying that I was playing the game would not appear. A simple solution is to automatically append a unique string, like a timestamp, to the end of the message.<br /><br /><img src="http://software.intel.com/file/24451" /><br /><br /><b>Figure 1.</b> Tweeting from your game is as simple as putting together an appropriate http-post!<br /><br /><br />
<h2 class="sectionHeading">Extending from Twitter to Facebook</h2>
Now that you've written Twitter integration into your game, your end-users can Tweet automatically at checkpoints that you've defined. Of course you're wondering how to do the same thing with Facebook status updates. One option is to use the <a target="_blank" href="http://developers.facebook.com/">Facebook API</a> and separately integrate that functionality into your game. An alternative would be to educate and encourage your end-users to utilize existing services that push/pull data between Facebook and Twitter. Essentially by enabling updates to Twitter, your users can get Facebook status updates "for free." One of the many articles on how to push or pull status updates between Twitter and Facebook is <a target="_blank" href="http://mashable.com/2009/05/25/twitter-to-facebook/">here</a>.<br /><br /><br />
<h2 class="sectionHeading">Take it and make it yours!</h2>
In the scenario laid out at the beginning of this article I advocated for a usage model that sends a Tweet when the player starts your application, but that is only the most basic scenario. I hope that by illustrating how easy it is to Tweet from a PC application, you will innovate on a diverse range of usage models that your players find fun and valuable. Go forth and leverage the reach of social media sites to increase awareness of your PC game!<br /><br /><br />
<h2 class="sectionHeading">About the Author</h2>
Mitch Lum received his bachelors, masters, and PhD from the University Of Washington, Department of Electrical Engineering. His academic work focused on the development of a telesurgery system named Raven. He is currently in the Rotation Engineer's Program at Intel in the Visual Computing Software Division.<br /><br /> ]]></description>
      <link>http://software.intel.com/en-us/articles/unleash-the-power-of-social-media</link>
      <pubDate>Thu, 04 Feb 2010 09:35:02 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/unleash-the-power-of-social-media#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/unleash-the-power-of-social-media</guid>
      <category>Visual Computing</category>
      <category>Game Development</category>
    </item>
    <item>
      <title>Distribution of the Intel® Cluster Runtimes License</title>
      <description><![CDATA[ <span class="sectionBody"><strong>Note</strong>: this article only applies to Intel® Cluster Ready partners.<br /><br /><span class="sectionHeading">Background</span></span><br /><br />The Intel® Cluster Runtimes 2.1-2 for Linux* is a single source package of runtime components and libraries. It provides all of the Intel Software runtime files required by the Intel® Cluster Ready specification. It is intended to simplify the integration of Intel® Cluster Ready certified clusters and may be freely redistributed by system integrators on those clusters.<br /><br /><span class="sectionHeading">License File<br /></span><br />A serial number is required to access the Intel® Cluster Ready product on <a href="https://registrationcenter.intel.com">Registration Center</a> and download the Intel Cluster Runtimes. Unlike most other Intel Software Tools, no license file will be emailed after registration.  No license file is required to install or use the Intel® Cluster Runtimes.  <br /><br /><span class="sectionHeading">Redistribution</span><br /><br />In general, Intel® Cluster Ready partners are permitted to include the Intel® Cluster Runtimes pre-installed with any Intel® Cluster Ready certified cluster.<br /><br />All terms of the distribution license are defined in the EULA, provided as part of the package. The EULA will be installed at <span style="font-family:courier new,monospace;">/opt/intel/licenses/Master_EULA_for_Intel_Tools_Runtimes_Kit.txt</span>.  The EULA is also available for separate download.  The EULA ile must be unmodified and included with any redistribution, or partial redistribution, of the Intel® Cluster Runtimes.<br /> ]]></description>
      <link>http://software.intel.com/en-us/articles/distribution-of-the-intel-cluster-runtimes-license</link>
      <pubDate>Thu, 04 Feb 2010 08:30:18 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/distribution-of-the-intel-cluster-runtimes-license#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/distribution-of-the-intel-cluster-runtimes-license</guid>
      <category>Intel® Cluster Ready Knowledge Base</category>
    </item>
  </channel></rss>