<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Il giorno sab 9 mag 2020 alle ore 19:43 Jose E. Roman <<a href="mailto:jroman@dsic.upv.es">jroman@dsic.upv.es</a>> ha scritto:<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>
<br>
> El 9 may 2020, a las 12:45, Stefano Zampini <<a href="mailto:stefano.zampini@gmail.com" target="_blank">stefano.zampini@gmail.com</a>> escribió:<br>
> <br>
> Jose<br>
> <br>
> I have just pushed a test <a href="https://gitlab.com/petsc/petsc/-/blob/d64c2bc63c8d5d1a8c689f1abc762ae2722bba26/src/mat/tests/ex69.c" rel="noreferrer" target="_blank">https://gitlab.com/petsc/petsc/-/blob/d64c2bc63c8d5d1a8c689f1abc762ae2722bba26/src/mat/tests/ex69.c</a><br>
> See if it fits your framework, and feel free to modify the test to add more checks<br>
<br>
Almost good. The following modification of the example fails with -test 1:<br>
<br>
<br>
diff --git a/src/mat/tests/ex69.c b/src/mat/tests/ex69.c<br>
index e562f1e2e3..2df2c89be1 100644<br>
--- a/src/mat/tests/ex69.c<br>
+++ b/src/mat/tests/ex69.c<br>
@@ -84,6 +84,10 @@ int main(int argc,char **argv)<br>
   }<br>
   ierr = VecCUDARestoreArray(v,&vv);CHKERRQ(ierr);<br>
<br>
+  if (test==1) {<br>
+    ierr = MatDenseCUDAGetArray(B,&aa);CHKERRQ(ierr);<br>
+    if (aa) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_USER,"Expected a null pointer");<br>
+  }<br>
<br>
   /* free work space */<br>
   ierr = MatDestroy(&B);CHKERRQ(ierr);<br>
<br>
<br>
<br>
I would expect that after MatDenseCUDAResetArray() the pointer is NULL because it was set so in line 60. In the CPU counterpart it works as expected.<br>
<br></blockquote><div>Pushed a fix for this, thanks.</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">
Another comment is: in line 60 you have changed MatDenseCUDAPlaceArray() to MatDenseCUDAReplaceArray(). This is ok, but it is strange because MatDenseReplaceArray() does not exist. So the interface is different in GPU vs CPU, but I guess it is necessary here.<br>
<br></blockquote><div>I think we do not support calling PlaceArray twice anywhere PETSc. This is why I have added MatDenseCUDAReplaceArray(). If you need support for the CPU case too, I can add it.</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">
Thanks.<br>
Jose<br>
<br>
<br>
> <br>
> <br>
> Il giorno ven 8 mag 2020 alle ore 18:48 Jose E. Roman <<a href="mailto:jroman@dsic.upv.es" target="_blank">jroman@dsic.upv.es</a>> ha scritto:<br>
> Attached. Run with -test 1 or -test 2<br>
> <br>
> > El 8 may 2020, a las 17:14, Stefano Zampini <<a href="mailto:stefano.zampini@gmail.com" target="_blank">stefano.zampini@gmail.com</a>> escribió:<br>
> > <br>
> > Jose<br>
> > <br>
> > Just send me a MWE and I’ll fix the case for you<br>
> > <br>
> > Thanks<br>
> > Stefano<br>
> <br>
> <br>
> -- <br>
> Stefano<br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature">Stefano</div></div>