<div dir="ltr"><div>Thanks, Barry. Your suggestion fixed my problem.</div><div><br></div><div>Xiangdong<br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 22, 2019 at 8:26 PM Smith, Barry F. <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
What a crap design PETSc has for GPUs. Sorry about this.<br>
<br>
Move <br>
<br>
> MatSetOptionPrefix(A,"test_")<br>
> 8 MatSetFromOptions<br>
<br>
to immediately after the MatSetType(A,MATAIJ).<br>
<br>
What is happening is the original preallocation information you provided is lost when the matrix type is changed in MatSetFromOptions(), it comes from the ancient decision to have GPU vectors and matrices be entirely new subclasses instead of just providing GPU backends to the standard classes. Hopefully we can eventually fix this.<br>
<br>
<br>
Barry<br>
<br>
<br>
> On Oct 22, 2019, at 3:32 PM, Xiangdong <<a href="mailto:epscodes@gmail.com" target="_blank">epscodes@gmail.com</a>> wrote:<br>
> <br>
> My Matrix setup workflow is like this:<br>
> <br>
> 1 MatCreate<br>
> 2 MatSetSizes<br>
> 3 MatSetType(A,MATAIJ)<br>
> 4 MatMPIAIJSetPreallocation<br>
> 5 MatSeqAIJSetPreallocation<br>
> 6 MatSetLocalToGlobalMapping<br>
> 7 MatSetOptionPrefix(A,"test_")<br>
> 8 MatSetFromOptions<br>
> 9 MatSetUp<br>
> <br>
> 10 loop all the nonzero entries by calling MatSetValuesLocal(A,1,&i,1,&j, &val, ADD_VALUES);<br>
> <br>
> 11 MatAssemblyBegin<br>
> 12 MatAssemblyEnd<br>
> <br>
> For the AIJ format, it works fine. -info gives "Number of mallocs during MatSetValues() is 0" and "Stash has 0 entries, uses 0 mallocs."<br>
> <br>
> If I run the same code with -test_mat_type aijcusparse, it takes forever to finish step 10. Does this step really involve moving data from host to devices? Do I need to have more changes to use aijcusparse other than just changing mat_type from command line?<br>
> <br>
> Thank you.<br>
> <br>
> Best,<br>
> Xiangdong<br>
> <br>
> <br>
> On Tue, Oct 22, 2019 at 1:53 AM Smith, Barry F. <<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>> wrote:<br>
> <br>
> The aijcusparse actually uses the same data structures and code for setting values as does aij. So it is not related directly to that format.<br>
> <br>
> Barry<br>
> <br>
> <br>
> > On Oct 21, 2019, at 6:26 PM, Xiangdong via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> wrote:<br>
> > <br>
> > Hello everyone,<br>
> > <br>
> > When I use matsetvalueslocal to form the matrix in aijcusparse format, I found that it takes forever to finish the loops of matsetvalueslocal. I am setting one entry a time, and there are about about 28 Million nonzeros. (It is fast if the matrix is aij, instead of aijcusparse).<br>
> > <br>
> > However, if I have the matrix ready in binary format and use matload to get it into aijcusparse format, it is fast.<br>
> > <br>
> > Is it the issue of matsetvalueslocal or my wrong way of using matsetvalueslocal? any suggestions to speed up the process?<br>
> > <br>
> > Thank you.<br>
> > <br>
> > Xiangdong<br>
> <br>
<br>
</blockquote></div>