Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > 99cb5ede6a5329071fbeecc8218deb35 > files > 227

eigen3-doc-3.2-3.mga4.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>Eigen: Using Intel® Math Kernel Library from Eigen</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css"   rel="stylesheet" type="text/css" />
<link href="eigendoxy.css" rel="stylesheet" type="text/css">
<!--  -->
<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
<!-- <script type="text/javascript"> -->
<!-- </script> -->
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!-- <a name="top"></a> -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="Eigen_Silly_Professor_64x64.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname"><a href="http://eigen.tuxfamily.org">Eigen</a>
   &#160;<span id="projectnumber">3.2.0</span>
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('TopicUsingIntelMKL.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">Using Intel® Math Kernel Library from <a class="el" href="namespaceEigen.html" title="Namespace containing all symbols from the Eigen library. ">Eigen</a> </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="TopicUsingIntelMKL_Intro"></a>
Eigen and Intel® Math Kernel Library (Intel® MKL)</h1>
<p>Since <a class="el" href="namespaceEigen.html" title="Namespace containing all symbols from the Eigen library. ">Eigen</a> version 3.1 and later, users can benefit from built-in Intel MKL optimizations with an installed copy of Intel MKL 10.3 (or later). <a href="http://eigen.tuxfamily.org/Counter/redirect_to_mkl.php">Intel MKL </a> provides highly optimized multi-threaded mathematical routines for x86-compatible architectures. Intel MKL is available on Linux, Mac and Windows for both Intel64 and IA32 architectures.</p>
<dl class="section warning"><dt>Warning</dt><dd>Be aware that Intel® MKL is a proprietary software. It is the responsibility of the users to buy MKL licenses for their products. Moreover, the license of the user product has to allow linking to proprietary software that excludes any unmodified versions of the GPL.</dd></dl>
<p>Using Intel MKL through <a class="el" href="namespaceEigen.html" title="Namespace containing all symbols from the Eigen library. ">Eigen</a> is easy:</p>
<ol type="1">
<li>define the <code>EIGEN_USE_MKL_ALL</code> macro before including any <a class="el" href="namespaceEigen.html" title="Namespace containing all symbols from the Eigen library. ">Eigen</a>'s header</li>
<li>link your program to MKL libraries (see the <a href="http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/">MKL linking advisor</a>)</li>
<li>on a 64bits system, you must use the LP64 interface (not the ILP64 one)</li>
</ol>
<p>When doing so, a number of <a class="el" href="namespaceEigen.html" title="Namespace containing all symbols from the Eigen library. ">Eigen</a>'s algorithms are silently substituted with calls to Intel MKL routines. These substitutions apply only for <b>Dynamic</b> <b>or</b> <b>large</b> enough objects with one of the following four standard scalar types: <code>float</code>, <code>double</code>, <code>complex&lt;float&gt;</code>, and <code>complex&lt;double&gt;</code>. Operations on other scalar types or mixing reals and complexes will continue to use the built-in algorithms.</p>
<p>In addition you can coarsely select choose which parts will be substituted by defining one or multiple of the following macros:</p>
<table  class="manual">
<tr>
<td><code>EIGEN_USE_BLAS</code> </td><td>Enables the use of external BLAS level 2 and 3 routines (currently works with Intel MKL only) </td></tr>
<tr class="alt">
<td><code>EIGEN_USE_LAPACKE</code> </td><td>Enables the use of external Lapack routines via the <a href="http://www.netlib.org/lapack/lapacke.html">Intel Lapacke</a> C interface to Lapack (currently works with Intel MKL only) </td></tr>
<tr>
<td><code>EIGEN_USE_LAPACKE_STRICT</code> </td><td>Same as <code>EIGEN_USE_LAPACKE</code> but algorithm of lower robustness are disabled. This currently concerns only <a class="el" href="classEigen_1_1JacobiSVD.html" title="Two-sided Jacobi SVD decomposition of a rectangular matrix. ">JacobiSVD</a> which otherwise would be replaced by <code>gesvd</code> that is less robust than Jacobi rotations. </td></tr>
<tr class="alt">
<td><code>EIGEN_USE_MKL_VML</code> </td><td>Enables the use of Intel VML (vector operations) </td></tr>
<tr>
<td><code>EIGEN_USE_MKL_ALL</code> </td><td>Defines <code>EIGEN_USE_BLAS</code>, <code>EIGEN_USE_LAPACKE</code>, and <code>EIGEN_USE_MKL_VML</code>  </td></tr>
</table>
<p>Finally, the PARDISO sparse solver shipped with Intel MKL can be used through the <a class="el" href="classEigen_1_1PardisoLU.html">PardisoLU</a>, <a class="el" href="classEigen_1_1PardisoLLT.html">PardisoLLT</a> and <a class="el" href="classEigen_1_1PardisoLDLT.html">PardisoLDLT</a> classes of the <a class="el" href="group__PardisoSupport__Module.html">PardisoSupport module</a>.</p>
<h1><a class="anchor" id="TopicUsingIntelMKL_SupportedFeatures"></a>
List of supported features</h1>
<p>The breadth of <a class="el" href="namespaceEigen.html" title="Namespace containing all symbols from the Eigen library. ">Eigen</a> functionality covered by Intel MKL is listed in the table below. </p>
<table  class="manual">
<tr>
<th>Functional domain</th><th>Code example</th><th>MKL routines </th></tr>
<tr>
<td>Matrix-matrix operations <br/>
 <code>EIGEN_USE_BLAS</code> </td><td><div class="fragment"><div class="line">m1*m2.<a class="code" href="classEigen_1_1DenseBase.html#a3c187c30922fc5e42f208ae3eb0970ee">transpose</a>();</div>
<div class="line">m1.selfadjointView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910baf886b397626076218462d53d50eb96bc">Lower</a>&gt;()*m2;</div>
<div class="line">m1*m2.triangularView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910bae70afef0d3ff7aca74e17e85ff6c9f2e">Upper</a>&gt;();</div>
<div class="line">m1.selfadjointView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910baf886b397626076218462d53d50eb96bc">Lower</a>&gt;().rankUpdate(m2,1.0);</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">?gemm</div>
<div class="line">?symm/?hemm</div>
<div class="line">?trmm</div>
<div class="line">dsyrk/ssyrk</div>
</div><!-- fragment --> </td></tr>
<tr class="alt">
<td>Matrix-vector operations <br/>
 <code>EIGEN_USE_BLAS</code> </td><td><div class="fragment"><div class="line">m1.<a class="code" href="classEigen_1_1MatrixBase.html#ac43d5834cffcedbd27777329a8f5eeca">adjoint</a>()*b;</div>
<div class="line">m1.selfadjointView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910baf886b397626076218462d53d50eb96bc">Lower</a>&gt;()*b;</div>
<div class="line">m1.triangularView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910bae70afef0d3ff7aca74e17e85ff6c9f2e">Upper</a>&gt;()*b;</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">?gemv</div>
<div class="line">?symv/?hemv</div>
<div class="line">?trmv</div>
</div><!-- fragment --> </td></tr>
<tr>
<td>LU decomposition <br/>
 <code>EIGEN_USE_LAPACKE</code> <br/>
 <code>EIGEN_USE_LAPACKE_STRICT</code> </td><td><div class="fragment"><div class="line">v1 = m1.<a class="code" href="classEigen_1_1MatrixBase.html#a013595649f973f38b3507d7cffe32ff9">lu</a>().solve(v2);</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">?getrf</div>
</div><!-- fragment --> </td></tr>
<tr class="alt">
<td>Cholesky decomposition <br/>
 <code>EIGEN_USE_LAPACKE</code> <br/>
 <code>EIGEN_USE_LAPACKE_STRICT</code> </td><td><div class="fragment"><div class="line">v1 = m2.selfadjointView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910bae70afef0d3ff7aca74e17e85ff6c9f2e">Upper</a>&gt;().llt().solve(v2);</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">?potrf</div>
</div><!-- fragment --> </td></tr>
<tr>
<td>QR decomposition <br/>
 <code>EIGEN_USE_LAPACKE</code> <br/>
 <code>EIGEN_USE_LAPACKE_STRICT</code> </td><td><div class="fragment"><div class="line">m1.<a class="code" href="classEigen_1_1MatrixBase.html#abafaafa2e7eb9f485b282041833034bf">householderQr</a>();</div>
<div class="line">m1.<a class="code" href="classEigen_1_1MatrixBase.html#a05afed751d3a7277951d1918468e0872">colPivHouseholderQr</a>();</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">?geqrf</div>
<div class="line">?geqp3</div>
</div><!-- fragment --> </td></tr>
<tr class="alt">
<td>Singular value decomposition <br/>
 <code>EIGEN_USE_LAPACKE</code> </td><td><div class="fragment"><div class="line">JacobiSVD&lt;MatrixXd&gt; svd;</div>
<div class="line">svd.compute(m1, <a class="code" href="group__enums.html#gga2d78499b99ddc29b9494f7ea33864d52aa0bec1072bc1ecbbaaa436f96fe02e78">ComputeThinV</a>);</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">?gesvd</div>
</div><!-- fragment --> </td></tr>
<tr>
<td>Eigen-value decompositions <br/>
 <code>EIGEN_USE_LAPACKE</code> <br/>
 <code>EIGEN_USE_LAPACKE_STRICT</code> </td><td><div class="fragment"><div class="line">EigenSolver&lt;MatrixXd&gt; es(m1);</div>
<div class="line">ComplexEigenSolver&lt;MatrixXcd&gt; ces(m1);</div>
<div class="line">SelfAdjointEigenSolver&lt;MatrixXd&gt; saes(m1+m1.<a class="code" href="classEigen_1_1DenseBase.html#a3c187c30922fc5e42f208ae3eb0970ee">transpose</a>());</div>
<div class="line">GeneralizedSelfAdjointEigenSolver&lt;MatrixXd&gt;</div>
<div class="line">    gsaes(m1+m1.<a class="code" href="classEigen_1_1DenseBase.html#a3c187c30922fc5e42f208ae3eb0970ee">transpose</a>(),m2+m2.<a class="code" href="classEigen_1_1DenseBase.html#a3c187c30922fc5e42f208ae3eb0970ee">transpose</a>());</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">?gees</div>
<div class="line">?gees</div>
<div class="line">?syev/?heev</div>
<div class="line">?syev/?heev,</div>
<div class="line">?potrf</div>
</div><!-- fragment --> </td></tr>
<tr class="alt">
<td>Schur decomposition <br/>
 <code>EIGEN_USE_LAPACKE</code> <br/>
 <code>EIGEN_USE_LAPACKE_STRICT</code> </td><td><div class="fragment"><div class="line">RealSchur&lt;MatrixXd&gt; schurR(m1);</div>
<div class="line">ComplexSchur&lt;MatrixXcd&gt; schurC(m1);</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">?gees</div>
</div><!-- fragment --> </td></tr>
<tr>
<td>Vector Math <br/>
 <code>EIGEN_USE_MKL_VML</code> </td><td><div class="fragment"><div class="line">v2=v1.array().sin();</div>
<div class="line">v2=v1.array().asin();</div>
<div class="line">v2=v1.array().cos();</div>
<div class="line">v2=v1.array().acos();</div>
<div class="line">v2=v1.array().tan();</div>
<div class="line">v2=v1.array().exp();</div>
<div class="line">v2=v1.array().log();</div>
<div class="line">v2=v1.array().sqrt();</div>
<div class="line">v2=v1.array().square();</div>
<div class="line">v2=v1.array().pow(1.5);</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">v?Sin</div>
<div class="line">v?Asin</div>
<div class="line">v?Cos</div>
<div class="line">v?Acos</div>
<div class="line">v?Tan</div>
<div class="line">v?Exp</div>
<div class="line">v?Ln</div>
<div class="line">v?Sqrt</div>
<div class="line">v?Sqr</div>
<div class="line">v?Powx</div>
</div><!-- fragment --> </td></tr>
</table>
<p>In the examples, m1 and m2 are dense matrices and v1 and v2 are dense vectors.</p>
<h1><a class="anchor" id="TopicUsingIntelMKL_Links"></a>
Links</h1>
<ul>
<li>Intel MKL can be purchased and downloaded <a href="http://eigen.tuxfamily.org/Counter/redirect_to_mkl.php">here</a>.</li>
<li>Intel MKL is also bundled with <a href="http://software.intel.com/en-us/articles/intel-composer-xe/">Intel Composer XE</a>. </li>
</ul>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated on Mon Oct 28 2013 11:04:27 for Eigen by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
  </ul>
</div>
<!-- Piwik --> 
<!--
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://stats.sylphide-consulting.com/piwik/" : "http://stats.sylphide-consulting.com/piwik/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 20);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://stats.sylphide-consulting.com/piwik/piwik.php?idsite=20" style="border:0" alt="" /></p></noscript>
-->
<!-- End Piwik Tracking Code -->
</body>
</html>