<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Hi. Sorry for the false alarm in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Glibc-error-for-dgesvd/m-p/932041#M13809</link>
    <description>&lt;P&gt;Hi. Sorry for the false alarm. I gave ldvt a value of m instead of n.&lt;/P&gt;</description>
    <pubDate>Sun, 08 Dec 2013 19:31:22 GMT</pubDate>
    <dc:creator>Anonymous30</dc:creator>
    <dc:date>2013-12-08T19:31:22Z</dc:date>
    <item>
      <title>Glibc error for dgesvd</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Glibc-error-for-dgesvd/m-p/932040#M13808</link>
      <description>&lt;P&gt;Hi, I am using MKL to compute SVD of a real matrix. I use C++ code with std::vectors. Here is a portion of my code related to SVD&lt;/P&gt;

&lt;P&gt;void Decompose_InterpolMatrix_To_SVD(int rows, int columns, std::vector&amp;lt;double&amp;gt; &amp;amp;Interp_matrix) {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Locals */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int m = rows, n = columns, lda = m, ldu = m, ldvt = m, info, lwork;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i,j,k;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double wkopt;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double* work;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double *a,alpha=1.0e0,beta=0.0e0,tausq=1.0e-4;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //double s[columns], u[rows*rows], vt[columns*columns];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::vector&amp;lt;double&amp;gt; u, s, vt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = &amp;amp;(Interp_matrix[0]);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.resize(columns);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; u.resize(rows*rows);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vt.resize(columns*columns);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //inverse_s_ut.resize(columns*rows);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double *vtran;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vtran = &amp;amp;(vt[0]);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Query and allocate the optimal workspace */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwork = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dgesvd( "All", "All", &amp;amp;m, &amp;amp;n, a, &amp;amp;lda, &amp;amp;(s[0]), &amp;amp;(u[0]), &amp;amp;ldu, &amp;amp;(vt[0]), &amp;amp;ldvt, &amp;amp;wkopt, &amp;amp;lwork,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;info );&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwork = (int)wkopt;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; work = (double*)malloc( lwork*sizeof(double) );&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Compute SVD */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dgesvd( "All", "All", &amp;amp;m, &amp;amp;n, a, &amp;amp;lda, &amp;amp;(s[0]), &amp;amp;(u[0]), &amp;amp;ldu, &amp;amp;(vt[0]), &amp;amp;ldvt, work, &amp;amp;lwork,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;info );&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Check for convergence */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( info &amp;gt; 0 ) {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::cerr &amp;lt;&amp;lt; "The algorithm computing SVD failed to converge." &amp;lt;&amp;lt; std::endl;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit( 1 );&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Free workspace */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free( (void*)work );&lt;/P&gt;

&lt;P&gt;}&lt;/P&gt;

&lt;P&gt;When I run this code I get :&lt;/P&gt;

&lt;P&gt;*** glibc detected *** ./checkmkl1: munmap_chunk(): invalid pointer: 0x000000001a43e610 ***&lt;BR /&gt;
	======= Backtrace: =========&lt;BR /&gt;
	/lib64/libc.so.6(cfree+0x166)[0x3693672886]&lt;BR /&gt;
	./checkmkl1[0x40206a]&lt;BR /&gt;
	./checkmkl1(__gxx_personality_v0+0x29a)[0x401d22]&lt;BR /&gt;
	/lib64/libc.so.6(__libc_start_main+0xf4)[0x369361d994]&lt;BR /&gt;
	./checkmkl1(_ZNSt8ios_base4InitD1Ev+0x41)[0x401b29]&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I do not get this error when I declare s,u,vt as proper arrays. This is strange as one can use vectors of primitive types as arrays. Any help is greatly appreciated.&lt;/P&gt;

&lt;P&gt;Suman&lt;/P&gt;</description>
      <pubDate>Sun, 08 Dec 2013 07:50:59 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Glibc-error-for-dgesvd/m-p/932040#M13808</guid>
      <dc:creator>Anonymous30</dc:creator>
      <dc:date>2013-12-08T07:50:59Z</dc:date>
    </item>
    <item>
      <title>Hi. Sorry for the false alarm</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Glibc-error-for-dgesvd/m-p/932041#M13809</link>
      <description>&lt;P&gt;Hi. Sorry for the false alarm. I gave ldvt a value of m instead of n.&lt;/P&gt;</description>
      <pubDate>Sun, 08 Dec 2013 19:31:22 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Glibc-error-for-dgesvd/m-p/932041#M13809</guid>
      <dc:creator>Anonymous30</dc:creator>
      <dc:date>2013-12-08T19:31:22Z</dc:date>
    </item>
  </channel>
</rss>

