<?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 Re: Lapack: DSTEVR produces SIGSEGV when all eigenvectors are q in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Lapack-DSTEVR-produces-SIGSEGV-when-all-eigenvectors-are-queried/m-p/882192#M9684</link>
    <description>&lt;DIV style="margin:0px;"&gt;
&lt;DIV id="quote_reply" style="width: 100%; margin-top: 5px;"&gt;
&lt;DIV style="margin-left:2px;margin-right:2px;"&gt;Quoting - &lt;A href="https://community.intel.com/en-us/profile/452674"&gt;clemens_adolphs&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV style="background-color:#E5E5E5; padding:5px;border: 1px; border-style: inset;margin-left:2px;margin-right:2px;"&gt;&lt;EM&gt;Dear all,
&lt;DIV&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;I am using DSTEVR to diagonalize a symmetric tridiagonal matrix. It works fine when I only want none or some of the eigenvectors. For a matrix of dimension N, computing the first N-1 eigenvectors/eigenvalues works fine. &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;However, if I want all eigenvectors, DSTEVR crashes with a segmentation fault in mkl_lapack_dlarre&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR /&gt;&lt;/DIV&gt;
&lt;DIV&gt;A minimum example is&lt;/DIV&gt;
&lt;CODE&gt; #include  #include  using namespace std;  extern "C" {     void dstevr(   char *jobz, char *range, int *n, double * d, double *e, double *vl, double *vu, int *il,                      int *iu, double *abstol, int *m, double *w, double *z, int *ldz, int *isuppz, double *work,                      int *lwork, int *iwork, int *liwork, int *info);     void dstevr_(   char *jobz, char *range, int *n, double * d, double *e, double *vl, double *vu, int *il,                      int *iu, double *abstol, int *m, double *w, double *z, int *ldz, int *isuppz, double *work,                      int *lwork, int *iwork, int *liwork, int *info); }  int main() {     int n = 3;     double* d = (double*) malloc(n*sizeof(double));     double* e = (double*) malloc((n-1)*sizeof(double));      d[0] = 1;     d[1] = 2;     d[2] = 3;     e[0] = 0.2;     e[1] = 0.1;      double* ee = (double*) malloc(n*sizeof(double));     double* ev = (double*) malloc(n*n*sizeof(double));     //Fill with stuff so we see what dstevr has changed     for (int i = 0; i &amp;lt; n; i++)         for (int j = 0; j &amp;lt; n; j++)             ev[i*n+j] = (double)(i*n+j);      //Allocate work arrays     int lwork = 60*n;     int liwork = 30*n;     double* work = (double*) malloc(lwork*sizeof(double));     int* iwork = (int*) malloc(liwork*sizeof(int));      //Prepare arguments to FORTRAN function     char jobz = 'V';     char range = 'A';     double abstol = 0.0;     int m;     int ldz = n;     int* isuppz = (int*) malloc(sizeof(int)*2*n);     for (int i = 0; i &amp;lt; 2 * n; i++)         isuppz&lt;I&gt; = 0;      int result = 0;     double vl = 0, vu = 0;     int il = 1, iu = n - 1;      dstevr_(&amp;amp;jobz, &amp;amp;range, &amp;amp;n, d, e, &amp;amp;vl, &amp;amp;vu, &amp;amp;il, &amp;amp;iu, &amp;amp;abstol, &amp;amp;m, ee, ev, &amp;amp;ldz, isuppz, work, &amp;amp;lwork, iwork, &amp;amp;liwork,&amp;amp;result); //    int dummy = -1; //    dstevr(&amp;amp;jobz, &amp;amp;range, &amp;amp;n, d, e, &amp;amp;vl, &amp;amp;vu, &amp;amp;il, &amp;amp;iu, &amp;amp;abstol, &amp;amp;m, ee, ev, &amp;amp;ldz, isuppz, work, &amp;amp;dummy, iwork, &amp;amp;dummy ,&amp;amp;result); //    cout &amp;lt;&amp;lt; "Optimal lwork: " &amp;lt;&amp;lt; (int) work[0] &amp;lt;&amp;lt; "Optmial liwork" &amp;lt;&amp;lt; iwork[0] &amp;lt;&amp;lt; endl;      for (int i = 0; i &amp;lt; n; i++)     {         for (int j = 0; j &amp;lt; n; j++)             cout &amp;lt;&amp;lt; ev[i*n+j] &amp;lt;&amp;lt; "t";         cout &amp;lt;&amp;lt; endl;     }     cout &amp;lt;&amp;lt; "ISUPPZ: ";     for (int i = 0; i &amp;lt; 2 * n; i++)         cout &amp;lt;&amp;lt; isuppz&lt;I&gt; &amp;lt;&amp;lt; " ";     cout &amp;lt;&amp;lt; endl;       return 0; } &lt;/I&gt;&lt;/I&gt;&lt;/CODE&gt;&lt;I&gt;&lt;I&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;I am linking against -lmkl, but it doesn't really matter.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;The same code runs fine without segmentation faults if linked against other lapack implementations.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;The MKL version in use is 10.0.1.014&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/I&gt;&lt;/I&gt;&lt;/EM&gt;&lt;I&gt;&lt;I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;BR /&gt;the same as &lt;A href="http://software.intel.com/en-us/forums/showthread.php?t=69963" target="_blank"&gt;http://software.intel.com/en-us/forums/showthread.php?t=69963&lt;/A&gt;&lt;BR /&gt;</description>
    <pubDate>Wed, 18 Nov 2009 11:44:48 GMT</pubDate>
    <dc:creator>Gennady_F_Intel</dc:creator>
    <dc:date>2009-11-18T11:44:48Z</dc:date>
    <item>
      <title>Lapack: DSTEVR produces SIGSEGV when all eigenvectors are queried</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Lapack-DSTEVR-produces-SIGSEGV-when-all-eigenvectors-are-queried/m-p/882191#M9683</link>
      <description>Dear all,
