<div dir="ltr"><div dir="ltr">On Mon, Sep 14, 2020 at 8:27 AM <<a href="mailto:teivml@gmail.com">teivml@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Dear Petsc users,<br><br>I would like to confirm that the asynchronous calculation of the vector norm is faster than the synchronous calculation with the following code.<div><br><div><br></div><div><font color="#0000ff">PetscLogDouble tt1,tt2;    <br>  ierr = VecSet(c,one);<br> ierr = VecSet(u,one);<br> ierr = VecSet(b,one);<br><br>       ierr = KSPCreate(PETSC_COMM_WORLD,&ksp); CHKERRQ(ierr);<br>   ierr = KSP_MatMult(ksp,A,x,Ax); CHKERRQ(ierr);<br><br><br>ierr = PetscTime(&tt1);CHKERRQ(ierr);<br><br>       ierr = VecNormBegin(u,NORM_2,&norm1);<br>     ierr = PetscCommSplitReductionBegin(PetscObjectComm((PetscObject)Ax)); <br>       ierr = KSP_MatMult(ksp,A,c,Ac); <br>      ierr = VecNormEnd(u,NORM_2,&norm1);<br><br><br> ierr = PetscTime(&tt2);CHKERRQ(ierr);<br> ierr = PetscPrintf(PETSC_COMM_WORLD, "The time used for the asynchronous calculation: %f\n",tt2-tt1); CHKERRQ(ierr);<br>    ierr = PetscPrintf(PETSC_COMM_WORLD,"+ |u| =  %g\n",(double) norm1); CHKERRQ(ierr);<br><br><br> ierr = PetscTime(&tt1);CHKERRQ(ierr);<br>       ierr = VecNorm(b,NORM_2,&norm2); CHKERRQ(ierr);<br>   ierr = KSP_MatMult(ksp,A,c,Ac); <br><br><br>ierr = PetscTime(&tt2);CHKERRQ(ierr);<br>ierr = PetscPrintf(PETSC_COMM_WORLD, "The time used for the synchronous calculation: %f\n",tt2-tt1); CHKERRQ(ierr);<br>        ierr = PetscPrintf(PETSC_COMM_WORLD,"+ |b| =  %g\n",(double) norm2); CHKERRQ(ierr);<br></font></div><div><font color="#0000ff"><br></font></div><div><br></div><div>This code computes a matrix-vector product and a vector norm asynchronously and synchronously.<br><br>The calculation is carried out on a single node PC with a Xeon CPU.<br>The result of the code above shows that the synchronous calculation is faster than the asynchronous calculation. The MPI library is MPICH 3.3 and the parallel number is n = 20.<br><br><font color="#0000ff">The time used for the asynchronous calculation: 0.001622 <br>+ |u| =  100.<br>The time used for the synchronous calculation: 0.000062 <br>+ |b| =  100.</font><br><br><br>Is there anything I should consider in order to properly take advantage of the Petsc's asynchronous progress?</div></div></div></blockquote><div><br></div><div>There is overhead in the asynchronous calculation. In order to see improvement, you would have to be running</div><div>an example for which communication time was larger (hopefully significantly) than this overhead. Second, if the</div><div>computation is perfectly load balanced, this also makes it harder to see improvement for reducing synchronizations.</div><div>A single node is unlikely to benefit from any of this stuff.</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Thank you for any help you can provide.<br></div><div><span style="background-color:transparent">Sincerely, </span><br></div><div>Teiv.</div><div><br></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>