<?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 Exploit symmetry in Cholesky in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015332#M19439</link>
    <description>&lt;P&gt;&amp;nbsp; I am performing a Cholesky decomposition, like in this &lt;A href="https://software.intel.com/en-us/forums/topic/561007"&gt;thread&lt;/A&gt;. Post #4 contains a minor example, that looks like as my code. The minor example of Ying is based on this &lt;A href="https://andyspiros.wordpress.com/2011/07/08/an-example-of-blacs-with-c/"&gt;example&lt;/A&gt;. As one can see, the matrix is read by the master node and then gets distributed (every element of the matrix). Then every element of the matrix is being gathered back to the master node.&lt;/P&gt;

&lt;P&gt;&amp;nbsp; However, the example is general. In my application, the matrix is &lt;EM&gt;&lt;STRONG&gt;symmetric&lt;/STRONG&gt;&lt;/EM&gt;, so I am wondering if I could do better, than just sending all the matrix. That is, to send only the lower part of tha matrix, perform the Cholesky decomposition and then receive only the lower part of the matrix. Is this possible?&lt;/P&gt;

&lt;P&gt;&amp;nbsp; Of course, this has to do on how &lt;A href="https://software.intel.com/en-us/node/521465"&gt;&lt;SPAN class="kwd"&gt;pdpotrf()&lt;/SPAN&gt;&lt;/A&gt; expects it's input. My idea is that if we could limit distribution only in the lower part of the matrix, then we could achieve better performace.&lt;/P&gt;

&lt;P&gt;PS - a negative answer will be also flagged as the best reply, i.e. it is accepted.&lt;/P&gt;</description>
    <pubDate>Fri, 17 Jul 2015 11:20:54 GMT</pubDate>
    <dc:creator>Georgios_S_</dc:creator>
    <dc:date>2015-07-17T11:20:54Z</dc:date>
    <item>
      <title>Exploit symmetry in Cholesky</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015332#M19439</link>
      <description>&lt;P&gt;&amp;nbsp; I am performing a Cholesky decomposition, like in this &lt;A href="https://software.intel.com/en-us/forums/topic/561007"&gt;thread&lt;/A&gt;. Post #4 contains a minor example, that looks like as my code. The minor example of Ying is based on this &lt;A href="https://andyspiros.wordpress.com/2011/07/08/an-example-of-blacs-with-c/"&gt;example&lt;/A&gt;. As one can see, the matrix is read by the master node and then gets distributed (every element of the matrix). Then every element of the matrix is being gathered back to the master node.&lt;/P&gt;

&lt;P&gt;&amp;nbsp; However, the example is general. In my application, the matrix is &lt;EM&gt;&lt;STRONG&gt;symmetric&lt;/STRONG&gt;&lt;/EM&gt;, so I am wondering if I could do better, than just sending all the matrix. That is, to send only the lower part of tha matrix, perform the Cholesky decomposition and then receive only the lower part of the matrix. Is this possible?&lt;/P&gt;

&lt;P&gt;&amp;nbsp; Of course, this has to do on how &lt;A href="https://software.intel.com/en-us/node/521465"&gt;&lt;SPAN class="kwd"&gt;pdpotrf()&lt;/SPAN&gt;&lt;/A&gt; expects it's input. My idea is that if we could limit distribution only in the lower part of the matrix, then we could achieve better performace.&lt;/P&gt;

&lt;P&gt;PS - a negative answer will be also flagged as the best reply, i.e. it is accepted.&lt;/P&gt;</description>
      <pubDate>Fri, 17 Jul 2015 11:20:54 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015332#M19439</guid>
      <dc:creator>Georgios_S_</dc:creator>
      <dc:date>2015-07-17T11:20:54Z</dc:date>
    </item>
    <item>
      <title>Cholesky decomposition</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015333#M19440</link>
      <description>&lt;P&gt;Cholesky decomposition applies only to symmetric positive definite matrices -- it is not sufficient for the matrix to be symmetric. A Cholesky solver may accept the input matrix as a full matrix or may accept one triangle, but these are user interface details and the algorithm definitely makes use of the required symmetry.&lt;/P&gt;</description>
      <pubDate>Fri, 17 Jul 2015 13:11:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015333#M19440</guid>
      <dc:creator>mecej4</dc:creator>
      <dc:date>2015-07-17T13:11:00Z</dc:date>
    </item>
    <item>
      <title>Hi mecej4,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015334#M19441</link>
      <description>&lt;P&gt;Hi mecej4,&lt;/P&gt;

