<?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  in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017629#M19563</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="line-height: 1.5; font-size: 1em;"&gt;I’ve corrected the example to properly define process grid and init MPI.&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;Now it works fine for any number of MPI processes. Attach here.&amp;nbsp;&lt;/P&gt;

&lt;P&gt;and&amp;nbsp;the article : &amp;nbsp;&lt;A href="https://software.intel.com/en-us/articles/using-cluster-mkl-pblasscalapack-fortran-routine-in-your-c-program/"&gt;https://software.intel.com/en-us/articles/using-cluster-mkl-pblasscalapack-fortran-routine-in-your-c-program/&lt;/A&gt;&amp;nbsp; had pdgemv sample code &lt;A href="https://community.intel.com/legacyfs/online/drupal_files/article/165948/pdgemv.c"&gt;https://software.intel.com/sites/default/files/article/165948/pdgemv.c&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;#include &amp;lt;mpi.h&amp;gt;&lt;BR /&gt;
	#include &amp;lt;iostream&amp;gt;&lt;BR /&gt;
	#include &amp;lt;vector&amp;gt;&lt;BR /&gt;
	#include &amp;lt;cmath&amp;gt;&lt;BR /&gt;
	#include &amp;lt;cstdlib&amp;gt;&lt;BR /&gt;
	//#include "Scalapack.h"&lt;BR /&gt;
	#include &amp;lt;mkl.h&amp;gt;&lt;BR /&gt;
	#include &amp;lt;mkl_scalapack.h&amp;gt;&lt;BR /&gt;
	#include "mkl_lapacke.h"&lt;BR /&gt;
	#include &amp;lt;mkl_cblas.h&amp;gt;&lt;/P&gt;

&lt;P&gt;#define mat(matriz,coluna,i,j) (matriz[i*coluna+j])&lt;/P&gt;

&lt;P&gt;#define p_of_i(i,bs,p) ( MKL_INT((i-1)/bs)%p)&lt;BR /&gt;
	#define l_of_i(i,bs,p) ( MKL_INT((i-1)/(p*bs)))&lt;BR /&gt;
	#define x_of_i(i,bs,p) (((i-1)%bs)+1)&lt;/P&gt;

&lt;P&gt;//#define&amp;nbsp;&amp;nbsp; numroc_&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NUMROC&lt;/P&gt;

&lt;P&gt;using namespace std;&lt;/P&gt;

&lt;P&gt;extern "C"&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* BLACS C interface */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; void Cblacs_pinfo(int* mypnum, int* nprocs);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; void Cblacs_get( MKL_INT context, MKL_INT request, MKL_INT* value);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp; Cblacs_gridinit( MKL_INT* context, char * order, MKL_INT np_row, MKL_INT np_col);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; void Cblacs_gridinfo( MKL_INT context, MKL_INT*&amp;nbsp; np_row, MKL_INT* np_col, MKL_INT*&amp;nbsp; my_row,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT*&amp;nbsp; my_col);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp; numroc_( MKL_INT *n, MKL_INT *nb, MKL_INT *iproc, MKL_INT *isrcproc, MKL_INT *nprocs);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; void Cblacs_gridexit(MKL_INT ictxt);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; void Cblacs_barrier(MKL_INT ictxt, char * order);&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;void find_nps(MKL_INT np, MKL_INT &amp;amp;nprow, MKL_INT &amp;amp; npcol);&lt;BR /&gt;
	int getIndex(MKL_INT row, MKL_INT col,MKL_INT NCOLS) {return row*NCOLS+col;}&lt;BR /&gt;
	/*&lt;BR /&gt;
	CTEST_Scalapack::CTEST_Scalapack(void)&lt;BR /&gt;
	{&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;CTEST_Scalapack::~CTEST_Scalapack(void)&lt;BR /&gt;
	{&lt;BR /&gt;
	}&lt;BR /&gt;
	*/&lt;/P&gt;

