[petsc-users] on the data size problem

Hongliang Lu honglianglu87 at gmail.com
Wed Aug 19 10:51:07 CDT 2015


Dear all,
I am trying to implement a BFS algorithm using Petsc, and I have tested my
code on a graph of 5 nodes, but when I tested on a larger graph, which size
is 5000 nodes, the program went wrong, and ca not finished, could some on
help me out? thank you very much!!!!!
I tried to run the following code in a cluster with 10 nodes.

*int main(int argc,char **args)*
*{*
*        Vec         curNodes,tmp;*
*        Mat         oriGraph;*
* PetscInt rows, cols;*
* PetscScalar one=1;*
* PetscScalar nodeVecSum=1;*
*        char
filein[PETSC_MAX_PATH_LEN],fileout[PETSC_MAX_PATH_LEN],buf[PETSC_MAX_PATH_LEN];*
*        PetscViewer fd;*
*        PetscInitialize(&argc,&args,(char *)0,help);*

*
PetscOptionsGetString(PETSC_NULL,"-fin",filein,PETSC_MAX_PATH_LEN-1,PETSC_NULL);*
*        PetscViewerBinaryOpen(PETSC_COMM_WORLD,filein,FILE_MODE_READ,&fd);*
*        MatCreate(PETSC_COMM_WORLD,&oriGraph);*

*        MatLoad(oriGraph,fd);*
* MatGetSize(oriGraph,&rows,&cols);*
* MatSetOption(oriGraph,MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE);*
* MatSetUp(oriGraph);*
* VecCreate(PETSC_COMM_WORLD,&curNodes);*
* VecSetSizes(curNodes,PETSC_DECIDE,rows);*
* VecSetFromOptions(curNodes);*
* VecCreate(PETSC_COMM_WORLD,&tmp);*
* VecSetSizes(tmp,PETSC_DECIDE,rows);*
* VecSetFromOptions(tmp);*
* VecZeroEntries(tmp);*
* srand(time(0));*
* PetscInt node=rand()%rows;*
* PetscPrintf(PETSC_COMM_SELF,"The node ID is: %d \n",node);*
* VecSetValues(curNodes,1,&node,&one,INSERT_VALUES);*
* VecAssemblyBegin(curNodes);*
* VecAssemblyEnd(curNodes); *

*        PetscViewerDestroy(&fd);*

* const PetscInt    *colsv;*
*        const PetscScalar *valsv;*
*        PetscInt ncols,i,zero=0;*
* PetscInt iter=0;*

* nodeVecSum=1;*
* for(;iter<10;iter++)*
* { *
* VecAssemblyBegin(curNodes);*
* VecAssemblyEnd(curNodes);*
* MatMult(oriGraph,curNodes,tmp);*
* VecAssemblyBegin(tmp);*
* VecAssemblyEnd(tmp);*
* VecSum(tmp,&nodeVecSum);*
* PetscPrintf(PETSC_COMM_SELF,"There are neighbors: %d
\n",(int)nodeVecSum);*
* VecSum(curNodes,&nodeVecSum);*
* if(nodeVecSum<1)*
* break;*

* PetscScalar y;*
*        PetscInt indices;*
* PetscInt n,m,rstart,rend;*
* IS isrow;*
* Mat curMat;*
* MatGetLocalSize(oriGraph,&n,&m);*
* MatGetOwnershipRange(oriGraph,&rstart,&rend);*
* ISCreateStride(PETSC_COMM_SELF,n,rstart,1,&isrow);*
* MatGetSubMatrix(oriGraph,isrow,NULL,MAT_INITIAL_MATRIX,&curMat);*
* MatGetSize(curMat,&n,&m);*
* for(i=rstart;i<rend;i++)*
* {*
* indices=i;*
* VecGetValues(curNodes,1,&indices,&y);*
* if(y>0){*
*        MatGetRow(oriGraph,indices,&ncols,&colsv,&valsv);*
*        PetscScalar *v,zero=0;*
*        PetscMalloc1(cols,&v);*
*        for(int j=0;j<ncols;j++){*
*                v[j]=zero;*
* }*
* MatSetValues(oriGraph,1,&indices,ncols,colsv,v,INSERT_VALUES);*
* PetscFree(v);*
*        }*

* }*
* MatAssemblyBegin(oriGraph,MAT_FINAL_ASSEMBLY);*
*                MatAssemblyEnd(oriGraph,MAT_FINAL_ASSEMBLY);*
* ISDestroy(&isrow);*
* MatDestroy(&curMat);*
* VecCopy(tmp,curNodes);*
* VecAssemblyBegin(curNodes);*
* VecAssemblyEnd(curNodes);*
* }*
* PetscPrintf(PETSC_COMM_SELF,"Finished in iterations of: %d\n",iter);*
*        MatDestroy(&oriGraph);*
*        VecDestroy(&curNodes);*
* VecDestroy(&tmp);*
*        PetscFinalize();*
*        return 0;*
*}*
*The Petsc version I have installed is 3.6.1. *
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20150819/3ef49ad2/attachment.html>


More information about the petsc-users mailing list