&lt;P&gt;&amp;nbsp; yes, that's correct. I just highlighted the symmetry property, because that's the one I want to exploit. I am interested in the Cholesky solver of MKL's, which is &lt;A href="https://software.intel.com/en-us/node/521465"&gt;pdpotrf()&lt;/A&gt;. If there are more, distributed versions, please let me know.&lt;/P&gt;

&lt;P&gt;&amp;nbsp; Can I input the triangle of the matrix only in MKL (instead of the whole matrix)?&lt;/P&gt;

&lt;P&gt;Thanks,&lt;/P&gt;

&lt;P&gt;George&lt;/P&gt;</description>
      <pubDate>Fri, 17 Jul 2015 13:31:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015334#M19441</guid>
      <dc:creator>Georgios_S_</dc:creator>
      <dc:date>2015-07-17T13:31:00Z</dc:date>
    </item>
    <item>
      <title>Hi George,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015335#M19442</link>
      <description>&lt;P&gt;Hi George,&lt;/P&gt;

&lt;P&gt;It's enough to fill only lower triangular for the Cholesky if UPLO=L. Or upper for UPLO=U.&lt;BR /&gt;
	So you may modify the example to run scatter/gather loops only on block below diagonal (c&amp;lt;=r).&amp;nbsp;&lt;BR /&gt;
	Also there are Cdtrsd2d() and&amp;nbsp;Cdtrrv2d() functions which transfer only upper or lower triangular of matrix, which you may use to transfer diagonal blocks (c==r).&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;Best regards,&lt;BR /&gt;
	Alexander&lt;/SPAN&gt;&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 20 Jul 2015 12:53:40 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015335#M19442</guid>
      <dc:creator>Alexander_K_Intel3</dc:creator>
      <dc:date>2015-07-20T12:53:40Z</dc:date>
    </item>
    <item>
      <title>Hi Alexander,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015336#M19443</link>
      <description>&lt;P&gt;Hi Alexander,&lt;/P&gt;

&lt;P&gt;&amp;nbsp; thanks for the response. How should I provide the input matrix then? I mean, now I am using a double* A, which I malloc to N*N. In the triangle case, what should I do?&lt;/P&gt;

&lt;P&gt;&amp;nbsp; Take for example, this &lt;EM&gt;serial&amp;nbsp;&lt;/EM&gt;version of Cholesky. By the way I am trying to input the triangle matrix A, it founds wrong result (info is also set to 3). How should I do it?&lt;/P&gt;

&lt;PRE class="brush:cpp;"&gt;#include &amp;lt;mpi.h&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;mkl.h&amp;gt;
#include &amp;lt;mkl_scalapack.h&amp;gt;
#include "mkl_lapacke.h"
#include &amp;lt;mkl_cblas.h&amp;gt;

void print_lower(double* A, int N);

int main(int argc, char *argv[]) {
  int N = 5;
  /*double A[] =  {
	4,   1,   2, 0.5,   2,
	1,   0.5, 0, 0,     0,
	2,   0,   3, 0,     0,
	0.5, 0,   0, 0.625, 0,
	2,   0,   0, 0,     16
  };*/
  
  double A[] =  { // how to input the triangle matrix?
	4, 
	1,   0.5,
	2,   0,   3,
	0.5, 0,   0, 0.625,
	2,   0,   0, 0,     16
  };

  int nInfo;
  char ch = 'L';
  dpotrf(
        &amp;amp;ch,
        &amp;amp;N,
        A,
        &amp;amp;N,
        &amp;amp;nInfo
  );

  printf("N = %d, dpotrf return status = %d\n", N, nInfo);
  
  print_lower(A, N);
  return 0;
}

void print_lower(double* A, int N) {
  int i, j;
  for(i = 0; i &amp;lt; N; ++i) {
    for(j = 0; j &amp;lt; N; ++j) {
      // lower triangular matrix
      printf("%f ", (i &amp;gt;= j) ? A[i + j * N] : 0.0);
    }
    printf("\n");
  }
}&lt;/PRE&gt;

&lt;P&gt;Best regards,&lt;/P&gt;

&lt;P&gt;George&lt;/P&gt;</description>
      <pubDate>Mon, 20 Jul 2015 13:44:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015336#M19443</guid>
      <dc:creator>Georgios_S_</dc:creator>
      <dc:date>2015-07-20T13:44:00Z</dc:date>
    </item>
    <item>
      <title>There are some errors in your</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015337#M19444</link>
      <description>&lt;P&gt;There are some errors in your program. The first is that DPOTRF takes a square matrix for A, so you must pass an array of size at least N&lt;SUP&gt;2&lt;/SUP&gt;. However, only the lower or the upper triangle needs to be filled in. The remaining values can be set to zero or any place-holder values.&lt;/P&gt;

&lt;P&gt;Secondly, you are calling the Fortran 77 name, so you must follow Fortran 2-D array convention (column-major order). Thus&lt;/P&gt;

