> On Oct 20, 2017, at 5:33 PM, Kong, Fande <[email protected]> wrote: > > > > On Fri, Oct 20, 2017 at 4:24 PM, Barry Smith <[email protected]> wrote: > > > On Oct 20, 2017, at 12:17 PM, Kong, Fande <[email protected]> wrote: > > > > How about to do a global check (MPI_Allreduce)? > > Kill you for large number of processes. > > > If we do not set values at all and the matrix is already assembled, we just > > return without doing anything? > > > > How expensive, in the current implementation, to call MatAssemblyBegin/End > > if there are no any stashed data? Is it so cheap that we can just ignore it? > > It requires at least one global reduction. > > So, this global reduction is cheaper than MPI_Allreduce? Or they are similar.
No it is not cheaper, it is the same thing. You need to eliminate unneeded AssemblyBegin/End in MOOSE. That is the only corrective action that can take place. > > > > > > > I am asking because we call MatAssemblyBegin/End so often in MOOSE. I want > > to make sure this is not going to bring up any performance issue. > > You need to check each use in MOOSE and see WHY it is being called. If no > reason then don't call. > > Good point. > > Fande, > > > > Barry > > > > > > > Fande, > > > > On Fri, Oct 20, 2017 at 11:08 AM, Barry Smith <[email protected]> wrote: > > > > One process sets a value in the matrix, the others do not. They all call > > MatAssemblyBegin(). Some processes will skip the assembly and hence the > > code will hang. > > > > > > > On Oct 20, 2017, at 12:03 PM, Kong, Fande <[email protected]> wrote: > > > > > > Hi All, > > > > > > In Mat/VecAssemblyBegin/End, why we do not check if or not mat/vec is > > > assembled. If mat/vec is already assembled, should we just return without > > > doing anything? > > > > > > I think we have some particular reasons not to check if the matrix is > > > assembled. I honestly do not know why. > > > > > > Thanks, > > > > > > Fande, > > > >
