<?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: MKL Scalapack PDGESV in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-Scalapack-PDGESV/m-p/875088#M8843</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/438571"&gt;Artem Vorobiev (Intel)&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; Hello,&lt;BR /&gt;&lt;BR /&gt;IA and JA should represent specific block in the global matrix A.&lt;BR /&gt;&lt;BR /&gt;Thanks,&lt;BR /&gt;Art&lt;BR /&gt;&lt;/EM&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
Not quite. I managed to do an solver using local distributed matrices with both IA and JA equal to one, independent of the block size or processor row and column. But thank you for your help.&lt;BR /&gt;</description>
    <pubDate>Mon, 30 Nov 2009 20:20:02 GMT</pubDate>
    <dc:creator>mfactor</dc:creator>
    <dc:date>2009-11-30T20:20:02Z</dc:date>
    <item>
      <title>MKL Scalapack PDGESV</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-Scalapack-PDGESV/m-p/875086#M8841</link>
      <description>Hello all, &lt;BR /&gt;&lt;BR /&gt;I'm trying to do the block cyclic matrix distribution using MKL and Scalapack's PDGESV. The matrix is transposed, as in Lapack, but the results are not correct. In the PDGESV call, the index IA and JA is the starting index in the local matrix, and so always one, or should be the index that this specific block has in the total matrix?&lt;BR /&gt;&lt;BR /&gt;Thank you!&lt;BR /&gt;&lt;BR /&gt;#include &lt;IOSTREAM&gt;&lt;BR /&gt;#include &lt;VECTOR&gt;&lt;BR /&gt;#include &lt;OPENMPI&gt;&lt;BR /&gt;#include &lt;CMATH&gt;&lt;BR /&gt;#include &lt;CSTDLIB&gt;&lt;BR /&gt;#include &lt;MKL&gt;&lt;BR /&gt;#include &lt;MKL&gt;&lt;BR /&gt;#include &lt;MKL&gt;&lt;BR /&gt;#define mat(matriz,coluna,i,j) (matriz[i*coluna+j])&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;#define p_of_i(i,bs,p) ( int((i-1)/bs)%p)&lt;BR /&gt;#define l_of_i(i,bs,p) (int((i-1)/(p*bs)))&lt;BR /&gt;#define x_of_i(i,bs,p) (((i-1)%bs)+1)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;using namespace std;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;extern "C" {&lt;BR /&gt; /* BLACS C interface */&lt;BR /&gt; void Cblacs_get( int context, int request, int* value);&lt;BR /&gt; int  Cblacs_gridinit( int* context, char * order, int np_row, int np_col);&lt;BR /&gt; void Cblacs_gridinfo( int context, int*  np_row, int* np_col, int*  my_row, int*  my_col);&lt;BR /&gt; int  numroc_( int *n, int *nb, int *iproc, int *isrcproc, int *nprocs);&lt;BR /&gt; void Cblacs_gridexit(int ictxt);&lt;BR /&gt; void pdgesv_(MKL_INT *n, MKL_INT *nrhs, double *a, MKL_INT *ia, &lt;BR /&gt; MKL_INT *ja, MKL_INT *desca, MKL_INT *ipiv, double *b, MKL_INT *ib, MKL_INT *jb, MKL_INT *descb, MKL_INT *info);&lt;BR /&gt; void dgesv_( MKL_INT* n, MKL_INT* nrhs, double* a, MKL_INT* lda, MKL_INT* ipiv, double* b, MKL_INT* ldb, MKL_INT* info );&lt;BR /&gt;&lt;BR /&gt; void descinit_( int *desc, int *m, int *n, int *mb, int *nb, int *irsrc, int *icsrc,&lt;BR /&gt; int *ictxt, int *lld, int *info);&lt;BR /&gt; double pdlamch_( int *ictxt , char *cmach);&lt;BR /&gt; double pdlange_( char *norm, int *m, int *n, double *A, int *ia, int *ja, int *desca, double *work);&lt;BR /&gt;&lt;BR /&gt; void pdlacpy_( char *uplo, int *m, int *n, double *a, int *ia, int *ja, int *desca,&lt;BR /&gt; double *b, int *ib, int *jb, int *descb);&lt;BR /&gt;&lt;BR /&gt; void pdgemm_( char *TRANSA, char *TRANSB, int * M, int * N, int * K, double * ALPHA,&lt;BR /&gt; double * A, int * IA, int * JA, int * DESCA, double * B, int * IB, int * JB, int * DESCB,&lt;BR /&gt; double * BETA, double * C, int * IC, int * JC, int * DESCC );&lt;BR /&gt; int  indxg2p_( int *indxglob, int *nb, int *iproc, int *isrcproc, int *nprocs);&lt;BR /&gt;&lt;BR /&gt;//void descinit_(int *descA, int *n2, int *n , int *nb, int *nb2, int *izero2, int *izero, int * ictxt, int * itemp, int *info);&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;void find_nps(int np, int &amp;amp;nprow, int &amp;amp; npcol);&lt;BR /&gt;int getIndex(int row, int col,int NCOLS) {return row*NCOLS+col;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;int main(int argv, char ** argc) {&lt;BR /&gt; &lt;BR /&gt;MPI::Init();&lt;BR /&gt; int rank = MPI::COMM_WORLD.Get_rank();&lt;BR /&gt; int nprocs = MPI::COMM_WORLD.Get_size();&lt;BR /&gt;&lt;BR /&gt;//  std::cout&amp;lt;&amp;lt;"Returned: "&amp;lt;&amp;lt;" ";&lt;BR /&gt;//         std::cout &amp;lt;&amp;lt; "Hello World! I am " &amp;lt;&amp;lt; rank &amp;lt;&amp;lt; " of " &amp;lt;&amp;lt; nprocs &amp;lt;&amp;lt;&lt;BR /&gt;//         std::endl;&lt;BR /&gt;//srand(1);&lt;BR /&gt;int myrow=0;&lt;BR /&gt;int mycol=0;&lt;BR /&gt;int ictxt;&lt;BR /&gt;int nprow=0,npcol=0;&lt;BR /&gt;int locR=0, locC=0;&lt;BR /&gt;int block = 2;&lt;BR /&gt;int myzero = 0;&lt;BR /&gt;int matrix_size = 9;&lt;BR /&gt;int myone = 1;&lt;BR /&gt;int nrhs = 1;&lt;BR /&gt;int info=0;&lt;BR /&gt;int i=0,j=0;&lt;BR /&gt;double mone=(-1.0e0),pone=(1.0e0);&lt;BR /&gt;double AnormF, XnormF, RnormF, BnormF, residF,eps;&lt;BR /&gt;&lt;BR /&gt;find_nps(nprocs,nprow,npcol);&lt;BR /&gt;&lt;BR /&gt;if(rank == 0) {&lt;BR /&gt; cout &amp;lt;&amp;lt;"nprocs: "&amp;lt;&amp;lt;&amp;lt;" nprow "&amp;lt;&amp;lt;&amp;lt;" npcol "&amp;lt;&amp;lt;&amp;lt;&amp;lt;"rank "&amp;lt;&amp;lt;&amp;lt; "  nprow " &amp;lt;&amp;lt;&amp;lt;"  "&amp;lt;&amp;lt;"  npcol "&amp;lt;&amp;lt;&amp;lt; "  myrow  "&amp;lt;&amp;lt;&amp;lt; "  mycol  "&amp;lt;&amp;lt;&amp;lt; matrix_size; j++) {&lt;BR /&gt; // A[getIndex(i,j,matrix_size)] = 0;//(double)(rand()%100)/100.0;&lt;BR /&gt; &lt;BR /&gt; Acpy[getIndex(i,j,matrix_size)] = A[getIndex(i,j,matrix_size)];&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; //B&lt;I&gt; = 0;//(double)(rand()%100)/100.0;&lt;BR /&gt; Bcpy&lt;I&gt; = B&lt;I&gt;; &lt;BR /&gt; &lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt; // cout&amp;lt;&amp;lt; "Global Matrix" &amp;lt;&amp;lt; matrix_size; i++) {&lt;BR /&gt; for(j=0; j&amp;lt; matrix_size; j++) {&lt;BR /&gt; A[getIndex(i,j,matrix_size)] = Acpy[getIndex(j,i,matrix_size)];&lt;BR /&gt; &lt;BR /&gt; //cout&amp;lt;&amp;lt;"  "&amp;lt;&amp;lt;&amp;lt;&amp;lt;"++++++++++"&amp;lt;&amp;lt; matrix_size; i++) {&lt;BR /&gt; for(j=0; j&amp;lt; matrix_size; j++) {&lt;BR /&gt; Acpy[getIndex(i,j,matrix_size)] = A[getIndex(i,j,matrix_size)];&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt;&lt;BR /&gt;// if(rank ==0) {&lt;BR /&gt;//   cout &amp;lt;&amp;lt;"Global Vector" &amp;lt;&amp;lt; matrix_size; i++) {&lt;BR /&gt;//       cout&amp;lt;&amp;lt;"*  "&amp;lt;&amp;lt;&amp;lt;&amp;lt;"++++++++"&amp;lt;&amp;lt;&amp;lt;"rank "&amp;lt;&amp;lt;&amp;lt; "  locR " &amp;lt;&amp;lt;&amp;lt;"  "&amp;lt;&amp;lt;"  locC "&amp;lt;&amp;lt;&amp;lt; matrix_size; i++) {&lt;BR /&gt; cout &amp;lt;&amp;lt;"dgesv  "&amp;lt;&amp;lt;&amp;lt; matrix_size+1; i++) {&lt;BR /&gt; for(j=1; j&amp;lt; matrix_size+1; j++) {&lt;BR /&gt; &lt;BR /&gt; int pi = p_of_i(i,block,nprow);&lt;BR /&gt; int li = l_of_i(i,block,nprow);&lt;BR /&gt; int xi = x_of_i(i,block,nprow);&lt;BR /&gt;&lt;BR /&gt; int pj = p_of_i(j,block,npcol);&lt;BR /&gt; int lj = l_of_i(j,block,npcol);&lt;BR /&gt; int xj = x_of_i(j,block,npcol);&lt;BR /&gt;&lt;BR /&gt; if( (pi == myrow) &amp;amp;&amp;amp; (pj == mycol)) {&lt;BR /&gt; il = li*block+xi;&lt;BR /&gt; jl = lj*block+xj;&lt;BR /&gt; local_matrix[getIndex(il-1, jl-1, locC)] = A[getIndex(i-1,j-1,matrix_size)];&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; if(  (pi == myrow) &amp;amp;&amp;amp;(mycol==0)  ){&lt;BR /&gt; il = li*block+xi;&lt;BR /&gt; local_know_vector[il-1] = B[i-1];&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; &lt;BR /&gt; }&lt;BR /&gt;&lt;BR /&gt;//if(rank ==0) {&lt;BR /&gt; cout &amp;lt;&amp;lt;"Local Matrix myrow " &amp;lt;&amp;lt;&amp;lt;" mycol "&amp;lt;&amp;lt;&amp;lt; locR; i++) {&lt;BR /&gt; for(j=0; j&amp;lt; locC; j++) {&lt;BR /&gt; cout&amp;lt;&amp;lt;"  "&amp;lt;&amp;lt;&amp;lt;&amp;lt;"++++++++"&amp;lt;&amp;lt;&amp;lt;"Local Vector rank " &amp;lt;&amp;lt;&amp;lt; locR; i++) {&lt;BR /&gt; cout&amp;lt;&amp;lt;"*  "&amp;lt;&amp;lt;&amp;lt;&amp;lt;"++++++++"&amp;lt;&amp;lt; locR; i++)&lt;BR /&gt;{&lt;BR /&gt; cout&amp;lt;&amp;lt;"**"&amp;lt;&amp;lt;"rank "&amp;lt;&amp;lt;&amp;lt;"   "&amp;lt;&amp;lt;&amp;lt;&amp;lt;"++++++++"&amp;lt;&amp;lt; min_nprow)    min_nprow = nprow;&lt;BR /&gt; } &lt;BR /&gt;&lt;BR /&gt; if(nprow ==1 ) break;&lt;BR /&gt;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;nprow = min_nprow;&lt;BR /&gt;npcol = min_npcol;&lt;BR /&gt;&lt;BR /&gt;}&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/MKL&gt;&lt;/MKL&gt;&lt;/MKL&gt;&lt;/CSTDLIB&gt;&lt;/CMATH&gt;&lt;/OPENMPI&gt;&lt;/VECTOR&gt;&lt;/IOSTREAM&gt;</description>
      <pubDate>Fri, 27 Nov 2009 18:21:37 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-Scalapack-PDGESV/m-p/875086#M8841</guid>
      <dc:creator>mfactor</dc:creator>
      <dc:date>2009-11-27T18:21:37Z</dc:date>
    </item>
    <item>
      <title>Re: MKL Scalapack PDGESV</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-Scalapack-PDGESV/m-p/875087#M8842</link>
      <description>&lt;DIV style="margin: 0px; height: auto;"&gt;&lt;/DIV&gt;