&lt;DIV&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;I am using DSTEVR to diagonalize a symmetric tridiagonal matrix. It works fine when I only want none or some of the eigenvectors. For a matrix of dimension N, computing the first N-1 eigenvectors/eigenvalues works fine. &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;However, if I want all eigenvectors, DSTEVR crashes with a segmentation fault in mkl_lapack_dlarre&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR /&gt;&lt;/DIV&gt;
&lt;DIV&gt;A minimum example is&lt;/DIV&gt;
&lt;CODE&gt; #include &lt;IOSTREAM&gt; #include &lt;CSTDLIB&gt; using namespace std;  extern "C" {     void dstevr(   char *jobz, char *range, int *n, double * d, double *e, double *vl, double *vu, int *il,                      int *iu, double *abstol, int *m, double *w, double *z, int *ldz, int *isuppz, double *work,                      int *lwork, int *iwork, int *liwork, int *info);     void dstevr_(   char *jobz, char *range, int *n, double * d, double *e, double *vl, double *vu, int *il,                      int *iu, double *abstol, int *m, double *w, double *z, int *ldz, int *isuppz, double *work,                      int *lwork, int *iwork, int *liwork, int *info); }  int main() {     int n = 3;     double* d = (double*) malloc(n*sizeof(double));     double* e = (double*) malloc((n-1)*sizeof(double));      d[0] = 1;     d[1] = 2;     d[2] = 3;     e[0] = 0.2;     e[1] = 0.1;      double* ee = (double*) malloc(n*sizeof(double));     double* ev = (double*) malloc(n*n*sizeof(double));     //Fill with stuff so we see what dstevr has changed     for (int i = 0; i &amp;lt; n; i++)         for (int j = 0; j &amp;lt; n; j++)             ev[i*n+j] = (double)(i*n+j);      //Allocate work arrays     int lwork = 60*n;     int liwork = 30*n;     double* work = (double*) malloc(lwork*sizeof(double));     int* iwork = (int*) malloc(liwork*sizeof(int));      //Prepare arguments to FORTRAN function     char jobz = 'V';     char range = 'A';     double abstol = 0.0;     int m;     int ldz = n;     int* isuppz = (int*) malloc(sizeof(int)*2*n);     for (int i = 0; i &amp;lt; 2 * n; i++)         isuppz&lt;I&gt; = 0;      int result = 0;     double vl = 0, vu = 0;     int il = 1, iu = n - 1;      dstevr_(&amp;amp;jobz, &amp;amp;range, &amp;amp;n, d, e, &amp;amp;vl, &amp;amp;vu, &amp;amp;il, &amp;amp;iu, &amp;amp;abstol, &amp;amp;m, ee, ev, &amp;amp;ldz, isuppz, work, &amp;amp;lwork, iwork, &amp;amp;liwork,&amp;amp;result); //    int dummy = -1; //    dstevr(&amp;amp;jobz, &amp;amp;range, &amp;amp;n, d, e, &amp;amp;vl, &amp;amp;vu, &amp;amp;il, &amp;amp;iu, &amp;amp;abstol, &amp;amp;m, ee, ev, &amp;amp;ldz, isuppz, work, &amp;amp;dummy, iwork, &amp;amp;dummy ,&amp;amp;result); //    cout &amp;lt;&amp;lt; "Optimal lwork: " &amp;lt;&amp;lt; (int) work[0] &amp;lt;&amp;lt; "Optmial liwork" &amp;lt;&amp;lt; iwork[0] &amp;lt;&amp;lt; endl;      for (int i = 0; i &amp;lt; n; i++)     {         for (int j = 0; j &amp;lt; n; j++)             cout &amp;lt;&amp;lt; ev[i*n+j] &amp;lt;&amp;lt; "\t";         cout &amp;lt;&amp;lt; endl;     }     cout &amp;lt;&amp;lt; "ISUPPZ: ";     for (int i = 0; i &amp;lt; 2 * n; i++)         cout &amp;lt;&amp;lt; isuppz&lt;I&gt; &amp;lt;&amp;lt; " ";     cout &amp;lt;&amp;lt; endl;       return 0; } &lt;/I&gt;&lt;/I&gt;&lt;/CSTDLIB&gt;&lt;/IOSTREAM&gt;&lt;/CODE&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;I am linking against -lmkl, but it doesn't really matter.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;The same code runs fine without segmentation faults if linked against other lapack implementations.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;The MKL version in use is 10.0.1.014&lt;/SPAN&gt;&lt;/DIV&gt;</description>
      <pubDate>Wed, 18 Nov 2009 09:39:01 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Lapack-DSTEVR-produces-SIGSEGV-when-all-eigenvectors-are-queried/m-p/882191#M9683</guid>
      <dc:creator>clemens_adolphs</dc:creator>
      <dc:date>2009-11-18T09:39:01Z</dc:date>
    </item>
    <item>
      <title>Re: Lapack: DSTEVR produces SIGSEGV when all eigenvectors are q</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Lapack-DSTEVR-produces-SIGSEGV-when-all-eigenvectors-are-queried/m-p/882192#M9684</link>
      <description>&lt;DIV style="margin:0px;"&gt;
