Han Tran <hant...@cs.utah.edu> writes: > Hi Jed, > > Thank you for your answer. I have not had a chance to work on this since I > asked. I have some follow-up questions. > > (1) From the Petsc manual, > https://petsc.org/release/manualpages/Vec/VecGetArrayAndMemType/, it shows > that both VecGetArrayAndMemType() and VecGetArrayReadAndMemType() do not have > Fortran support. Has Petsc added the Fortran support for these functions so > far?
It doesn't look like it. I think one would mirror the VecGetArrayF90 implementation. > (2) My user-defined MatMult(A, u, v) already handles the communication, i.e., > the return vector v=A*u was computed with all needed communication. Thus, I > do not quite understand when you said that “use DMGlobalToLocalBegin/End()…”. > Do I need this function even if the communication is already done by my > user-defined MatMult()? If you do your own communication, you don't need to use DMGlobalToLocalBegin/End. > > Thank you, > Han > >> On Nov 4, 2022, at 9:06 AM, Jed Brown <j...@jedbrown.org> wrote: >> >> Yes, this is supported. You can use VecGetArrayAndMemType() to get access to >> device memory. You'll often use DMGlobalToLocalBegin/End() or VecScatter to >> communicate, but that will use GPU-aware MPI if your Vec is a device vector. >> >> Han Tran <hant...@cs.utah.edu> writes: >> >>> Hi, >>> >>> I am aware that PETSc recently supports solvers on GPU. I wonder whether >>> PETSc supports MatShell with GPU solvers, i.e., I have a user-defined >>> MatMult() function residing on the device, and I want to use MatShell >>> directly with PETSc GPU solvers without any transfer back and forth between >>> host and device. If this is possible, could you let me know how to do this >>> (an example, if any, would be very appreciated)? >>> >>> Thank you! >>> Han