&lt;P&gt;int main(int argc, char ** argv)&lt;BR /&gt;
	{&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int nprocs = 0;//MPI::COMM_WORLD.Get_size();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; int rank = 0;//MPI::COMM_WORLD.Get_rank();&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MPI_Init(&amp;amp;argc,&amp;amp;argv);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MPI_Comm_size(MPI_COMM_WORLD,&amp;amp;nprocs);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MPI_Comm_rank(MPI_COMM_WORLD,&amp;amp;rank);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::cout&amp;lt;&amp;lt;"Returned: "&amp;lt;&amp;lt;" ";&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; std::endl;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; srand(1);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT myrow=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT mycol=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT ictxt=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT nprow=0,npcol=0;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT BLOCK_SIZE =2; //this gonna be tricky - should be 64, but cannot be larger than the original matrix&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT locR=0, locC=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT block = BLOCK_SIZE;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT izero = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT matrix_size = 9;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT myone = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT nrhs = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT info=0;&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; int i=0,j=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double mone=(-1.e0),pone=(1.e0);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double AnormF=0.e0, XnormF=0.e0, RnormF=0.e0, BnormF=0.e0, residF=0.e0,eps=0.e0;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; find_nps(nprocs,nprow,npcol);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cblacs_pinfo( &amp;amp;rank, &amp;amp;nprocs ) ;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; Cblacs_get(-1, 0, &amp;amp;ictxt);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; Cblacs_gridinit(&amp;amp;ictxt, "Row", nprow, npcol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; Cblacs_gridinfo(ictxt, &amp;amp;nprow, &amp;amp;npcol, &amp;amp;myrow, &amp;amp;mycol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; locR = numroc_(&amp;amp;matrix_size, &amp;amp;block, &amp;amp;myrow, &amp;amp;izero, &amp;amp;nprow);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; locC = numroc_(&amp;amp;matrix_size, &amp;amp;block, &amp;amp;mycol, &amp;amp;izero, &amp;amp;npcol);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; ////GLOBAL&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double * A = new double[matrix_size*matrix_size]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double * B = new double[matrix_size]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double * Acpy = new double[matrix_size*matrix_size]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double * Bcpy = new double[matrix_size]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; //LOCAL&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double * local_know_vector = new double[locR]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double * local_matrix = new double[locR*locC]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT* ipiv = new MKL_INT [locC*locR*block+1000000]();&lt;/P&gt;

&lt;P&gt;&amp;nbsp;B[0] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; B[1] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; B[2] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; B[3] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; B[4] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; B[5] = 0;&lt;BR /&gt;
	&amp;nbsp;B[6] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; B[7] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[0] = 19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[1] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[2] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[3] = 12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[4] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[5] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[6] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[7] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[8] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[9] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[10] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[11] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[12] = 12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[13] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[14] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[15] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[16] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[17] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[18] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[19] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[20] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[21] = 12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[22] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[23] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[24] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[25] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[26] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[27] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[28] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[29] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[30] = 12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[31] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[32] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[33] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[34] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[35] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[36] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[37] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[38] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[39] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[40] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[41] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[42] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[43] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[44] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[45] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[46] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[47] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[48] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[49] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[50] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[51] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[52] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[53] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[54] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[55] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[56] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[57] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[58] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[59] = -16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[60] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[61] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[62] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[63] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[64] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[65] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[66] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[67] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[68] = -16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[69] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[70] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[71] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[72] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[73] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[74] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[75] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[76] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[77] = -16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[78] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[79] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[80] = 11;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT* descA&amp;nbsp; = new MKL_INT[9]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT* descB&amp;nbsp; = new MKL_INT[9]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[0] = 1; // descriptor type&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[1] = ictxt; // blacs context&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[2] = matrix_size; // global number of rows&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[3] = matrix_size; // global number of columns&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[4] = block; // row block size&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[5] = block; // column block size (DEFINED EQUAL THAN ROW BLOCK SIZE)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[6] = 0; // initial process row(DEFINED 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[7] = 0; // initial process column (DEFINED 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[8] = locR; // leading dimension of local array&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[0] = 1; // descriptor type&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[1] = ictxt; // blacs context&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[2] = matrix_size; // global number of rows&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[3] = 1; // global number of columns&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[4] = block; // row block size&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[5] = block; // column block size (DEFINED EQUAL THAN ROW BLOCK SIZE)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[6] = 0; // initial process row(DEFINED 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[7] = 0; // initial process column (DEFINED 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[8] = locR; // leading dimension of local array&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int il=0, jl=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=1; i&amp;lt; matrix_size+1; i++)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j=1; j&amp;lt; matrix_size+1; j++)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pi = p_of_i(i,block,nprow);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int li = l_of_i(i,block,nprow);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int xi = x_of_i(i,block,nprow);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //printf("i = %d, j = %d, pi = %d, li = %d\n",i,j,pi,li);;fflush(stdout);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pj = p_of_i(j,block,npcol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int lj = l_of_i(j,block,npcol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int xj = x_of_i(j,block,npcol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //printf("i = %d, j = %d, pj = %d, lj = %d, xj = %d\n",i,j,pj,lj,xj);;fflush(stdout);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( (pi == myrow) &amp;amp;&amp;amp; (pj == mycol))&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; il = li*block+xi;&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; jl = lj*block+xj;&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; local_matrix[getIndex(il-1, jl-1, locC)] = A[getIndex(i-1,j-1,matrix_size)];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(&amp;nbsp; (pi == myrow) &amp;amp;&amp;amp;(mycol==0)&amp;nbsp; )&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; local_know_vector[il-1] = B[i-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; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	//&amp;nbsp; above initialization code have some issue. in our sample, we use &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	for(i=0;i&amp;lt;locR;++i) for(j=0;j&amp;lt;locC;++j) {&lt;BR /&gt;
	&amp;nbsp; int gi = i%block + block*myrow + (i/block)*block*nprow;&lt;BR /&gt;
	&amp;nbsp; int gj = j%block + block*mycol + (j/block)*block*npcol;&lt;BR /&gt;
	&amp;nbsp; local_matrix[i + locR*j] = A[gi*matrix_size + gj]; // note: col-major &amp;lt;- row-major&lt;BR /&gt;
	&amp;nbsp; local_know_vector&lt;I&gt; = B[gi];&lt;BR /&gt;
	}&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ////STARTING PDGESV&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; pdgesv_(&amp;amp;matrix_size, &amp;amp;nrhs, local_matrix, &amp;amp;myone, &amp;amp;myone, descA, ipiv, local_know_vector, &amp;amp;myone, &amp;amp;myone, descB, &amp;amp;info);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(rank==0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(info != 0) cout &amp;lt;&amp;lt;"PDGESV problem! Info "&amp;lt;&amp;lt;info&amp;lt;&amp;lt;endl;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; locR; i++)&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp; int gi = i%block + block*myrow + (i/block)*block*nprow;&lt;BR /&gt;
	&amp;nbsp; if (mycol == 0) printf("res[ %i ]=%lg\n",gi,local_know_vector&lt;I&gt;);&lt;BR /&gt;
	}&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; //&amp;nbsp; for(i=0; i&amp;lt; locR; i++)&lt;BR /&gt;
	&amp;nbsp; //&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp; //&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"**\n"&amp;lt;&amp;lt;"rank "&amp;lt;&amp;lt;rank&amp;lt;&amp;lt;"&amp;nbsp; answer: "&amp;lt;&amp;lt;local_know_vector&lt;I&gt;&amp;lt;&amp;lt;endl;&lt;BR /&gt;
	&amp;nbsp; //&amp;nbsp; }&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=descA)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] descA; descA=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=descB)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] descB; descB=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=local_know_vector)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] local_know_vector; local_know_vector=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=local_matrix)&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; {delete [] local_matrix; local_matrix=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=Acpy)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] Acpy; Acpy=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=Bcpy)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] Bcpy; Bcpy=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=A)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] A; A=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=B)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] B; B=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cblacs_gridexit(ictxt);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;

&lt;P&gt;}&lt;/P&gt;