Hello,&lt;BR /&gt;&lt;BR /&gt;IA and JA should represent specific block in the global matrix A.&lt;BR /&gt;&lt;BR /&gt;Thanks,&lt;BR /&gt;Art&lt;BR /&gt;</description>
      <pubDate>Mon, 30 Nov 2009 07:08:03 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-Scalapack-PDGESV/m-p/875087#M8842</guid>
      <dc:creator>Artem_V_Intel</dc:creator>
      <dc:date>2009-11-30T07:08:03Z</dc:date>
    </item>
    <item>
      <title>Re: MKL Scalapack PDGESV</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-Scalapack-PDGESV/m-p/875088#M8843</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/438571"&gt;Artem Vorobiev (Intel)&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; Hello,&lt;BR /&gt;&lt;BR /&gt;IA and JA should represent specific block in the global matrix A.&lt;BR /&gt;&lt;BR /&gt;Thanks,&lt;BR /&gt;Art&lt;BR /&gt;&lt;/EM&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
Not quite. I managed to do an solver using local distributed matrices with both IA and JA equal to one, independent of the block size or processor row and column. But thank you for your help.&lt;BR /&gt;</description>
      <pubDate>Mon, 30 Nov 2009 20:20:02 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-Scalapack-PDGESV/m-p/875088#M8843</guid>
      <dc:creator>mfactor</dc:creator>
      <dc:date>2009-11-30T20:20:02Z</dc:date>
    </item>
    <item>
      <title>Re: MKL Scalapack PDGESV</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-Scalapack-PDGESV/m-p/875089#M8844</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/447556"&gt;mfactor&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;
