Please, could you provide a minimal working example (or link) of how to do this? Thank you.
Em ter., 20 de jun. de 2023 às 15:08, Matthew Knepley <[email protected]> escreveu: > On Tue, Jun 20, 2023 at 2:02 PM Diego Magela Lemos <[email protected]> > wrote: > >> So... what do I need to do, please? >> Why am I getting wrong results when solving the linear system if the >> matrix is filled in with MatSetPreallocationCOO and MatSetValuesCOO? >> > > It appears that you have _all_ processes submit _all_ triples (i, j, v). > Each triple can only be submitted by a single process. You can fix this in > many ways. For example, an easy but suboptimal way is just to have process > 0 submit them all, and all other processes submit nothing. > > Thanks, > > Matt > > >> Em ter., 20 de jun. de 2023 às 14:56, Jed Brown <[email protected]> >> escreveu: >> >>> Matthew Knepley <[email protected]> writes: >>> >>> >> The matrix entries are multiplied by 2, that is, the number of >>> processes >>> >> used to execute the code. >>> >> >>> > >>> > No. This was mostly intended for GPUs, where there is 1 process. If you >>> > want to use multiple MPI processes, then each process can only >>> introduce >>> > some disjoint subset of the values. This is also how MatSetValues() >>> works, >>> > but it might not be as obvious. >>> >>> They need not be disjoint, just sum to the expected values. This >>> interface is very convenient for FE and FV methods. MatSetValues with >>> ADD_VALUES has similar semantics without the intermediate storage, but it >>> forces you to submit one element matrix at a time. Classic parallelism >>> granularity versus memory use tradeoff with MatSetValuesCOO being a clear >>> win on GPUs and more nuanced for CPUs. >>> >> > > -- > What most experimenters take for granted before they begin their > experiments is infinitely more interesting than any results to which their > experiments lead. > -- Norbert Wiener > > https://www.cse.buffalo.edu/~knepley/ > <http://www.cse.buffalo.edu/~knepley/> >