&lt;P&gt;void find_nps(MKL_INT np, MKL_INT &amp;amp;nprow, MKL_INT &amp;amp; npcol)&lt;BR /&gt;
	{&lt;BR /&gt;
	#if 1&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; nprow = (int)sqrt( np );&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; npcol = np / nprow;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/P&gt;

&lt;P&gt;#else&lt;/P&gt;

&lt;P&gt;MKL_INT min_nprow=100000;&lt;BR /&gt;
	MKL_INT min_npcol=100000;&lt;/P&gt;

&lt;P&gt;nprow = np;&lt;BR /&gt;
	npcol = np;&lt;/P&gt;

&lt;P&gt;while(1) {&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; npcol--;&lt;BR /&gt;
	&amp;nbsp; if(np%2==0&amp;nbsp;&amp;nbsp; ) {&lt;BR /&gt;
	&amp;nbsp; if(npcol ==1){&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; nprow --;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; npcol = nprow;&lt;BR /&gt;
	&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp; }else {&lt;BR /&gt;
	&amp;nbsp; if(npcol ==0){&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; nprow --;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; npcol = nprow;&lt;BR /&gt;
	&amp;nbsp; }&lt;/P&gt;

&lt;P&gt;&amp;nbsp; }&lt;/P&gt;

&lt;P&gt;&amp;nbsp; if(nprow*npcol == np) {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; min_npcol = npcol;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(nprow &amp;lt; min_nprow)&amp;nbsp;&amp;nbsp;&amp;nbsp; min_nprow = nprow;&lt;BR /&gt;
	&amp;nbsp; }&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(nprow ==1 ) break;&lt;/P&gt;

&lt;P&gt;}&lt;/P&gt;

&lt;P&gt;nprow = min_nprow;&lt;BR /&gt;
	npcol = min_npcol;&lt;BR /&gt;
	#endif&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 31 Dec 2014 05:27:00 GMT</pubDate>
    <dc:creator>Ying_H_Intel</dc:creator>
    <dc:date>2014-12-31T05:27:00Z</dc:date>
    <item>
      <title>[Scalapack] Please Help with using pdgesv</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017628#M19562</link>
      <description>&lt;P&gt;Hello all:&lt;/P&gt;

&lt;P&gt;&amp;nbsp;I'm trying to solve a linear system (9 by 9 full matrix) by pdgesv in c. I use the example code (http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&amp;amp;t=1683&amp;amp;sid=26b4f2535c0c3856d02bdadd62d08c5f#) and compiling is ok. However, there is a error info after calling pdgesv:&amp;nbsp;&lt;/P&gt;

&lt;P&gt;“On entry to PDGESV parameter number 602 had an illegal value”.&lt;/P&gt;

&lt;P&gt;According to the &lt;SPAN style="font-size: 12.8000001907349px; line-height: 15.609601020813px;"&gt;PDGESV&amp;nbsp;&lt;/SPAN&gt;source code, it means the 2th element of the 6th argument was wrong, which means the descA[1] is wrong?&lt;/P&gt;

&lt;P&gt;However, descA[1] (&lt;SPAN style="font-size: 12.8000001907349px; line-height: 15.609601020813px;"&gt;ictxt&lt;/SPAN&gt;) is rewrited by&amp;nbsp;Cblacs_gridinit(&amp;amp;ictxt, "Row", nprow, npcol).&amp;nbsp;&lt;/P&gt;

&lt;P&gt;after printf ictxt, I find all ictxt = 0. IS this reason lead to the error message?&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;I really need to solve a large dense(full) matrix, can someone help me or give me some advice?&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;The following is my C code:&lt;/P&gt;

&lt;P&gt;PS: I've called&amp;nbsp;MPI_Init(&amp;amp;argc,&amp;amp;argv) before entering&amp;nbsp;&lt;SPAN style="font-size: 12.8000001907349px; line-height: 15.609601020813px;"&gt;Scalapack(int argc, char ** argv)&amp;nbsp;&lt;/SPAN&gt;&amp;nbsp;and called&amp;nbsp;MPI_Finalize() after leaving&amp;nbsp;&lt;SPAN style="font-size: 12.8000001907349px; line-height: 15.609601020813px;"&gt;Scalapack(int argc, char ** argv).&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;#include &amp;lt;mpi.h&amp;gt;&lt;BR /&gt;
	#include &amp;lt;iostream&amp;gt;&lt;BR /&gt;
	#include &amp;lt;vector&amp;gt;&lt;BR /&gt;
	#include &amp;lt;cmath&amp;gt;&lt;BR /&gt;
	#include &amp;lt;cstdlib&amp;gt;&lt;BR /&gt;
	#include "Scalapack.h"&lt;BR /&gt;
	#include &amp;lt;mkl.h&amp;gt;&lt;BR /&gt;
	#include &amp;lt;mkl_scalapack.h&amp;gt;&lt;BR /&gt;
	#include "mkl_lapacke.h"&lt;BR /&gt;
	#include &amp;lt;mkl_cblas.h&amp;gt;&lt;/P&gt;

&lt;P&gt;#define mat(matriz,coluna,i,j) (matriz[i*coluna+j])&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	#define p_of_i(i,bs,p) ( MKL_INT((i-1)/bs)%p)&lt;BR /&gt;
	#define l_of_i(i,bs,p) ( MKL_INT((i-1)/(p*bs)))&lt;BR /&gt;
	#define x_of_i(i,bs,p) (((i-1)%bs)+1)&lt;/P&gt;

&lt;P&gt;#define &amp;nbsp; numroc_ &amp;nbsp; &amp;nbsp; &amp;nbsp;NUMROC&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	using namespace std;&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	extern "C"&amp;nbsp;&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;/* BLACS C interface */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;void Cblacs_pinfo(int* mypnum, int* nprocs);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;void Cblacs_get( MKL_INT context, MKL_INT request, MKL_INT* value);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;int &amp;nbsp;Cblacs_gridinit( MKL_INT* context, char * order, MKL_INT np_row, MKL_INT np_col);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;void Cblacs_gridinfo( MKL_INT context, MKL_INT* &amp;nbsp;np_row, MKL_INT* np_col, MKL_INT* &amp;nbsp;my_row,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT* &amp;nbsp;my_col);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;int &amp;nbsp;numroc_( MKL_INT *n, MKL_INT *nb, MKL_INT *iproc, MKL_INT *isrcproc, MKL_INT *nprocs);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;void Cblacs_gridexit(MKL_INT ictxt);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;void Cblacs_barrier(MKL_INT ictxt, char * order);&lt;BR /&gt;
	&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;void find_nps(MKL_INT np, MKL_INT &amp;amp;nprow, MKL_INT &amp;amp; npcol);&lt;BR /&gt;
	int getIndex(MKL_INT row, MKL_INT col,MKL_INT NCOLS) {return row*NCOLS+col;}&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	CTEST_Scalapack::C&lt;SPAN style="font-size: 12.8000001907349px; line-height: 15.609601020813px;"&gt;TEST&lt;/SPAN&gt;_Scalapack(void)&lt;BR /&gt;
	{&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	C&lt;SPAN style="font-size: 12.8000001907349px; line-height: 15.609601020813px;"&gt;TEST&lt;/SPAN&gt;_Scalapack::~C&lt;SPAN style="font-size: 12.8000001907349px; line-height: 15.609601020813px;"&gt;TEST&lt;/SPAN&gt;_Scalapack(void)&lt;BR /&gt;
	{&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;int C&lt;SPAN style="font-size: 12.8000001907349px; line-height: 15.609601020813px;"&gt;TEST&lt;/SPAN&gt;_Scalapack::Scalapack(int argc, char ** argv)&amp;nbsp;&lt;BR /&gt;
	{&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int nprocs = 0;//MPI::COMM_WORLD.Get_size();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;int rank = 0;//MPI::COMM_WORLD.Get_rank();&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;MPI_Comm_size(MPI_COMM_WORLD,&amp;amp;nprocs);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MPI_Comm_rank(MPI_COMM_WORLD,&amp;amp;rank);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;"Returned: "&amp;lt;&amp;lt;" ";&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; 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;
	&amp;nbsp; &amp;nbsp; std::endl;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;srand(1);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT myrow=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT mycol=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT ictxt=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT nprow=0,npcol=0;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT BLOCK_SIZE =2; //this gonna be tricky - should be 64, but cannot be larger than the original matrix&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT locR=0, locC=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT block = BLOCK_SIZE;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT izero = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT matrix_size = 9;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT myone = 1;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT nrhs = 1;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT info=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;int i=0,j=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;double mone=(-1.e0),pone=(1.e0);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;double AnormF=0.e0, XnormF=0.e0, RnormF=0.e0, BnormF=0.e0, residF=0.e0,eps=0.e0;&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;find_nps(nprocs,nprow,npcol);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Cblacs_pinfo( &amp;amp;rank, &amp;amp;nprocs ) ;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;Cblacs_get(-1, 0, &amp;amp;ictxt);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;Cblacs_gridinit(&amp;amp;ictxt, "Row", nprow, npcol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;Cblacs_gridinfo(ictxt, &amp;amp;nprow, &amp;amp;npcol, &amp;amp;myrow, &amp;amp;mycol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;locR = numroc_(&amp;amp;matrix_size, &amp;amp;block, &amp;amp;myrow, &amp;amp;izero, &amp;amp;nprow);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;locC = numroc_(&amp;amp;matrix_size, &amp;amp;block, &amp;amp;mycol, &amp;amp;izero, &amp;amp;npcol);&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;////GLOBAL&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;double * A = new double[matrix_size*matrix_size]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;double * B = new double[matrix_size]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;double * Acpy = new double[matrix_size*matrix_size]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;double * Bcpy = new double[matrix_size]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;//LOCAL&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;double * local_know_vector = new double[locR]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;double * local_matrix = new double[locR*locC]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT* ipiv = new MKL_INT [locC*locR*block+1000000]();&lt;BR /&gt;
	&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;B[2] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;B[3] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;B[4] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;B[5] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[0] = 19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[1] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[2] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[3] = 12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[4] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[5] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[6] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[7] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[8] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[9] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[10] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[11] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[12] = 12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[13] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[14] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[15] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[16] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[17] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[18] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[19] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[20] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[21] = 12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[22] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[23] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[24] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[25] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[26] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[27] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[28] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[29] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[30] = 12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[31] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[32] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[33] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[34] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[35] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[36] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[37] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[38] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[39] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[40] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[41] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[42] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[43] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[44] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[45] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[46] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[47] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[48] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[49] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[50] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[51] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[52] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[53] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[54] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[55] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[56] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[57] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[58] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[59] = -16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[60] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[61] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[62] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[63] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[64] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[65] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[66] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[67] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[68] = -16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[69] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[70] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[71] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[72] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[73] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[74] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[75] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[76] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[77] = -16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[78] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[79] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;A[80] = 11;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT* descA &amp;nbsp;= new MKL_INT[9]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;MKL_INT* descB &amp;nbsp;= new MKL_INT[9]();&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descA[0] = 1; // descriptor type&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descA[1] = ictxt; // blacs context&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descA[2] = matrix_size; // global number of rows&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descA[3] = matrix_size; // global number of columns&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descA[4] = block; // row block size&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descA[5] = block; // column block size (DEFINED EQUAL THAN ROW BLOCK SIZE)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descA[6] = 0; // initial process row(DEFINED 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descA[7] = 0; // initial process column (DEFINED 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descA[8] = locR; // leading dimension of local array&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;descB[0] = 1; // descriptor type&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descB[1] = ictxt; // blacs context&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descB[2] = matrix_size; // global number of rows&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descB[3] = 1; // global number of columns&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descB[4] = block; // row block size&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descB[5] = block; // column block size (DEFINED EQUAL THAN ROW BLOCK SIZE)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descB[6] = 0; // initial process row(DEFINED 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descB[7] = 0; // initial process column (DEFINED 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;descB[8] = locR; // leading dimension of local array&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int il=0, jl=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;for(i=1; i&amp;lt; matrix_size+1; i++)&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; for(j=1; j&amp;lt; matrix_size+1; j++)&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int pi = p_of_i(i,block,nprow);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int li = l_of_i(i,block,nprow);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int xi = x_of_i(i,block,nprow);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//printf("i = %d, j = %d, pi = %d, li = %d\n",i,j,pi,li);;fflush(stdout);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int pj = p_of_i(j,block,npcol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int lj = l_of_i(j,block,npcol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int xj = x_of_i(j,block,npcol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//printf("i = %d, j = %d, pj = %d, lj = %d, xj = %d\n",i,j,pj,lj,xj);;fflush(stdout);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if( (pi == myrow) &amp;amp;&amp;amp; (pj == mycol))&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&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;il = li*block+xi;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;jl = lj*block+xj;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;local_matrix[getIndex(il-1, jl-1, locC)] = A[getIndex(i-1,j-1,matrix_size)];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if( &amp;nbsp;(pi == myrow) &amp;amp;&amp;amp;(mycol==0) &amp;nbsp;)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&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;local_know_vector[il-1] = B[i-1];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;////STARTING PDGESV&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;pdgesv_(&amp;amp;matrix_size, &amp;amp;nrhs, local_matrix, &amp;amp;myone, &amp;amp;myone, descA, ipiv, local_know_vector, &amp;amp;myone, &amp;amp;myone, descB, &amp;amp;info);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(rank==0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(info != 0) cout &amp;lt;&amp;lt;"PDGESV problem! Info "&amp;lt;&amp;lt;info&amp;lt;&amp;lt;endl;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;for(i=0; i&amp;lt; locR; i++)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;cout&amp;lt;&amp;lt;"**\n"&amp;lt;&amp;lt;"rank "&amp;lt;&amp;lt;rank&amp;lt;&amp;lt;" &amp;nbsp;answer: "&amp;lt;&amp;lt;local_know_vector&lt;I&gt;&amp;lt;&amp;lt;endl;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(NULL!=descA)&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; &amp;nbsp; &amp;nbsp;{delete [] descA; descA=NULL;}&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(NULL!=descB)&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; &amp;nbsp; &amp;nbsp;{delete [] descB; descB=NULL;}&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(NULL!=local_know_vector)&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{delete [] local_know_vector; local_know_vector=NULL;}&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(NULL!=local_matrix)&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{delete [] local_matrix; local_matrix=NULL;}&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(NULL!=Acpy)&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;{delete [] Acpy; Acpy=NULL;}&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(NULL!=Bcpy)&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;{delete [] Bcpy; Bcpy=NULL;}&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(NULL!=A)&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{delete [] A; A=NULL;}&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(NULL!=B)&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{delete [] B; B=NULL;}&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Cblacs_gridexit(ictxt);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;void find_nps(MKL_INT np, MKL_INT &amp;amp;nprow, MKL_INT &amp;amp; npcol)&amp;nbsp;&lt;BR /&gt;
	{&lt;/P&gt;

&lt;P&gt;MKL_INT min_nprow=100000;&lt;BR /&gt;
	MKL_INT min_npcol=100000;&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	nprow = np;&lt;BR /&gt;
	npcol = np;&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	while(1) {&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;npcol--;&lt;BR /&gt;
	&amp;nbsp; if(np%2==0 &amp;nbsp; ) {&lt;BR /&gt;
	&amp;nbsp; if(npcol ==1){&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;nprow --;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;npcol = nprow;&lt;BR /&gt;
	&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp; }else {&lt;BR /&gt;
	&amp;nbsp; if(npcol ==0){&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;nprow --;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;npcol = nprow;&lt;BR /&gt;
	&amp;nbsp; }&lt;/P&gt;

&lt;P&gt;&amp;nbsp; }&lt;/P&gt;

&lt;P&gt;&amp;nbsp; if(nprow*npcol == np) {&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; min_npcol = npcol;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; if(nprow &amp;lt; min_nprow) &amp;nbsp; &amp;nbsp;min_nprow = nprow;&lt;BR /&gt;
	&amp;nbsp; }&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; if(nprow ==1 ) break;&lt;/P&gt;

&lt;P&gt;}&lt;/P&gt;

&lt;P&gt;nprow = min_nprow;&lt;BR /&gt;
	npcol = min_npcol;&lt;/P&gt;

&lt;P&gt;}&lt;/P&gt;</description>
      <pubDate>Tue, 09 Dec 2014 11:48:31 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017628#M19562</guid>
      <dc:creator>Ajax_W_</dc:creator>
      <dc:date>2014-12-09T11:48:31Z</dc:date>
    </item>
    <item>
      <title>Hi </title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017629#M19563</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="line-height: 1.5; font-size: 1em;"&gt;I’ve corrected the example to properly define process grid and init MPI.&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;Now it works fine for any number of MPI processes. Attach here.&amp;nbsp;&lt;/P&gt;

&lt;P&gt;and&amp;nbsp;the article : &amp;nbsp;&lt;A href="https://software.intel.com/en-us/articles/using-cluster-mkl-pblasscalapack-fortran-routine-in-your-c-program/"&gt;https://software.intel.com/en-us/articles/using-cluster-mkl-pblasscalapack-fortran-routine-in-your-c-program/&lt;/A&gt;&amp;nbsp; had pdgemv sample code &lt;A href="https://community.intel.com/legacyfs/online/drupal_files/article/165948/pdgemv.c"&gt;https://software.intel.com/sites/default/files/article/165948/pdgemv.c&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;#include &amp;lt;mpi.h&amp;gt;&lt;BR /&gt;
	#include &amp;lt;iostream&amp;gt;&lt;BR /&gt;
	#include &amp;lt;vector&amp;gt;&lt;BR /&gt;
	#include &amp;lt;cmath&amp;gt;&lt;BR /&gt;
	#include &amp;lt;cstdlib&amp;gt;&lt;BR /&gt;
	//#include "Scalapack.h"&lt;BR /&gt;
	#include &amp;lt;mkl.h&amp;gt;&lt;BR /&gt;
	#include &amp;lt;mkl_scalapack.h&amp;gt;&lt;BR /&gt;
	#include "mkl_lapacke.h"&lt;BR /&gt;
	#include &amp;lt;mkl_cblas.h&amp;gt;&lt;/P&gt;

&lt;P&gt;#define mat(matriz,coluna,i,j) (matriz[i*coluna+j])&lt;/P&gt;

&lt;P&gt;#define p_of_i(i,bs,p) ( MKL_INT((i-1)/bs)%p)&lt;BR /&gt;
	#define l_of_i(i,bs,p) ( MKL_INT((i-1)/(p*bs)))&lt;BR /&gt;
	#define x_of_i(i,bs,p) (((i-1)%bs)+1)&lt;/P&gt;

&lt;P&gt;//#define&amp;nbsp;&amp;nbsp; numroc_&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NUMROC&lt;/P&gt;

&lt;P&gt;using namespace std;&lt;/P&gt;

&lt;P&gt;extern "C"&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* BLACS C interface */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; void Cblacs_pinfo(int* mypnum, int* nprocs);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; void Cblacs_get( MKL_INT context, MKL_INT request, MKL_INT* value);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp; Cblacs_gridinit( MKL_INT* context, char * order, MKL_INT np_row, MKL_INT np_col);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; void Cblacs_gridinfo( MKL_INT context, MKL_INT*&amp;nbsp; np_row, MKL_INT* np_col, MKL_INT*&amp;nbsp; my_row,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT*&amp;nbsp; my_col);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp; numroc_( MKL_INT *n, MKL_INT *nb, MKL_INT *iproc, MKL_INT *isrcproc, MKL_INT *nprocs);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; void Cblacs_gridexit(MKL_INT ictxt);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; void Cblacs_barrier(MKL_INT ictxt, char * order);&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;void find_nps(MKL_INT np, MKL_INT &amp;amp;nprow, MKL_INT &amp;amp; npcol);&lt;BR /&gt;
	int getIndex(MKL_INT row, MKL_INT col,MKL_INT NCOLS) {return row*NCOLS+col;}&lt;BR /&gt;
	/*&lt;BR /&gt;
	CTEST_Scalapack::CTEST_Scalapack(void)&lt;BR /&gt;
	{&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;CTEST_Scalapack::~CTEST_Scalapack(void)&lt;BR /&gt;
	{&lt;BR /&gt;
	}&lt;BR /&gt;
	*/&lt;/P&gt;

&lt;P&gt;int main(int argc, char ** argv)&lt;BR /&gt;
	{&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int nprocs = 0;//MPI::COMM_WORLD.Get_size();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; int rank = 0;//MPI::COMM_WORLD.Get_rank();&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MPI_Init(&amp;amp;argc,&amp;amp;argv);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MPI_Comm_size(MPI_COMM_WORLD,&amp;amp;nprocs);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MPI_Comm_rank(MPI_COMM_WORLD,&amp;amp;rank);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::cout&amp;lt;&amp;lt;"Returned: "&amp;lt;&amp;lt;" ";&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; std::endl;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; srand(1);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT myrow=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT mycol=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT ictxt=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT nprow=0,npcol=0;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT BLOCK_SIZE =2; //this gonna be tricky - should be 64, but cannot be larger than the original matrix&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT locR=0, locC=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT block = BLOCK_SIZE;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT izero = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT matrix_size = 9;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT myone = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT nrhs = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT info=0;&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; int i=0,j=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double mone=(-1.e0),pone=(1.e0);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double AnormF=0.e0, XnormF=0.e0, RnormF=0.e0, BnormF=0.e0, residF=0.e0,eps=0.e0;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; find_nps(nprocs,nprow,npcol);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cblacs_pinfo( &amp;amp;rank, &amp;amp;nprocs ) ;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; Cblacs_get(-1, 0, &amp;amp;ictxt);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; Cblacs_gridinit(&amp;amp;ictxt, "Row", nprow, npcol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; Cblacs_gridinfo(ictxt, &amp;amp;nprow, &amp;amp;npcol, &amp;amp;myrow, &amp;amp;mycol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; locR = numroc_(&amp;amp;matrix_size, &amp;amp;block, &amp;amp;myrow, &amp;amp;izero, &amp;amp;nprow);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; locC = numroc_(&amp;amp;matrix_size, &amp;amp;block, &amp;amp;mycol, &amp;amp;izero, &amp;amp;npcol);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; ////GLOBAL&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double * A = new double[matrix_size*matrix_size]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double * B = new double[matrix_size]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double * Acpy = new double[matrix_size*matrix_size]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double * Bcpy = new double[matrix_size]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; //LOCAL&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double * local_know_vector = new double[locR]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; double * local_matrix = new double[locR*locC]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT* ipiv = new MKL_INT [locC*locR*block+1000000]();&lt;/P&gt;

&lt;P&gt;&amp;nbsp;B[0] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; B[1] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; B[2] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; B[3] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; B[4] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; B[5] = 0;&lt;BR /&gt;
	&amp;nbsp;B[6] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; B[7] = 0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[0] = 19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[1] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[2] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[3] = 12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[4] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[5] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[6] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[7] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[8] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[9] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[10] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[11] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[12] = 12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[13] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[14] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[15] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[16] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[17] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[18] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[19] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[20] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[21] = 12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[22] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[23] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[24] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[25] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[26] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[27] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[28] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[29] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[30] = 12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[31] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[32] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[33] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[34] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[35] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[36] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[37] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[38] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[39] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[40] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[41] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[42] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[43] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[44] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[45] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[46] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[47] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[48] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[49] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[50] = 16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[51] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[52] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[53] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[54] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[55] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[56] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[57] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[58] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[59] = -16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[60] = 1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[61] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[62] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[63] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[64] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[65] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[66] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[67] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[68] = -16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[69] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[70] = 3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[71] = 11;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[72] = -19;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[73] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[74] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[75] = -12;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[76] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[77] = -16;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[78] = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[79] = -3;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; A[80] = 11;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT* descA&amp;nbsp; = new MKL_INT[9]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; MKL_INT* descB&amp;nbsp; = new MKL_INT[9]();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[0] = 1; // descriptor type&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[1] = ictxt; // blacs context&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[2] = matrix_size; // global number of rows&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[3] = matrix_size; // global number of columns&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[4] = block; // row block size&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[5] = block; // column block size (DEFINED EQUAL THAN ROW BLOCK SIZE)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[6] = 0; // initial process row(DEFINED 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[7] = 0; // initial process column (DEFINED 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descA[8] = locR; // leading dimension of local array&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[0] = 1; // descriptor type&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[1] = ictxt; // blacs context&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[2] = matrix_size; // global number of rows&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[3] = 1; // global number of columns&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[4] = block; // row block size&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[5] = block; // column block size (DEFINED EQUAL THAN ROW BLOCK SIZE)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[6] = 0; // initial process row(DEFINED 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[7] = 0; // initial process column (DEFINED 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; descB[8] = locR; // leading dimension of local array&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int il=0, jl=0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=1; i&amp;lt; matrix_size+1; i++)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j=1; j&amp;lt; matrix_size+1; j++)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pi = p_of_i(i,block,nprow);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int li = l_of_i(i,block,nprow);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int xi = x_of_i(i,block,nprow);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //printf("i = %d, j = %d, pi = %d, li = %d\n",i,j,pi,li);;fflush(stdout);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pj = p_of_i(j,block,npcol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int lj = l_of_i(j,block,npcol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int xj = x_of_i(j,block,npcol);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //printf("i = %d, j = %d, pj = %d, lj = %d, xj = %d\n",i,j,pj,lj,xj);;fflush(stdout);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( (pi == myrow) &amp;amp;&amp;amp; (pj == mycol))&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; il = li*block+xi;&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; jl = lj*block+xj;&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; local_matrix[getIndex(il-1, jl-1, locC)] = A[getIndex(i-1,j-1,matrix_size)];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(&amp;nbsp; (pi == myrow) &amp;amp;&amp;amp;(mycol==0)&amp;nbsp; )&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; local_know_vector[il-1] = B[i-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; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	//&amp;nbsp; above initialization code have some issue. in our sample, we use &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	for(i=0;i&amp;lt;locR;++i) for(j=0;j&amp;lt;locC;++j) {&lt;BR /&gt;
	&amp;nbsp; int gi = i%block + block*myrow + (i/block)*block*nprow;&lt;BR /&gt;
	&amp;nbsp; int gj = j%block + block*mycol + (j/block)*block*npcol;&lt;BR /&gt;
	&amp;nbsp; local_matrix[i + locR*j] = A[gi*matrix_size + gj]; // note: col-major &amp;lt;- row-major&lt;BR /&gt;
	&amp;nbsp; local_know_vector&lt;I&gt; = B[gi];&lt;BR /&gt;
	}&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ////STARTING PDGESV&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; pdgesv_(&amp;amp;matrix_size, &amp;amp;nrhs, local_matrix, &amp;amp;myone, &amp;amp;myone, descA, ipiv, local_know_vector, &amp;amp;myone, &amp;amp;myone, descB, &amp;amp;info);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(rank==0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(info != 0) cout &amp;lt;&amp;lt;"PDGESV problem! Info "&amp;lt;&amp;lt;info&amp;lt;&amp;lt;endl;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; locR; i++)&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp; int gi = i%block + block*myrow + (i/block)*block*nprow;&lt;BR /&gt;
	&amp;nbsp; if (mycol == 0) printf("res[ %i ]=%lg\n",gi,local_know_vector&lt;I&gt;);&lt;BR /&gt;
	}&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; //&amp;nbsp; for(i=0; i&amp;lt; locR; i++)&lt;BR /&gt;
	&amp;nbsp; //&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp; //&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"**\n"&amp;lt;&amp;lt;"rank "&amp;lt;&amp;lt;rank&amp;lt;&amp;lt;"&amp;nbsp; answer: "&amp;lt;&amp;lt;local_know_vector&lt;I&gt;&amp;lt;&amp;lt;endl;&lt;BR /&gt;
	&amp;nbsp; //&amp;nbsp; }&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=descA)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] descA; descA=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=descB)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] descB; descB=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=local_know_vector)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] local_know_vector; local_know_vector=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=local_matrix)&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; {delete [] local_matrix; local_matrix=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=Acpy)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] Acpy; Acpy=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=Bcpy)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] Bcpy; Bcpy=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=A)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] A; A=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NULL!=B)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {delete [] B; B=NULL;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cblacs_gridexit(ictxt);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;

&lt;P&gt;}&lt;/P&gt;

&lt;P&gt;void find_nps(MKL_INT np, MKL_INT &amp;amp;nprow, MKL_INT &amp;amp; npcol)&lt;BR /&gt;
	{&lt;BR /&gt;
	#if 1&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; nprow = (int)sqrt( np );&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; npcol = np / nprow;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/P&gt;

&lt;P&gt;#else&lt;/P&gt;

&lt;P&gt;MKL_INT min_nprow=100000;&lt;BR /&gt;
	MKL_INT min_npcol=100000;&lt;/P&gt;

&lt;P&gt;nprow = np;&lt;BR /&gt;
	npcol = np;&lt;/P&gt;

&lt;P&gt;while(1) {&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; npcol--;&lt;BR /&gt;
	&amp;nbsp; if(np%2==0&amp;nbsp;&amp;nbsp; ) {&lt;BR /&gt;
	&amp;nbsp; if(npcol ==1){&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; nprow --;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; npcol = nprow;&lt;BR /&gt;
	&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp; }else {&lt;BR /&gt;
	&amp;nbsp; if(npcol ==0){&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; nprow --;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; npcol = nprow;&lt;BR /&gt;
	&amp;nbsp; }&lt;/P&gt;

&lt;P&gt;&amp;nbsp; }&lt;/P&gt;

&lt;P&gt;&amp;nbsp; if(nprow*npcol == np) {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; min_npcol = npcol;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if(nprow &amp;lt; min_nprow)&amp;nbsp;&amp;nbsp;&amp;nbsp; min_nprow = nprow;&lt;BR /&gt;
	&amp;nbsp; }&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(nprow ==1 ) break;&lt;/P&gt;

&lt;P&gt;}&lt;/P&gt;

&lt;P&gt;nprow = min_nprow;&lt;BR /&gt;
	npcol = min_npcol;&lt;BR /&gt;
	#endif&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 31 Dec 2014 05:27:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017629#M19563</guid>
      <dc:creator>Ying_H_Intel</dc:creator>
      <dc:date>2014-12-31T05:27:00Z</dc:date>
    </item>
    <item>
      <title>Hi Ying,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017630#M19564</link>
      <description>&lt;P style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;Hi Ying,&lt;/P&gt;

&lt;P style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;I ran your code on NERSC Cori supercomputer, but I got the error information:&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;&lt;SPAN class="s1" style="box-sizing: border-box;"&gt;Returned:&amp;nbsp; Hello World! I am 0 of 2&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;&lt;SPAN class="s1" style="box-sizing: border-box;"&gt;Returned:&amp;nbsp; Hello World! I am 1 of 2&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;&lt;SPAN class="s1" style="box-sizing: border-box;"&gt;Rank 0 [Wed Jan 13 12:23:10 2016] [c0-0c0s8n3] Fatal error in MPI_Send: Invalid tag, error stack:&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;&lt;SPAN class="s1" style="box-sizing: border-box;"&gt;MPI_Send(186): MPI_Send(buf=0x139d640, count=2, MPI_INT, dest=1, tag=5000000, comm=0x84000001) failed&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;&lt;SPAN class="s1" style="box-sizing: border-box;"&gt;MPI_Send(111): Invalid tag, value is 5000000&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;&lt;SPAN class="s1" style="box-sizing: border-box;"&gt;Rank 1 [Wed Jan 13 12:23:10 2016] [c0-0c0s9n0] Fatal error in MPI_Recv: Invalid tag, error stack:&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;&lt;SPAN class="s1" style="box-sizing: border-box;"&gt;MPI_Recv(199): MPI_Recv(buf=0x139b5c0, count=2, MPI_INT, src=0, tag=5000000, comm=0x84000001, status=0x7fffffff5618) failed&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;&lt;SPAN class="s1" style="box-sizing: border-box;"&gt;MPI_Recv(118): Invalid tag, value is 5000000&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;&lt;SPAN class="s1" style="box-sizing: border-box;"&gt;srun: error: nid00035: task 0: Aborted&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;&lt;SPAN class="s1" style="box-sizing: border-box;"&gt;srun: Terminating job step 929053.0&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;&lt;SPAN class="s1" style="box-sizing: border-box;"&gt;srun: Job step aborted: Waiting up to 32 seconds for job step to finish.&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;&lt;SPAN class="s1" style="box-sizing: border-box;"&gt;srun: error: nid00036: task 1: Aborted&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1" style="box-sizing: border-box; margin-bottom: 1.06667em; line-height: 1.4; max-width: 700px; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px;"&gt;Could you help me?&lt;/P&gt;</description>
      <pubDate>Thu, 14 Jan 2016 05:59:32 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017630#M19564</guid>
      <dc:creator>Yang_Y_2</dc:creator>
      <dc:date>2016-01-14T05:59:32Z</dc:date>
    </item>
    <item>
      <title>Hi Yang, </title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017631#M19565</link>
      <description>&lt;P&gt;Hi Yang,&amp;nbsp;&lt;/P&gt;

&lt;P&gt;Could you also show your compile command and run command, MPI version, MKL version etc information?&amp;nbsp;&lt;/P&gt;

&lt;P&gt;There was some MPI sample in MKL install directory, could you please try them first and see if mkl work fine on the supercomputer?&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;Best Regards,&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;Ying&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Jan 2016 07:55:38 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017631#M19565</guid>
      <dc:creator>Ying_H_Intel</dc:creator>
      <dc:date>2016-01-14T07:55:38Z</dc:date>
    </item>
    <item>
      <title>Hi Ying,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017632#M19566</link>
      <description>&lt;P&gt;Hi Ying,&lt;/P&gt;

&lt;P&gt;I'm using the NERSC cori supercomputer, all the information is at:&lt;/P&gt;

&lt;P&gt;&lt;A href="http://www.nersc.gov/users/computational-systems/cori/" target="_blank"&gt;http://www.nersc.gov/users/computational-systems/cori/&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;The compile command is:&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;source /opt/intel/bin/compilervars.sh intel64&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;source /opt/intel/impi/5.0.2.044/bin64/mpivars.sh&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;CC -o execute pdgesv.cpp -mkl:cluster&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;The run command is sbatch test.sl&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;where test.sl is&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;#!/bin/bash -l&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;#SBATCH --partition debug&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;#SBATCH --nodes 2&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;#SBATCH --time=00:03:00&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;cd $SLURM_SUBMIT_DIR&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;srun -n 2 ./execute;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 15 Jan 2016 00:53:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017632#M19566</guid>
      <dc:creator>Yang_Y_2</dc:creator>
      <dc:date>2016-01-15T00:53:00Z</dc:date>
    </item>
    <item>
      <title>Hi Yang,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017633#M19567</link>
      <description>&lt;P&gt;Hi Yang,&lt;/P&gt;

&lt;P&gt;You are probably using Cray MPI that does not support tags having large value. MKL used to use such tags internally. Now the issue is fixed, and if you use a recent MKL version (e.g. MKL 11.3.1) the test should pass.&lt;/P&gt;

&lt;P&gt;Alternatively, it should work with Intel MPI.&lt;/P&gt;

&lt;P&gt;Thanks&lt;BR /&gt;
	Dima&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 15 Jan 2016 06:32:30 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017633#M19567</guid>
      <dc:creator>Dmitry_B_Intel</dc:creator>
      <dc:date>2016-01-15T06:32:30Z</dc:date>
    </item>
    <item>
      <title>If I change the number of</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017634#M19568</link>
      <description>&lt;P&gt;If I change the number of processes, the solution of linear equation will be different. Also, the solutions of this code is different from the Matlab solution. Let us solve the linear equation Ax = b&lt;/P&gt;

&lt;P&gt;A is&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; 19 &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;12 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;16 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; &amp;nbsp;11&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;-19 &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;12 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;16 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; &amp;nbsp;11&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;-19 &amp;nbsp; &amp;nbsp;-3 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;12 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;16 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; &amp;nbsp;11&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;-19 &amp;nbsp; &amp;nbsp;-3 &amp;nbsp; &amp;nbsp;-1 &amp;nbsp; &amp;nbsp;12 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;16 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; &amp;nbsp;11&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;-19 &amp;nbsp; &amp;nbsp;-3 &amp;nbsp; &amp;nbsp;-1 &amp;nbsp; -12 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;16 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; &amp;nbsp;11&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;-19 &amp;nbsp; &amp;nbsp;-3 &amp;nbsp; &amp;nbsp;-1 &amp;nbsp; -12 &amp;nbsp; &amp;nbsp;-1 &amp;nbsp; &amp;nbsp;16 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; &amp;nbsp;11&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;-19 &amp;nbsp; &amp;nbsp;-3 &amp;nbsp; &amp;nbsp;-1 &amp;nbsp; -12 &amp;nbsp; &amp;nbsp;-1 &amp;nbsp; -16 &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; &amp;nbsp;11&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;-19 &amp;nbsp; &amp;nbsp;-3 &amp;nbsp; &amp;nbsp;-1 &amp;nbsp; -12 &amp;nbsp; &amp;nbsp;-1 &amp;nbsp; -16 &amp;nbsp; &amp;nbsp;-1 &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; &amp;nbsp;11&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;-19 &amp;nbsp; &amp;nbsp;-3 &amp;nbsp; &amp;nbsp;-1 &amp;nbsp; -12 &amp;nbsp; &amp;nbsp;-1 &amp;nbsp; -16 &amp;nbsp; &amp;nbsp;-1 &amp;nbsp; &amp;nbsp;-3 &amp;nbsp; &amp;nbsp;11&lt;/P&gt;

&lt;P&gt;b is&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;/P&gt;

&lt;P&gt;If we use Matlab, the solution is:&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;-0.1667&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; 0.5000&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;/P&gt;

&lt;P&gt;If we use this code for one process, the solution is:&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[0]: 0.000000&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[1]: 0.000000&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[2]: 0.500000&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[3]: -0.500000&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[4]: -0.000000&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[5]: -0.000000&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[6]: 0.000000&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[7]: -0.000000&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[8]: -0.000000&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN style="font-size: 13.008px; line-height: 19.512px;"&gt;If we use this code for two processes, the solution is:&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[0]: 0.003434&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[1]: 0.016138&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[2]: 0.019397&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[3]: 0.033449&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[4]: -0.025858&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[5]: 0.013383&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[6]: 0.022018&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[7]: -0.060255&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[8]: 0.025895&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN style="font-size: 13.008px; line-height: 19.512px;"&gt;If we use this code for three processes, the solution is:&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;answer[0]: -0.023551&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[1]: 0.017566&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[2]: 0.004775&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[3]: 0.004377&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[4]: 0.023704&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[5]: 0.027967&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[6]: -0.023534&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[7]: 0.017509&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;answer[8]: 0.000398&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;Can you tell me where went wrong? How can I get the correct solution by this code?&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 20 Feb 2016 18:41:03 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017634#M19568</guid>
      <dc:creator>Yang_Y_2</dc:creator>
      <dc:date>2016-02-20T18:41:03Z</dc:date>
    </item>
    <item>
      <title>The matrix should be</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017635#M19569</link>
      <description>&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;The matrix should be distributed correctly. For example, consider distribution of rows. Let N be global number of rows, LOCR the local number of rows as obtained with a call to numroc(), B the block size, p my processor row, P the number of processor rows. Then for locn = 0...LOCR-1 the global index n=0...N-1 &amp;nbsp;is computed thus:&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;n = locn % B // offset within current block (block locn/B)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;&amp;nbsp;+ B*p &amp;nbsp; // offset of the current block within current cycle of block-cyclic distribution&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;+ P*B*(locn/B) &amp;nbsp; // offset of the current cycle on the grid of P processors&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;;&lt;/SPAN&gt;&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;

&lt;P&gt;Once you know (i,j) for (loci,locj) you can initialize local_matrix[loci + locR*locj] = A[i + matrix_size*j].&amp;nbsp;&lt;SPAN style="font-size: 13.008px; line-height: 19.512px;"&gt;Please note that ScaLAPACK supports only column-major ordering of matrices.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;That is, local matrix element (i,j) should be located at offset i+locR*j, not at i*locC + j,&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;I hope this will help you.&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;Thanks&lt;BR /&gt;
	Dima&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 24 Feb 2016 10:38:40 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017635#M19569</guid>
      <dc:creator>Dmitry_B_Intel</dc:creator>
      <dc:date>2016-02-24T10:38:40Z</dc:date>
    </item>
    <item>
      <title>Hi Dima,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017636#M19570</link>
      <description>&lt;P&gt;Hi Dima,&lt;/P&gt;

&lt;P&gt;Thank you much for the correction.&amp;nbsp;&lt;/P&gt;

&lt;P&gt;The proper&amp;nbsp;code for initialization of local matrix&amp;nbsp;should be inserted before the call of pdgesv:&amp;nbsp; ( I will reedit the above of the code)&lt;/P&gt;

&lt;P&gt;for(i=0;i&amp;lt;locR;++i) for(j=0;j&amp;lt;locC;++j) {&lt;/P&gt;

&lt;P style="margin-left: 36pt;"&gt;&amp;nbsp; int gi = i%block + block*myrow + (i/block)*block*nprow;&lt;/P&gt;

&lt;P style="margin-left: 36pt;"&gt;&amp;nbsp; int gj = j%block + block*mycol + (j/block)*block*npcol;&lt;/P&gt;

&lt;P style="margin-left: 36pt;"&gt;&amp;nbsp; local_matrix[i + locR*j] = A[gi*matrix_size + gj]; // note: col-major &amp;lt;- row-major&lt;/P&gt;

&lt;P style="margin-left: 36pt;"&gt;&amp;nbsp; local_know_vector&lt;I&gt; = B[gi];&lt;/I&gt;&lt;/P&gt;

&lt;P style="margin-left: 36pt;"&gt;}&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;The solution can be gathered to some rank, or it can be just printed:&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P style="margin-left: 36pt;"&gt;for (i = 0; i &amp;lt; locR; i++)&lt;/P&gt;

&lt;P style="margin-left: 36pt;"&gt;{&lt;/P&gt;

&lt;P style="margin-left: 36pt;"&gt;&amp;nbsp; int gi = i%block + block*myrow + (i/block)*block*nprow;&lt;/P&gt;

&lt;P style="margin-left: 36pt;"&gt;&amp;nbsp; if (mycol == 0) printf("res[ %i ]=%lg\n",gi,local_know_vector&lt;I&gt;);&lt;/I&gt;&lt;/P&gt;

&lt;P style="margin-left: 36pt;"&gt;}&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;Here are a few runs:&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;$ mpirun -np 1 --prepend-rank ./a.out | sort -k2&lt;/P&gt;

&lt;P&gt;[0] res[ 0 ]=0&lt;/P&gt;

&lt;P&gt;[0] res[ 1 ]=-0.166667&lt;/P&gt;

&lt;P&gt;[0] res[ 2 ]=0.5&lt;/P&gt;

&lt;P&gt;[0] res[ 3 ]=0&lt;/P&gt;

&lt;P&gt;[0] res[ 4 ]=0&lt;/P&gt;

&lt;P&gt;[0] res[ 5 ]=0&lt;/P&gt;

&lt;P&gt;[0] res[ 6 ]=0&lt;/P&gt;

&lt;P&gt;[0] res[ 7 ]=0&lt;/P&gt;

&lt;P&gt;[0] res[ 8 ]=0&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;$ mpirun -np 4 --prepend-rank ./a.out | sort -k2&lt;/P&gt;

&lt;P&gt;[0] res[ 0 ]=0&lt;/P&gt;

&lt;P&gt;[0] res[ 1 ]=-0.166667&lt;/P&gt;

&lt;P&gt;[2] res[ 2 ]=0.5&lt;/P&gt;

&lt;P&gt;[2] res[ 3 ]=0&lt;/P&gt;

&lt;P&gt;[0] res[ 4 ]=0&lt;/P&gt;

&lt;P&gt;[0] res[ 5 ]=0&lt;/P&gt;

&lt;P&gt;[2] res[ 6 ]=0&lt;/P&gt;

&lt;P&gt;[2] res[ 7 ]=0&lt;/P&gt;

&lt;P&gt;[0] res[ 8 ]=0&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;Thanks&lt;/P&gt;

&lt;P&gt;Ying&lt;/P&gt;</description>
      <pubDate>Thu, 25 Feb 2016 06:59:50 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017636#M19570</guid>
      <dc:creator>Ying_H_Intel</dc:creator>
      <dc:date>2016-02-25T06:59:50Z</dc:date>
    </item>
    <item>
      <title>Thank you, Dima and Ying, it</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017637#M19571</link>
      <description>&lt;P&gt;Thank you,&amp;nbsp;&lt;SPAN style="font-size: 12px; line-height: 18px;"&gt;Dima and Ying, it works very well :-)&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 17 Mar 2016 02:41:21 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Scalapack-Please-Help-with-using-pdgesv/m-p/1017637#M19571</guid>
      <dc:creator>Yang_Y_2</dc:creator>
      <dc:date>2016-03-17T02:41:21Z</dc:date>
    </item>
  </channel>
</rss>

