<div dir="ltr">Dear all,<div>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!!!!!</div><div>I tried to run the following code in a cluster with 10 nodes.</div><div><br></div><div><div><i>int main(int argc,char **args)</i></div><div><i>{</i></div><div><i>        Vec         curNodes,tmp;</i></div><div><i>        Mat         oriGraph;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">   </span>PetscInt rows, cols;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">      </span>PetscScalar one=1;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>PetscScalar nodeVecSum=1;</i></div><div><i>        char filein[PETSC_MAX_PATH_LEN],fileout[PETSC_MAX_PATH_LEN],buf[PETSC_MAX_PATH_LEN];</i></div><div><i>        PetscViewer fd;</i></div><div><i>        PetscInitialize(&argc,&args,(char *)0,help);</i></div><div><i><br></i></div><div><i>        PetscOptionsGetString(PETSC_NULL,"-fin",filein,PETSC_MAX_PATH_LEN-1,PETSC_NULL);</i></div><div><i>        PetscViewerBinaryOpen(PETSC_COMM_WORLD,filein,FILE_MODE_READ,&fd);</i></div><div><i>        MatCreate(PETSC_COMM_WORLD,&oriGraph);</i></div><div><i><br></i></div><div><i>        MatLoad(oriGraph,fd);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>MatGetSize(oriGraph,&rows,&cols);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>MatSetOption(oriGraph,MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">       </span>MatSetUp(oriGraph);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">       </span>VecCreate(PETSC_COMM_WORLD,&curNodes);</i></div><div><span class="Apple-tab-span" style="white-space:pre"><i>        </i></span></div><div><i><span class="Apple-tab-span" style="white-space:pre">  </span>VecSetSizes(curNodes,PETSC_DECIDE,rows);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">  </span>VecSetFromOptions(curNodes);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">      </span>VecCreate(PETSC_COMM_WORLD,&tmp);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">     </span>VecSetSizes(tmp,PETSC_DECIDE,rows);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">       </span>VecSetFromOptions(tmp);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">   </span>VecZeroEntries(tmp);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">      </span>srand(time(0));</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">   </span>PetscInt node=rand()%rows;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>PetscPrintf(PETSC_COMM_SELF,"The node ID is: %d \n",node);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">      </span>VecSetValues(curNodes,1,&node,&one,INSERT_VALUES);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>VecAssemblyBegin(curNodes);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">       </span>VecAssemblyEnd(curNodes);<span class="Apple-tab-span" style="white-space:pre">   </span></i></div><div><i><br></i></div><div><i>        PetscViewerDestroy(&fd);</i></div><div><i><br></i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>const PetscInt    *colsv;</i></div><div><i>        const PetscScalar *valsv;</i></div><div><i>        PetscInt ncols,i,zero=0;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">  </span>PetscInt iter=0;</i></div><div><i><br></i></div><div><i><span class="Apple-tab-span" style="white-space:pre">      </span>nodeVecSum=1;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">     </span>for(;iter<10;iter++)</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">   </span>{<span class="Apple-tab-span" style="white-space:pre">   </span></i></div><div><i><span class="Apple-tab-span" style="white-space:pre">          </span>VecAssemblyBegin(curNodes);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">               </span>VecAssemblyEnd(curNodes);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">         </span>MatMult(oriGraph,curNodes,tmp);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">           </span>VecAssemblyBegin(tmp);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">            </span>VecAssemblyEnd(tmp);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">              </span>VecSum(tmp,&nodeVecSum);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">              </span>PetscPrintf(PETSC_COMM_SELF,"There are neighbors: %d \n",(int)nodeVecSum);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">              </span>VecSum(curNodes,&nodeVecSum);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">         </span>if(nodeVecSum<1)</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                       </span>break;</i></div><div><i><br></i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                </span>PetscScalar y;</i></div><div><i>        <span class="Apple-tab-span" style="white-space:pre">        </span>PetscInt indices;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">         </span>PetscInt n,m,rstart,rend;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">         </span>IS isrow;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">         </span>Mat curMat;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">               </span>MatGetLocalSize(oriGraph,&n,&m);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">          </span>MatGetOwnershipRange(oriGraph,&rstart,&rend);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">             </span>ISCreateStride(PETSC_COMM_SELF,n,rstart,1,&isrow);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">            </span>MatGetSubMatrix(oriGraph,isrow,NULL,MAT_INITIAL_MATRIX,&curMat);</i></div><div><span class="Apple-tab-span" style="white-space:pre"><i>              </i></span></div><div><i><span class="Apple-tab-span" style="white-space:pre">          </span>MatGetSize(curMat,&n,&m);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">         </span>for(i=rstart;i<rend;i++)</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">               </span>{</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                 </span>indices=i;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                        </span>VecGetValues(curNodes,1,&indices,&y);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                     </span>if(y>0){</i></div><div><i>        <span class="Apple-tab-span" style="white-space:pre">                   </span>MatGetRow(oriGraph,indices,&ncols,&colsv,&valsv);</i></div><div><i>        <span class="Apple-tab-span" style="white-space:pre">                 </span>PetscScalar *v,zero=0;</i></div><div><i>        <span class="Apple-tab-span" style="white-space:pre">                        </span>PetscMalloc1(cols,&v);</i></div><div><i>        <span class="Apple-tab-span" style="white-space:pre">                    </span>for(int j=0;j<ncols;j++){</i></div><div><i>               <span class="Apple-tab-span" style="white-space:pre">                               </span>v[j]=zero;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                                </span>}</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                         </span>MatSetValues(oriGraph,1,&indices,ncols,colsv,v,INSERT_VALUES);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                                </span>PetscFree(v);</i></div><div><span class="Apple-tab-span" style="white-space:pre"><i>                             </i></span></div><div><i>        <span class="Apple-tab-span" style="white-space:pre">              </span>}</i></div><div><i><br></i></div><div><i><span class="Apple-tab-span" style="white-space:pre">             </span>}</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">         </span>MatAssemblyBegin(oriGraph,MAT_FINAL_ASSEMBLY);</i></div><div><i>                MatAssemblyEnd(oriGraph,MAT_FINAL_ASSEMBLY);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">              </span>ISDestroy(&isrow);</i></div><div><span class="Apple-tab-span" style="white-space:pre"><i>            </i></span></div><div><i><span class="Apple-tab-span" style="white-space:pre">          </span>MatDestroy(&curMat);</i></div><div><span class="Apple-tab-span" style="white-space:pre"><i>          </i></span></div><div><i><span class="Apple-tab-span" style="white-space:pre">          </span>VecCopy(tmp,curNodes);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">            </span>VecAssemblyBegin(curNodes);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">               </span>VecAssemblyEnd(curNodes);</i></div><div><span class="Apple-tab-span" style="white-space:pre"><i>         </i></span></div><div><i><span class="Apple-tab-span" style="white-space:pre">  </span>}</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>PetscPrintf(PETSC_COMM_SELF,"Finished in iterations of: %d\n",iter);</i></div><div><i>        MatDestroy(&oriGraph);</i></div><div><i>        VecDestroy(&curNodes);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">    </span>VecDestroy(&tmp);</i></div><div><i>        PetscFinalize();</i></div><div><i>        return 0;</i></div><div><i>}</i></div></div><div><i>The Petsc version I have installed is 3.6.1. </i></div><div><br></div><div><br></div></div>