&lt;DIV id="quote_reply" style="width: 100%; margin-top: 5px;"&gt;
&lt;DIV style="margin-left:2px;margin-right:2px;"&gt;Quoting - &lt;A href="https://community.intel.com/en-us/profile/452674"&gt;clemens_adolphs&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV style="background-color:#E5E5E5; padding:5px;border: 1px; border-style: inset;margin-left:2px;margin-right:2px;"&gt;&lt;EM&gt;Dear all,
&lt;DIV&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;I am using DSTEVR to diagonalize a symmetric tridiagonal matrix. It works fine when I only want none or some of the eigenvectors. For a matrix of dimension N, computing the first N-1 eigenvectors/eigenvalues works fine. &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;However, if I want all eigenvectors, DSTEVR crashes with a segmentation fault in mkl_lapack_dlarre&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR /&gt;&lt;/DIV&gt;
&lt;DIV&gt;A minimum example is&lt;/DIV&gt;
&lt;CODE&gt; #include  #include  using namespace std;  extern "C" {     void dstevr(   char *jobz, char *range, int *n, double * d, double *e, double *vl, double *vu, int *il,                      int *iu, double *abstol, int *m, double *w, double *z, int *ldz, int *isuppz, double *work,                      int *lwork, int *iwork, int *liwork, int *info);     void dstevr_(   char *jobz, char *range, int *n, double * d, double *e, double *vl, double *vu, int *il,                      int *iu, double *abstol, int *m, double *w, double *z, int *ldz, int *isuppz, double *work,                      int *lwork, int *iwork, int *liwork, int *info); }  int main() {     int n = 3;     double* d = (double*) malloc(n*sizeof(double));     double* e = (double*) malloc((n-1)*sizeof(double));      d[0] = 1;     d[1] = 2;     d[2] = 3;     e[0] = 0.2;     e[1] = 0.1;      double* ee = (double*) malloc(n*sizeof(double));     double* ev = (double*) malloc(n*n*sizeof(double));     //Fill with stuff so we see what dstevr has changed     for (int i = 0; i &amp;lt; n; i++)         for (int j = 0; j &amp;lt; n; j++)             ev[i*n+j] = (double)(i*n+j);      //Allocate work arrays     int lwork = 60*n;     int liwork = 30*n;     double* work = (double*) malloc(lwork*sizeof(double));     int* iwork = (int*) malloc(liwork*sizeof(int));      //Prepare arguments to FORTRAN function     char jobz = 'V';     char range = 'A';     double abstol = 0.0;     int m;     int ldz = n;     int* isuppz = (int*) malloc(sizeof(int)*2*n);     for (int i = 0; i &amp;lt; 2 * n; i++)         isuppz&lt;I&gt; = 0;      int result = 0;     double vl = 0, vu = 0;     int il = 1, iu = n - 1;      dstevr_(&amp;amp;jobz, &amp;amp;range, &amp;amp;n, d, e, &amp;amp;vl, &amp;amp;vu, &amp;amp;il, &amp;amp;iu, &amp;amp;abstol, &amp;amp;m, ee, ev, &amp;amp;ldz, isuppz, work, &amp;amp;lwork, iwork, &amp;amp;liwork,&amp;amp;result); //    int dummy = -1; //    dstevr(&amp;amp;jobz, &amp;amp;range, &amp;amp;n, d, e, &amp;amp;vl, &amp;amp;vu, &amp;amp;il, &amp;amp;iu, &amp;amp;abstol, &amp;amp;m, ee, ev, &amp;amp;ldz, isuppz, work, &amp;amp;dummy, iwork, &amp;amp;dummy ,&amp;amp;result); //    cout &amp;lt;&amp;lt; "Optimal lwork: " &amp;lt;&amp;lt; (int) work[0] &amp;lt;&amp;lt; "Optmial liwork" &amp;lt;&amp;lt; iwork[0] &amp;lt;&amp;lt; endl;      for (int i = 0; i &amp;lt; n; i++)     {         for (int j = 0; j &amp;lt; n; j++)             cout &amp;lt;&amp;lt; ev[i*n+j] &amp;lt;&amp;lt; "t";         cout &amp;lt;&amp;lt; endl;     }     cout &amp;lt;&amp;lt; "ISUPPZ: ";     for (int i = 0; i &amp;lt; 2 * n; i++)         cout &amp;lt;&amp;lt; isuppz&lt;I&gt; &amp;lt;&amp;lt; " ";     cout &amp;lt;&amp;lt; endl;       return 0; } &lt;/I&gt;&lt;/I&gt;&lt;/CODE&gt;&lt;I&gt;&lt;I&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;I am linking against -lmkl, but it doesn't really matter.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;The same code runs fine without segmentation faults if linked against other lapack implementations.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;The MKL version in use is 10.0.1.014&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/I&gt;&lt;/I&gt;&lt;/EM&gt;&lt;I&gt;&lt;I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;BR /&gt;the same as &lt;A href="http://software.intel.com/en-us/forums/showthread.php?t=69963" target="_blank"&gt;http://software.intel.com/en-us/forums/showthread.php?t=69963&lt;/A&gt;&lt;BR /&gt;</description>
      <pubDate>Wed, 18 Nov 2009 11:44:48 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Lapack-DSTEVR-produces-SIGSEGV-when-all-eigenvectors-are-queried/m-p/882192#M9684</guid>
      <dc:creator>Gennady_F_Intel</dc:creator>
      <dc:date>2009-11-18T11:44:48Z</dc:date>
    </item>
  </channel>
</rss>

