<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Dec 30, 2020, at 6:45 PM, Mark Adams <<a href="mailto:mfadams@lbl.gov" class="">mfadams@lbl.gov</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><br class=""></div><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Dec 30, 2020 at 7:12 PM Barry Smith <<a href="mailto:bsmith@petsc.dev" class="">bsmith@petsc.dev</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br class="">
  If you are using direct solvers on each block on each GPU (several matrices on each GPU) you could pull apart, for example, MatSolve_SeqAIJCUSPARSE()<br class="">
and launch each of the matrix solves on a separate stream.   </blockquote><div class=""><br class=""></div><div class="">Yes, that is what I want. The first step is to figure out the best way to get the blocks from Plex/Forest and get an exact solver working on the CPU with ASM.</div></div></div></div></blockquote><div><br class=""></div>  I don't think you want ASM or at most you it inside PCFIELDSPLIT. It is splits job to pull out fields, not ASM's job (that pulls out geometrically connected regions).</div><div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_quote"><div class=""> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">You could use a MatSolveBegin/MatSolveEnd style or as Jed may prefer a Wait() model. Maybe a couple hours coding to produce a prototype MatSolveBegin/MatSolveEnd from MatSolve_SeqAIJCUSPARSE.<br class="">
<br class="">
  Note pulling apart a non-coupled single MatAIJ that contains all the matrices would be hugely expensive. Better to build each matrix already separate or use MatNest with only diagonal matrices.<br class=""></blockquote><div class=""><br class=""></div><div class="">The problem is that it runs in TS that uses DM, so I can't reorder the matrix without breaking TS. I mimic what DM does now. </div></div></div></div></blockquote><div><br class=""></div>  DM decides the ordering, not TS. You could slip a MatSetLocalToGlobal mapping in that uninterlaces the variables to get your DM to build an uninterlaced matrix. For the vector it is easier but again you will need to uninterlace it.  Back in the classic Cray vector machine days interlacing was bad, with Intel CPUs it became good, now both approaches should be supported in software.</div><div><br class=""></div><div>  All the DMs should support both interlaced and noninterlaced algebraic objects.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_quote"><div class=""><br class=""></div><div class="">I run once on the CPU to get the metadata for GPU assembly from DMForest.  Maybe I should just get all the metadata that I need and throw the DM away after the setup solve and run TS without a DM...</div><div class=""> <br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br class="">
  Barry<br class="">
<br class="">
<br class="">
> On Dec 30, 2020, at 5:46 PM, Jed Brown <<a href="mailto:jed@jedbrown.org" target="_blank" class="">jed@jedbrown.org</a>> wrote:<br class="">
> <br class="">
> Mark Adams <<a href="mailto:mfadams@lbl.gov" target="_blank" class="">mfadams@lbl.gov</a>> writes:<br class="">
> <br class="">
>> I see that ASM has a DM and can get subdomains from it. I have a DMForest<br class="">
>> and I would like an ASM that has a subdomain for each field. How might I go<br class="">
>> about doing this? (the fields are not coupled in the matrix so this would<br class="">
>> give a block diagonal matrix, and thus exact with LU sub solvers.<br class="">
> <br class="">
> The fields are already not coupled or you want to filter the matrix and give back a single matrix with coupling removed?<br class="">
> <br class="">
> You can use Fieldsplit to get the math of field-based block Jacobi (or ASM, but overlap with fields tends to be expensive). Neither FieldSplit or ASM can run the (additive) solves concurrently (and most libraries would need something to drive the threads).<br class="">
> <br class="">
>> I am then going to want to get these separate solves to be run in parallel<br class="">
>> on a GPU (I'm talking with Sherry about getting SuperLU working on these<br class="">
>> small problems). In looking at PCApply_ASM it looks like this will take<br class="">
>> some thought. KSPSolve would need to be non-blocking, etc., or a new apply<br class="">
>> op might be needed.<br class="">
>> <br class="">
>> Thanks,<br class="">
>> Mark<br class="">
<br class="">
</blockquote></div></div>
</div></blockquote></div><br class=""></body></html>