&lt;PRE class="brush:cpp;"&gt;  double A[] =  {
	4,   1,   2, 0.5,   2,
	0,   0.5, 0, 0,     0,
	0,   0,   3, 0,     0,
	0, 0,   0, 0.625, 0,
	0,   0,   0, 0,     16
  };
&lt;/PRE&gt;

&lt;P&gt;would pass the lower triangle, with zeroes in the strictly upper triangle.&lt;/P&gt;

&lt;P&gt;If you wish to use the Lapack-E conventions, you should call&amp;nbsp;LAPACKE_dpotrf instead.&lt;/P&gt;</description>
      <pubDate>Tue, 21 Jul 2015 00:01:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015337#M19444</guid>
      <dc:creator>mecej4</dc:creator>
      <dc:date>2015-07-21T00:01:00Z</dc:date>
    </item>
    <item>
      <title>Hi mecej4,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015338#M19445</link>
      <description>&lt;P&gt;Hi mecej4,&lt;/P&gt;

&lt;P&gt;&amp;nbsp; that clears things up, thank you! So, actually, I can't reduce the space needed, I mean the matrix has to be still N*N. However, I may save time in scattering/gathering the matrix, in the distribution process. If you know any example that performs the distribution of a triangle matrix, please let me know.&lt;/P&gt;

&lt;P&gt;Kind regards,&lt;/P&gt;

&lt;P&gt;George&lt;/P&gt;</description>
      <pubDate>Tue, 21 Jul 2015 00:27:26 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015338#M19445</guid>
      <dc:creator>Georgios_S_</dc:creator>
      <dc:date>2015-07-21T00:27:26Z</dc:date>
    </item>
    <item>
      <title>Hi George,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015339#M19446</link>
      <description>&lt;P&gt;Hi&amp;nbsp;George,&lt;/P&gt;

&lt;P&gt;Right, as Alexander and Mecej mentioned, the scalpack function ask the whole matrix (although it is symmetric). So the matrix should be whole matrix. (N*N) and the input matrix on each node are&amp;nbsp;nrows x ncolumns. The memory can't be save.&amp;nbsp; You may save some time by distributing and gather only upper or lower part.&lt;/P&gt;

&lt;P&gt;As you see, in&amp;nbsp; this &lt;A href="https://andyspiros.wordpress.com/2011/07/08/an-example-of-blacs-with-c/" rel="nofollow"&gt;&lt;U&gt;&lt;FONT color="#0066cc"&gt;example&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&amp;nbsp;, it distribute the whole matrix.&lt;/P&gt;

&lt;P&gt;Cdgesd2d(ctxt, nr, nc, A_glob+N*c+r, N, sendr, sendc);&lt;/P&gt;

&lt;P&gt;And Alexander mentioned:&amp;nbsp;&lt;/P&gt;

&lt;P&gt;you may modify the example to run scatter/gather loops only on block below diagonal (c&amp;lt;=r).Also there are Cdtrsd2d() and&amp;nbsp;Cdtrrv2d() functions which transfer only upper or lower triangular of matrix, which you may use to transfer diagonal blocks (c==r).&lt;/P&gt;

&lt;P&gt;Cdtrsd2d parameter&amp;nbsp;are like below ( see more details in MKL manual)&lt;/P&gt;

&lt;P&gt;call Cdtrsd2d( icontxt, uplo, diag, m, n, a, lda, rdest, cdest)&lt;/P&gt;

&lt;P&gt;uplo (input) CHARACTER*1 . Indicates whether the matrix is upper or lower&lt;BR /&gt;
	trapezoidal, as discussed below. Upper or Lower&lt;BR /&gt;
	diag (input) CHARACTER*1 . Indicates whether the diagonal of the matrix is unit&lt;BR /&gt;
	diagonal (will not be operated on ) "U"&amp;nbsp;or otherwise (will be operated on) "N".&lt;/P&gt;

&lt;P&gt;So you may modify the code&lt;/P&gt;

