On Mon, Jan 15, 2024 at 11:57 AM MIA via petsc-users < [email protected]> wrote:
> Hi, > > I am trying to solve a large linear equation, which needs a GPU solver as > comparison. I install a CUDA-enabled PETSc and petsc4py from sources using > the release tarball. According to the test results after installation, the > PETSc can successfully work with cuda. > Here is a How-To for GPUs: https://petsc.org/main/faq/#doc-faq-gpuhowto Thanks, Matt > All my programs are written in python, so I turn to petsc4py. But I do not > find any commands that define variables on coda device or define where the > direct solver is executed. I check `nvidia-smi` and find my cuda does not > work at all when executing my python script: > > from petsc4py import PETSc > import numpy as np > > n = 1000 > > nnz = 3 * np.ones(n, dtype=np.int32) > nnz[0] = nnz[-1] = 2 > > A = PETSc.Mat() > A.createAIJ([n, n], nnz=nnz) > > # First set the first row > A.setValue(0, 0, 2) > A.setValue(0, 1, -1) > # Now we fill the last row > A.setValue(999, 998, -1) > A.setValue(999, 999, 2) > > # And now everything else > for index in range(1, n - 1): > A.setValue(index, index - 1, -1) > A.setValue(index, index, 2) > A.setValue(index, index + 1, -1) > > A.assemble() > > indexptr, indices, data = A.getValuesCSR() > b = A.createVecLeft() > b.array[:] = 1 > for i in range(10): > ksp = PETSc.KSP().create() > ksp.setOperators(A) > ksp.setType('preonly') > ksp.setConvergenceHistory() > ksp.getPC().setType('lu') > x = A.createVecRight() > ksp.solve(2*b, x) > residual = A * x - 2*b > if i % 10 == 0: > print(f"The relative residual is: {residual.norm() / b.norm()}.”) > > What should I do to utlize GPU to execute the KSP task? Are there some > settings to be modified? > > Looking forward to your early reply. Thanks a lot. > > -- 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/>
