The LAPACK forum has moved to https://github.com/Reference-LAPACK/lapack/discussions.

2-D block cyclic distribution

Open discussion regarding features, bugs, issues, vendors, etc.

2-D block cyclic distribution

Postby alex » Wed Feb 20, 2008 5:51 pm

Hi,

I am wondering if my 2-D block cyclic distribution is correct, which I need for the pdgemm routine.

In the ScaLapack user's guide, the following is mentioned:
"Every process owns a collection of blocks, which are contiguously stored by column in a two-dimensional ``column major'' array."

Is this manner of storage only true for Fortaran code?
or is it also true for C code?

I am a C user and I am using the following code to make a 2-D block cyclic distribution of two matrices A and B of size n*n each. Would you tell me if it is a good distribution

Code: Select all
if(mycol==0 && myrow==0)

{

 if(n%nb==0)

   blocks=n/nb;

 else

   blocks=n/nb+1;

         

 for(rowproc=0;rowproc<nprow;rowproc++)            

  for(colproc=0;colproc<npcol;colproc++)

  {

   rows=numroc_(&n,&nb,&rowproc,&zero,&nprow);

   cols=numroc_(&n,&nb,&colproc,&zero,&npcol);

            

   for(jstart=colproc*nb,cb=colproc,jl=0;cb<blocks;cb+=nprow,jstart+=npcol*nb)

    for(k2=0;k2<nb && k2+jstart<n;k2++,jl++)

     for(istart=rowproc*nb,rb=rowproc,il=0;rb<blocks;rb+=nprow,istart+=nprow*nb)

      for(k1=0;k1<nb && k1+istart<n;k1++,il++)

       if(rowproc!=0||colproc!=0)

   {               

    SA[jl*rows+il]=A[(jstart+k2)*n+(istart+k1)];

    SB[jl*rows+il]=B[(jstart+k2)*n+(istart+k1)];

   }

       else

   {

    myA[jl*rows+il]=A[(jstart+k2)*n+(istart+k1)];

    myB[jl*rows+il]=B[(jstart+k2)*n+(istart+k1)];

   }

   

   if(rowproc!=0||colproc!=0)

    {

     Cdgesd2d(ictxt,rows,cols,SA,rows,rowproc,colproc);

     Cdgesd2d(ictxt,rows,cols,SB,rows,rowproc,colproc);

    }

  }

}

else

{

 rows=numroc_(&n,&nb,&myrow,&zero,&nprow);

 cols=numroc_(&n,&nb,&mycol,&zero,&npcol);

 Cdgerv2d(ictxt,rows,cols,myA,rows,0,0);

 Cdgerv2d(ictxt,rows,cols,myB,rows,0,0);

}


Thanks in advance

alex
alex
 
Posts: 8
Joined: Sun Jan 27, 2008 8:58 pm

Return to User Discussion

Who is online

Users browsing this forum: No registered users and 4 guests