&lt;P&gt;&amp;nbsp; if (mpiroot) {&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; // Send a nr-by-nc submatrix to process (sendr, sendc)&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; Cdtrsd2d()&amp;nbsp;&amp;nbsp; //(ctxt, "U", "N", nr, nc, A_glob+N*c+r, N, sendr, sendc);&amp;nbsp;&amp;nbsp;&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; }&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (myrow == sendr &amp;amp;&amp;amp; mycol == sendc) {&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; // Receive the same data&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; // The leading dimension of the local matrix is nrows!&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; Cdtrrv2d()&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp; (ctxt, nr, nc, A_loc+nrows*recvc+recvr, nrows, 0, 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; recvc = (recvc+nc)%ncols;&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; }&lt;/P&gt;

&lt;P&gt;Best Regards,&lt;/P&gt;

&lt;P&gt;Ying&lt;/P&gt;

&lt;P&gt;p.S&lt;/P&gt;

&lt;P&gt;?trrv2d&lt;BR /&gt;
	Receives a message from the process into the&lt;BR /&gt;
	trapezoidal matrix.&lt;BR /&gt;
	Syntax&lt;BR /&gt;
	call itrrv2d( icontxt, uplo, diag, m, n, a, lda, rsrc, csrc)&lt;BR /&gt;
	call strrv2d( icontxt, uplo, diag, m, n, a, lda, rsrc, csrc)&lt;BR /&gt;
	call dtrrv2d( icontxt, uplo, diag, m, n, a, lda, rsrc, csrc)&lt;/P&gt;</description>
      <pubDate>Tue, 21 Jul 2015 02:31:53 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015339#M19446</guid>
      <dc:creator>Ying_H_Intel</dc:creator>
      <dc:date>2015-07-21T02:31:53Z</dc:date>
    </item>
    <item>
      <title>I've modified the example</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015340#M19447</link>
      <description>&lt;P&gt;I've modified the example referenced above to copy only lower triangular part.&lt;BR /&gt;
	You could find it in the attach.&lt;/P&gt;

&lt;P&gt;Best regards,&lt;BR /&gt;
	Alexander&lt;/P&gt;</description>
      <pubDate>Tue, 21 Jul 2015 07:47:48 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015340#M19447</guid>
      <dc:creator>Alexander_K_Intel3</dc:creator>
      <dc:date>2015-07-21T07:47:48Z</dc:date>
    </item>
    <item>
      <title>Hi all,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015341#M19448</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;

&lt;P&gt;&amp;nbsp; thanks for your kind posts, they helped a lot. Alexander, your code works. I just have a last question.&amp;nbsp;&lt;SPAN style="font-size: 12px; line-height: 18px;"&gt;mecej4's post #7 says that we should use column-major approach. However, your code will transfer the lower part and if for example, we had only one process, then the matrix the factorization would apply to, would be like this:&lt;/SPAN&gt;&lt;/P&gt;

&lt;PRE class="brush:cpp;"&gt;double A[] =  {
    4,    0,    0, 0,          0,
    1,    0.5, 0, 0,          0,
    2,    0,    3, 0,          0,
    0.5, 0,    0, 0.625,  0,
    2,    0,    0, 0,           16
  };
&lt;/PRE&gt;

&lt;P&gt;and not like the one in&amp;nbsp;&lt;SPAN style="font-size: 12px; line-height: 18px;"&gt;mecej4's post #7. However, it still works. Why? Is this because of the symmetry?&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 12px; line-height: 18px;"&gt;Thanks again,&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 12px; line-height: 18px;"&gt;George&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 21 Jul 2015 17:12:12 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015341#M19448</guid>
      <dc:creator>Georgios_S_</dc:creator>
      <dc:date>2015-07-21T17:12:12Z</dc:date>
    </item>
    <item>
      <title>George,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015342#M19449</link>
      <description>&lt;P&gt;George,&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;You are welcome!&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;The example transfers lower triangular of matrix stored Column-Major including diagonal elements.&amp;nbsp;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;So if you have Row-Major format with lower triangular filled (as in post #10) - this is equivalent to filled upper triangular of Column-Major matrix. The scatter code will transfer zeroes from subdiagonal elements and diagonal elements of the matrix. And pdpotrf will factorize that diagonal matrix. Such matrix is perfectly positive defined, so no problems to compute the factorization, though it will differ from result of factorization of original A.&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;Best regards,&lt;BR /&gt;
	Alexander&lt;/SPAN&gt;&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jul 2015 04:43:15 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015342#M19449</guid>
      <dc:creator>Alexander_K_Intel3</dc:creator>
      <dc:date>2015-07-23T04:43:15Z</dc:date>
    </item>
    <item>
      <title>Hi Alexander,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015343#M19450</link>
      <description>&lt;P&gt;Hi Alexander,&lt;/P&gt;

&lt;P&gt;&amp;nbsp; thanks for your response.&lt;/P&gt;

&lt;P&gt;Best regards,&lt;/P&gt;

&lt;P&gt;George&lt;/P&gt;</description>
      <pubDate>Tue, 04 Aug 2015 15:13:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Exploit-symmetry-in-Cholesky/m-p/1015343#M19450</guid>
      <dc:creator>Georgios_S_</dc:creator>
      <dc:date>2015-08-04T15:13:00Z</dc:date>
    </item>
  </channel>
</rss>

