<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated on Sat, 26 May 2012 04:15:44 -0700 -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="http://software.intel.com/en-us/articles/intel-parallel-inspector-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-parallel-inspector-kb/type/technical-notes/</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Intel® Parallel Studio 2011 SP1 Release Notes</title>
      <description><![CDATA[ <p>This page provides the current Installation Guide and Release Notes for the Intel® Parallel Studio 2011 SP1 product. All files are in PDF format - <a target="_blank" href="http://www.adobe.com/go/EN_US-H-GET-READER">Adobe Reader* </a>(or compatible) required.</p>
<p>To get product updates, log in to the <a href="https://registrationcenter.intel.com/">Intel® Software Development Products Registration Center</a></p>
<p>For questions or technical support, visit <a target="_blank" href="http://software.intel.com../../../../../sites/support/">Intel® Software Developer Support</a></p>
<hr />
<p><strong>Version 2011 SP1 Initial release</strong>, September 6, 2011: <a href="http://software.intel.com/file/38337">release_notes_studio.pdf</a></p>
<hr /> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-parallel-studio-2011-sp1-release-notes/</link>
      <pubDate>Wed, 31 Aug 2011 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-parallel-studio-2011-sp1-release-notes/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-parallel-studio-2011-sp1-release-notes/</guid>
      <category>Intel® Parallel Amplifier Knowledge Base</category>
      <category>Intel® Parallel Composer Knowledge Base</category>
      <category>Intel® Parallel Inspector Knowledge Base</category>
      <category>Intel® Parallel Advisor Knowledge Base</category>
    </item>
    <item>
      <title>Comparing the command-line interface of Intel(R) Parallel Inspector 2011 and Intel(R) Inspector XE 2011</title>
      <description><![CDATA[ Command-line Interface (CLI) is intended to help a user in accelerating routine work and avoiding the user’s interaction with the GUI while collecting the correctness data. Both products, Parallel Inspector and Inspector XE, provide CLI functionality, but in a vastly different volume. Parallel Inspector is designed for using as a part of Microsoft(R) Visual Studio IDE and provides an excellent user interface for starting the correctness analysis and analyzing collected data. The Parallel Inspector contains some basic CLI functionality which allows collecting results during off-hours, so you can view those results at your convenience. In addition, it can be used for regression testing to determine if source code changes introduced new memory and threading problems. The Inspector XE, however, provides additional value of supporting managed runtimes, selecting collection modes and managing the detailed results output.
<div><br /></div>
<div>Let’s review the basic commands provided by Parallel Inspector and then observe the additional functionality available with the Inspector XE. It’s expected that a user is familiar with the basic functionality of Parallel Inspector and the correctness analysis concepts.</div>
<div><br /></div>
<div >The Parallel Inspector CLI collection commands set includes:</div>
<div >-<i>collect</i> action <br />Runs a memory or threading error analysis, e.g. mi1 level (Does my target leak memory?) or ti1 level (Does my target have deadlocks?)
<div><br /></div>
-<i>command</i> action<br /> Performs an action on a running analysis, e.g. stop, which stops target execution and collection.
<div><br /></div>
-<i>create-suppression-file</i> action<br /> Generates a suppression file for all detected problems in a result.
<div><br /></div>
-<i>finalize</i> action<br /> Redoes symbol resolution for an existing result.</div>
<br /> Once the data is collected, Inspector reports a summary of detected problems in the insp-cl.txt file in the result directory. Alternatively, a user may check the insp-cl exit code for new errors.
<div><br /></div>
There are quite a few useful command modifiers that help to perform data collection and results analysis. <br />
<div >Here are some basic modifiers:</div>
<div >-<i>result-dir</i><br /> The common modifier used to identify a location for storing Inspector data.
<div><br /></div>
-<i>quiet/-verbose</i><br /> The common modifier used to minimize/maximize information written to log files.
<div><br /></div>
-<i>search-dir</i><br /> The collect and finalize action modifier used to configure the insp-cl command to search non-standard directories during target execution, analysis, and finalization.
<div><br /></div>
-<i>suppression-file</i><br /> The collect action modifier used to apply one or more suppression files that contain rules for matching problems that should be ignored and therefore not included in the summary of detected problems.
<div><br /></div>
<i>(-no)-discard-suppressed-problems</i><br /> The collect action modifier used to (not) delete from a result all detected problems that match the rules in applied suppression files.
<div><br /></div>
-<i>return-app-exitcode</i><br /> The collect action modifier used to override Inspector exit codes with the target application exit code.</div>
<div><br /></div>
Note: Run insp-cl -help to access built-in documentation that provides more details.
<div><br /></div>
Here is the example of the Parallel Inspector’s output after memory errors analysis started with the following command line: <br /> <code> &gt;insp-cl.exe -collect mi2 -result-dir r000mi -verbose -- MemoryTest.exe <br /> &gt;r000mi/insp-cl.txt <br /> === Start: [2010/12/08 15:29:19] ===  <br />Used suppression file(s): [] <br /> <br />11 new problem(s) found  <br /> 1 Mismatched allocation/deallocation problem(s) detected  <br /> 5 Memory leak problem(s) detected  <br /> 3 Invalid memory access problem(s) detected  <br /> 1 Invalid partial memory access problem(s) detected  <br /> 1 Uninitialized partial memory access problem(s) detected  <br />=== End: [2010/12/08 15:29:26] ===<br /> </code>
<div><br /></div>
The Inspector XE supports all the environments and programming languages supported by the Parallel Inspector. In addition it supports .NET/C# on Windows, and C/C++, and Fortran languages on Windows and Linux. Inspector XE’s CLI provides a much richer set of commands and modifiers that help to:<br />
<li> Collect results as part of an automated or background task, so you can view those results at your convenience; </li>
<li> Perform regression testing to determine if source code changes introduced new memory and threading problems; </li>
<li> Generate predefined reports in several formats. </li>
<div><br /></div>
<div >Here are the additional collection commands:</div>
<div >-<i>import</i> action<br /> Creates a new result from an existing Intel® Thread Checker result or raw data file, or from an existing Parallel Inspector result or raw data file.
<div><br /></div>
-<i>report</i> action<br /> Generates a summary, list of problems, or list of code locations report.</div>
<div><br /></div>
Now let’s review the actions and their modifiers that enrich the collection and reporting experience.
<div><br /></div>
<div >Collection action modifiers:</div>
<div >-<i>mrte-mode</i><br /> Speeds up collection by excluding native or managed code, or inspect all code.
<div><br /></div>
-<i>exclude-modules</i><br /> Speeds up collection by excluding application (or child application) modules from inspection.
<div><br /></div>
-<i>executable-of-interest</i><br /> Processes tree analysis. Inspects an application that is not the starting application. E.g. inspects an application called by a script.
<div><br /></div>
-<i>custom-analysis-type</i><br /> If the combination of analysis type settings in the preset analysis types do not meet user’s needs, a new custom analysis can be created.
<div><br /></div>
<i>(-no-)-auto-finalize</i><br /> Performs (no) symbol resolution and suppressions after data collection.
<div><br /></div>
-<i>suppressions</i><br /> Speeds up collection by not collecting data that matches project private suppression rules - delete.  Collects and strikes through result data that matches project private suppression rules - mark. Ignores all project private suppression rules - none.
<div><br /></div>
-<i>knob</i><br /> Sets knob value for selected analysis type in order to fine-tune analysis type settings. This modifier has to be reviewed separately.</div>
<div><br /></div>
<div >Useful fine-tuning analysis type settings:</div>
<div ><i>stack-depth</i> knob<br /> Sets the depth of functions’ call stacks to be collected. Could be selected among 1 | 8 | 16 | 24 | 32 for any type of analysis. For the threading error analyses: the higher the number, the higher the cost.
<div><br /></div>
<i>analyze-stack</i> knob<br /> If set true, detects the invalid and uninitialized accesses to memory allocated on stack for mi3 level.  If not set or set false, significantly decreases the overhead of analysis.
<div><br /></div>
<i>resources</i> knob<br /> If set true, detects the system resource leaks on the memory analysis levels mi1 and mi2. If set false, may decrease the list of reported errors.
<div><br /></div>
<i>terminate-on-deadlock</i> knob<br /> If set true, the target application is stopped when a deadlock is detected and the threading error analysis is automatically completed.
<div><br /></div>
<i>scope</i> knob<br /> If set l2, extremely thorough memory access check with byte granularity to 1 byte, detects data races on stack accesses, and does not defer memory check. Extremely high overhead.</div>
<div><br /></div>
<div >Report action modifiers allow generating flexible reports by formatting, sorting and redirecting the results of analysis:</div>
<div ><i>-report-output</i><br /> Generates report output to file system location instead of default stdout.
<div><br /></div>
<i>-csv-delimiter</i><br /> Selects a delimiter for csv-formatted report output: comma | tab | string
<div><br /></div>
<i>-sort-asc(desc)</i><br /> Sort report data in ascending(descending) order by: function | id | investigated | line | module | problem | severity | source | state
<div><br /></div>
<i>-filter-include</i><br /> Identifies data to show in the report, with predefined form: attribute=value, where the attributes are the same as for -sort-asc(desc)</div>
<div><br /></div>
Note: Run inspxe-cl -help to access built-in documentation that provides more details.
<div><br /></div>
Here is the example of the Inspector XE output after memory errors analysis and report request ran with the following command lines:
<div><br /></div>
<code> &gt;inspxe-cl.exe -collect mi2 -result-dir r001mi -exclude-modules=MSVCR90D.dll -knob stack-depth=8  -- MemoryTest.exe <br /> &gt;r001mi/inspxe-cl.txt <br />=== Start: [2010/12/09 12:32:28] ===  <br />Used suppression file(s): [] <br /> <br />9 new problem(s) found  <br /> 1 Invalid memory access problem(s) detected  <br /> 1 Invalid partial memory access problem(s) detected  <br /> 5 Memory leak problem(s) detected  <br /> 1 Mismatched allocation/deallocation problem(s) detected  <br /> 1 Uninitialized partial memory access problem(s) detected  <br />=== End: [2010/12/09 12:32:36] === </code>
<div><br /></div>
<code> &gt;inspxe-cl.exe -report observations -result-dir r001mi -format=csv -sort-asc=source,line -csv-delimiter=tab -filter-include function=main -report-output=out.csv <br /> &gt;out.csv </code>
<div><img alt="Import_cli_results.jpg" title="Import_cli_results.jpg" src="http://software.intel.com/file/32977" /><br /></div> ]]></description>
      <link>http://software.intel.com/en-us/articles/comparing-command-line-interface-of-inspector-and-inspector-xe/</link>
      <pubDate>Fri, 03 Dec 2010 10:00:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/comparing-command-line-interface-of-inspector-and-inspector-xe/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/comparing-command-line-interface-of-inspector-and-inspector-xe/</guid>
      <category>Tools</category>
      <category>Intel® Parallel Inspector Knowledge Base</category>
      <category>Intel® Inspector XE Knowledge Base</category>
    </item>
    <item>
      <title>Using the Microsoft* debug heap manager with memory error analysis of Intel® Parallel Inspector</title>
      <description><![CDATA[ <p>The Microsoft C runtime debug heap manager tracks/checks/reports a subset of the memory usage that memory error analysis of Intel Parallel Inspector tracks/checks/reports. </p>
<p>Using both of these technologies at the same time has the following implications...</p>
<ul>
<li>Binaries under analysis of Inspector may be interrupted by dialogue boxes 
<ul>
<li>Press the "ignore" button- execution will continue (recommended action) - note: you may have to press "ignore" multiple times - as by default this dialogue box will appear every so many instances for each unique error detected.</li>
<li>Do not press the "abort" button - as that will exit the application before Intel Parallel Inspector can give you a list of all memory errors, and Intel Parallel Inspector may report false positives as your application exited prematurely.</li>
<li>Do not press the “retry” button in the dialog box, else - the debugger will open and point you to assembly code that was "generated" as a result of running your application under the  Inspector analysis engine rather than the assembly of your application (not recommended)</li>
</ul>
</li>
<li>The same issue may be reported by both technologies.</li>
<li>Performance will suffer as both technologies are tracking and checking memory usage</li>
</ul>
<p>You may want to turn off the Debug Heap Manager provided by the Microsoft C runtime library.</p>
<p >There is only one way to "turn off" the debug heap manager... and that is:</p>
<ul >
<li>  Use the Release/Base version of the Microsoft C runtime library by compiling with either /MD or /MT</li>
</ul>
<p >In the ideal situation, it is recommended that you use /Od with memory error analysis in Intel Parallel Inspector with the /MD or /MT runtime library selections. By default a "debug" configuration in Visual Studio will select /MDd or /MTd settings rather than the /MD or /MT settings. You would need to check these settings for each project in your solution.  Note: It can be difficult to accomplish this on large projects - as it will be difficult to have the same runtime library used in your entire application (all dll(s), lib(s), etc).</p>
<p>Another way, to work around this problem - is to tell the "debug" version of the heap manager to disable heap checking and reporting (tracking still occurs with this method).  This can be done using the _CrtSetDbgFlag api.  An example follows showing a code snippet which turns these features off.</p>
<p >#include &lt;crtdbg.h&gt;</p>
<p >main() {</p>
<p >int oriDbgFlag, newDbgFlag;</p>
<p >oriDbgFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);</p>
<p >newDbgFlag &amp;= ~_CRTDBG_ALLOC_MEM_DF; //Turn this off (by default it is on)</p>
<p >newDbgFlag |= _CRTDBG_CHECK_ALWAYS_DF;  //Turn this on (by default it is off)</p>
<p >newDbgFlag &amp;= ~_CRTDBG_CHECK_CRT_DF;  //Not needed as this is default</p>
<p >newDbgFlag &amp;= ~_CRTDBG_DELAY_FREE_MEM_DF; //Not needed as this is default</p>
<p >newDbgFlag &amp;= ~_CRTDBG_LEAK_CHECK_DF; //Not needed as this is default</p>
<p >newDbgFlag = (newDbgFlag &amp; 0x0000FFFF) | _CRTDBG_CHECK_DEFAULT_DF; //Not needed as this is default</p>
<p >newDbgFlag = _CrtSetDbgFlag(newDbgFlag);</p>
<p >//...</p>
<p >For more information look for _CrtSetDbgFlag at MSDN.</p>
<p>Potential dialogue boxes/messages that the debug heap manager of the Microsoft C runtime library may produce, which can be suppressed using the techniques above (when under analysis of Intel Parallel Inspector):</p>
<p >Client hook allocation failure at file</p>
<p >Client hook allocation failure %hs line</p>
<p >Invalid allocation size:</p>
<p >Error: memory allocation: bad memory block type.</p>
<p >Client hook re-allocation failure at file %hs line.</p>
<p >Client hook re-allocation failure Or Error: memory allocation: bad memory block type.</p>
<p >Error: memory allocation: bad memory block type. The Block at 0x%p was allocated by aligned routines, use _aligned_realloc(). The Block at 0x%p was allocated by aligned routines, use _aligned_free()</p>
<p >Client hook free failure. HEAP CORRUPTION DETECTED: before %hs block (#%d) at 0x%p. CRT detected that the application wrote to memory before start of heap buffer.</p>
<p >HEAP CORRUPTION DETECTED: after %hs block (#%d) at 0x%p.</p>
<p >CRT detected that the application wrote to memory after end of heap buffer.</p>
<p >HEAP CORRUPTION DETECTED: after %hs block (#%d) at 0x%p.</p>
<p >CRT detected that the application wrote to memory after end of heap buffer.</p>
<p >_heapchk fails with _HEAPBADBEGIN.</p>
<p >_heapchk fails with _HEAPBADNODE.</p>
<p >_heapchk fails with _HEAPBADEND.</p>
<p >_heapchk fails with _HEAPBADPTR.</p>
<p >_heapchk fails with unknown return value!</p>
<p >HEAP CORRUPTION DETECTED: before %hs block (#%d) at 0x%p.</p>
<p >CRT detected that the application wrote to memory before start of heap buffer.</p>
<p >HEAP CORRUPTION DETECTED: before %hs block (#%d) at 0x%p.</p>
<p >CRT detected that the application wrote to memory before start of heap buffer.</p>
<p >HEAP CORRUPTION DETECTED: after %hs block (#%d) at 0x%p.</p>
<p >CRT detected that the application wrote to memory after end of heap buffer.</p>
<p >HEAP CORRUPTION DETECTED: after %hs block (#%d) at 0x%p.</p>
<p >CRT detected that the application wrote to memory after end of heap buffer.</p>
<p >HEAP CORRUPTION DETECTED: on top of Free block at 0x%p.</p>
<p >CRT detected that the application wrote to a heap buffer that was freed.</p>
<p >HEAP CORRUPTION DETECTED: on top of Free block at 0x%p.</p>
<p >CRT detected that the application wrote to a heap buffer that was freed.</p>
<p >%hs located at 0x%p is %Iu bytes long.</p>
<p >Bad memory block found at 0x%p.</p>
<p >Detected memory leaks!</p>
<p >Damage before 0x%p which was allocated by aligned routine</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/using-the-microsoft-debug-heap-manager-with-memory-error-analysis-of-intel-parallel-inspector/</link>
      <pubDate>Thu, 06 May 2010 21:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/using-the-microsoft-debug-heap-manager-with-memory-error-analysis-of-intel-parallel-inspector/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/using-the-microsoft-debug-heap-manager-with-memory-error-analysis-of-intel-parallel-inspector/</guid>
      <category>Tools</category>
      <category>Intel® Parallel Inspector</category>
      <category>Intel® Parallel Inspector Knowledge Base</category>
      <category>Code &amp; Downloads</category>
    </item>
    <item>
      <title>Annoying error of Uninitialized Memory Access</title>
      <description><![CDATA[ While analyzing a huge project at the mi4 level of Intel® Parallel Inspector, a user may get a lot of errors referred as 'Uninitialized Memory Access' which might considered as a false positives. In some cases these errors do not reflect the real problem in the application and a bunch of such errors might be annoying. Before getting rid of these errors with the Suppressions mechanism let’s consider the problem. The result of a mi4 level memory analysis of simple program is represented on the picture below. Inspector fires the Uninitialized Memory Access error blaming memcpy() function which reads the uninitialized memory pointed by foo.  <br /><br />
<div><img src="http://software.intel.com/file/22800" title="u1.JPG" alt="u1.JPG" /></div>
<br /><br /> Looking at the sample code, we can conclude that the flagged read operation does not affect correctness of the whole application, although it is not good engineering practice.  <br /><br />
<div>
<pre name="code" class="cpp:nogutter:nocontrols">int main() {
	char *foo = (char*)malloc(100);
	char *bar = (char*)malloc(100);
	memcpy(bar, foo, 100);
	
	free(bar);
	free(foo);
	return 0;
}
</pre>
</div>
<br /> <br /> It should be mentioned that Inspector does not report the error on the mi2 or mi3 levels (and not at mi1). However, a user might want to hide such reports for the sake of not littering the real errors list. There is an easy way to do that with the help of suppressions.  <br /> In the Details view of the results, select 'Read' observation for this problem, right-click the mouse for the context menu and choose 'Suppress...'.  <br /><br />
<div><img src="http://software.intel.com/file/22801" title="u2.JPG" alt="u2.JPG" /></div>
<br /><br /> In the private suppression dialog create a filter with 'Uninitialized memory access' problem and 'Read' description. For all other columns (module, function, etc.) you may set * (all) depending of scope of interest. The setting will be saved in the .sup file which can be reused with any other project if made public (Tools &gt; Options &gt; Intel Parallel Inspector &gt; General &gt; Suppressions). <br /><br />
<div><img src="http://software.intel.com/file/22796" title="u3.JPG" alt="u3.JPG" /></div>
<br /><br />This can also be set by selecting 'Private Suppression: Delete problems' in the Configure Analysis dialog box before you click on 'Run Analysis'.<br /><br />
<div><img src="http://software.intel.com/file/22797" title="u4.JPG" alt="u4.JPG" /></div>
<br /><br />The error will not appear after level mi4 analysis is completed.  <br /><br />
<div><img src="http://software.intel.com/file/22802" title="u5.JPG" alt="u5.JPG" /></div>
<br /><br /> Where an instruction is added to code that uses the uninitialized memory in a way that might affect correctness, Inspector should report the error regardless if 'Uninitialized memory access' is suppressed. Consider the following sample code. A printf() instruction sending the content of uninitialized memory to the output is added to the initial sample. <br /><br />
<div>
<pre name="code" class="cpp:nogutter:nocontrols">int main() {
	char *foo = (char*)malloc(100);
	char *bar = (char*)malloc(100);
	memcpy(bar, foo, 100);
	printf("%c\n", bar[100]);//referencing uninitialized mem
	free(bar);
	free(foo);
	return 0;
}
</pre>
</div>
<br /><br /> Inspector will report ‘Invalid memory Access’ error on each level mi2-mi4 and flag the source code line containing the prinf() call. <br /><br />
<div><img src="http://software.intel.com/file/22803" title="u6.JPG" alt="u6.JPG" /></div>
<div><br /></div> ]]></description>
      <link>http://software.intel.com/en-us/articles/error-uninitialized-memory-access/</link>
      <pubDate>Tue, 29 Sep 2009 13:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/error-uninitialized-memory-access/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/error-uninitialized-memory-access/</guid>
      <category>Tools</category>
      <category>Intel® Parallel Inspector Knowledge Base</category>
    </item>
    <item>
      <title>Why Parallel Inspector does not detect obvious data race</title>
      <description><![CDATA[ <div id="art_pre_template">
<p>One of the main goals of Threading Errors analysis in Parallel Inspector is detecting data races which potentially lead to improper operation of applications or data corruption. Sometimes the code constructions that provoke data races are hidden in the complicated implementation of the program and Parallel Inspector is the best tool to help find such constructions.</p>
<p>However, there are some corner cases when an obvious problem in the implementation is not detected despite a sufficiently intrusive analysis. One such case is the parallel code sample below.</p>
<pre name="code" class="cpp:nogutter">#include &lt;omp.h&gt;
int g_var;
void TestFunc(int par)
{
      printf("Thread# %d \n", omp_get_thread_num());
      if (par == 0)
            g_var++;
      if (par != 0)
            g_var--;
}
 
int main(int argc, char* argv[])
{
      omp_set_num_threads(2);
 
#pragma omp parallel for
      for (int i=0; i&lt;2; i++)
            TestFunc(i);
 
      printf("%d \n", g_var);
return 0;
}
</pre>
<p><br /><br />A few comments on the code:</p>
<p>- It's an OpenMP implementation of parallel execution of function TestFunc()</p>
<p>- TestFunc() is called once by each of the two threads</p>
<p>- Depending on input parameter one of the two branches is executed in the different threads incrementing or decrementing the global variable</p>
<p>- The global variable is not protected by any synchronization means</p>
<p>- The printf function call in the function  TestFunc() indicates that both threads are active.</p>
<p> </p>
<p>The test case is compiled with Intel C++ Compiler v.10.1 and analyzed with Intel Parallel Inspector 1.0 Update 1 (build #66191) in the Treading Error level ti2. As it is shown on the screen shot with results of the analysis, the data race is not detected for this case. The level ti3 does not detect the error as well.<br /><br /><br /><img src="http://software.intel.com/file/21874" alt="insp1.JPG" title="insp1.JPG" /></p>
<p>A persistent investigator would soon discover that Intel Thread Checker easily finds the error and reports the data race against the global variable. This confirms what we suspected, that there really is a data race here.</p>
<p> </p>
<p>Intel Parallel Inspector offers various levels of intrusiveness in its analysis to balance time and resource use against the level of threading error detection. If ti4, the highest level is selected, this data race is detected as well.<br /><br /><img src="http://software.intel.com/file/21875" alt="insp2.JPG" title="insp2.JPG" /></p>
<p>Detection of this data race on levels ti2 and ti3 was skipped in order to improve analysis performance. One shortcut to significantly decrease overhead at these intermediate levels is to avoid checking for data races if memory is known to be shared among only two threads and only touched once by each. Even in that case there is a chance that Parallel Inspector will find a data race. It's dependent on the application. The corner cases like the sample above we believe are extremely rare in real applications. Slight modification of the code (setting more threads or adding more operations with the global variable) may change Parallel Inspector's ability to detect the data race on these intermediate levels.</p>
<p> </p>
<p>As for performance improvement, a user might find Intel Parallel Inspector analyzing threading errors significantly faster on the intermediate levels by comparison to Intel Thread Checker.</p>
</div> ]]></description>
      <link>http://software.intel.com/en-us/articles/parallel-inspector-does-not-detect-data-race/</link>
      <pubDate>Wed, 19 Aug 2009 13:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/parallel-inspector-does-not-detect-data-race/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/parallel-inspector-does-not-detect-data-race/</guid>
      <category>Tools</category>
      <category>Intel® Parallel Inspector Knowledge Base</category>
    </item>
    <item>
      <title>Do not use VTuneAPI in Intel® Parallel Inspector for selective code checking</title>
      <description><![CDATA[ <p>First at all, please refer to <a href="http://software.intel.com/en-us/articles/use-vtuneapi-in-intel-parallel-amplifier-for-selective-code-profiling/">http://software.intel.com/en-us/articles/use-vtuneapi-in-intel-parallel-amplifier-for-selective-code-profiling/</a> which educates the user how to collect performance data in interest of code when using Intel® Parallel Amplifier.</p>
<p> </p>
<p>But this is <strong>NOT</strong>for Intel® Parallel Inspector, even if there are VtuneApi.h and VtuneApi.dll under the Parallel Inspector's directory. The user can try VtuneApi.h and VtuneApi.dll but they <strong>never work</strong> in your code. See below example:</p>
<p>......</p>
<p>(vtPause());</p>
<p>test_uninitialized_load();</p>
<p>test_out_boundary();</p>
<p>(vtResume());</p>
<p>mismatch_deallocation();</p>
<p>......</p>
<p> </p>
<p>Actually Intel® Parallel Inspector will check all memory errors in above code, vtPause and vtResume are not effective. This is same for thread errors checking.<br /><br /><em>[DISCLAIMER: The information on this web site is intended for hardware system manufacturers and software developers. Intel does not warrant the accuracy, completeness or utility of any information on this site. Intel may make changes to the information or the site at any time without notice. Intel makes no commitment to update the information at this site. ALL INFORMATION PROVIDED ON THIS WEBSITE IS PROVIDED "as is" without any express, implied, or statutory warranty of any kind including but not limited to warranties of merchantability, non-infringement of intellectual property, or fitness for any particular purpose. Independent companies manufacture the third-party products that are mentioned on this site. Intel is not responsible for the quality or performance of third-party products and makes no representation or warranty regarding such products. The third-party supplier remains solely responsible for the design, manufacture, sale and functionality of its products. Intel and the Intel logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. *Other names and brands may be claimed as the property of others.]</em></p> ]]></description>
      <link>http://software.intel.com/en-us/articles/do-not-use-vtuneapi-in-intel-parallel-inspector-for-selective-code-checking/</link>
      <pubDate>Sun, 16 Aug 2009 09:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/do-not-use-vtuneapi-in-intel-parallel-inspector-for-selective-code-checking/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/do-not-use-vtuneapi-in-intel-parallel-inspector-for-selective-code-checking/</guid>
      <category>Intel® Parallel Inspector Knowledge Base</category>
    </item>
    <item>
      <title>Two tips for Intel(R) Parallel Inspector and Intel(R) Parallel Amplifier </title>
      <description><![CDATA[ <p>1. Sometime the user wouldn't like to generate results of Intel® Parallel Inspector and Intel® Parallel Amplifier, which are stored at project's location. Intel(R) Parallel Studio allows the user to save results into any user's favorite directory. Another purpose is that unused data files (for multiple projects) can be deleted easily from one specific directory, e.g. c:\tmp\Intel Parallel Studio.</p>
<p>The Parallel Inspector and the Parallel Amplifier have new options (plug-in) in Microsoft* Visual Studio* 2005/2008's  "Options" dialog, please see "Result Location" item under "Intel Parallel Inspector" and "Intel Parallel Amplifier", change it from "Save results in the Visual Studio* project default location" to "Save results in the directory:". Note that the user should specify a directory which already is existed.<br /><br /><img title="2tips-1.JPG" src="http://software.intel.com/file/19148" alt="2tips-1.JPG" /><br /><br />2. Sometime the user starts the Parallel Inspector Analysis or the Parallel Amplifier Analysis, meanwhile the user wants to see separated Console application's running. The user can simply modify "Direct output for non-GUI application to:" from "Separate console windows" to "Microsoft* Visual Studio* output window".</p>
<p><img title="2tips-2.JPG" src="http://software.intel.com/file/19149" alt="2tips-2.JPG" /><br /><br />After doing above change, the use can watch Analysis status and Console application's running simultaneously.<br /><br /><img title="2tips-3.JPG" src="http://software.intel.com/file/19150" alt="2tips-3.JPG" /></p> ]]></description>
      <link>http://software.intel.com/en-us/articles/two-tips-for-intelr-parallel-inspector-and-intelr-parallel-amplifier/</link>
      <pubDate>Sat, 23 May 2009 09:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/two-tips-for-intelr-parallel-inspector-and-intelr-parallel-amplifier/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/two-tips-for-intelr-parallel-inspector-and-intelr-parallel-amplifier/</guid>
      <category>Intel® Parallel Amplifier Knowledge Base</category>
      <category>Intel® Parallel Inspector Knowledge Base</category>
    </item>
    <item>
      <title>How to troubleshoot if Microsoft* Visual Studio integration with Intel(R) Parallel Inspector does not work and the controls are not visible or exposed properly</title>
      <description><![CDATA[ <p><strong>Problem : </strong>You have successfully installed Intel(R) Parallel Amplifier (or any Intel(R) Parallel Studio tools) but the toolbar for Parallel Amplifier (or whatever Parallel Studio tool(s) you installed) does not appear in Visual Studio.<br /><br /><br /><strong>Environment : </strong>Microsoft* Visual Studio* versions that have installed Parallel Studio tools.<br /><br /><br /><strong>Root Cause :</strong> Tool bar is not visible, either because it is not enabled or it is obscured by other tool bars that are enabled.<br /><br /><br /><strong>Resolution : </strong>Here are some suggestions:<br />* Select the View-&gt;Toolbars menu to confirm that the menu option "Intel Parallel Amplifier" is available and checked. If not checked, you can select the toolbar option and the toolbar should become visible.<br />* It is possible that the Parallel Amplifier toolbar is installed and available but all the Visual Studio* toolbars are positioned such that the Parallel Amplifier toolbar is not prominently visible. In this case, consider dragging around some toolbars and reposition them to ensure that the Amplifier tool bar is more prominently visible. If there are toolbars that you do not use, you can deselect such toolbars to better use the toolbar space.<br />* Some non-English OSes may have issues. Please see this KB article for more information: <a title="http://software.intel.com/en-us/articles/installation-of-intel-parallel-amplifier-on-non-english-operating-systems/" href="http://software.intel.com/en-us/articles/installation-of-intel-parallel-amplifier-on-non-english-operating-systems/" target="_blank">http://software.intel.com/en-us/articles/installation-of-intel-parallel-amplifier-on-non-english-operating-systems/<br /></a>* If none of the suggestions above work, please post your question on the <a title="Parallel Studio forum" href="http://software.intel.com/en-us/forums/intel-parallel-studio/" target="_blank">Parallel Studio forum</a>. <br /><br />*Other names and brands may be claimed as the property of others.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/how-to-troubleshoot-if-microsoft-visual-studio-integration-does-not-work-and-the-controls-are-not-visible-or-exposed-properly/</link>
      <pubDate>Tue, 21 Apr 2009 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/how-to-troubleshoot-if-microsoft-visual-studio-integration-does-not-work-and-the-controls-are-not-visible-or-exposed-properly/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/how-to-troubleshoot-if-microsoft-visual-studio-integration-does-not-work-and-the-controls-are-not-visible-or-exposed-properly/</guid>
      <category>Parallel Programming</category>
      <category>Tools</category>
      <category>Intel® Parallel Amplifier Knowledge Base</category>
      <category>Intel® Parallel Composer Knowledge Base</category>
      <category>Intel® Parallel Inspector Knowledge Base</category>
    </item>
  </channel></rss>