&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/438571"&gt;Artem Vorobiev (Intel)&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; Hello,&lt;BR /&gt;&lt;BR /&gt;IA and JA should represent specific block in the global matrix A.&lt;BR /&gt;&lt;BR /&gt;Thanks,&lt;BR /&gt;Art&lt;BR /&gt;&lt;/EM&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
Not quite. I managed to do an solver using local distributed matrices with both IA and JA equal to one, independent of the block size or processor row and column. But thank you for your help.&lt;BR /&gt;&lt;/EM&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;BR /&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;It is very interesting, because according to MKL Manual p2202:&lt;BR /&gt;&lt;BR /&gt;ia, ja (global) INTEGER. The row and column indices in the global&lt;BR /&gt; array A indicating the first row and the first column of&lt;BR /&gt; sub(A), respectively.&lt;BR /&gt;&lt;BR /&gt;Could you please submit an example of code? (Looks like first example is broken: &lt;BR /&gt;
&lt;PRE&gt;[cpp]cout&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;&amp;lt;&amp;lt;"++++++++"&amp;lt;&amp;lt;&amp;lt;"Local Vector rank " &amp;lt;&amp;lt;&amp;lt; locR; i++) {[/cpp]&lt;/PRE&gt;
&lt;BR /&gt;) Could you also specify what MKL version do you use?&lt;BR /&gt;&lt;BR /&gt;Thanks,&lt;BR /&gt;Art&lt;BR /&gt;</description>
      <pubDate>Wed, 02 Dec 2009 05:55:08 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-Scalapack-PDGESV/m-p/875089#M8844</guid>
      <dc:creator>Artem_V_Intel</dc:creator>
      <dc:date>2009-12-02T05:55:08Z</dc:date>
    </item>
  </channel>
</rss>

