Hi Mark,

OK, so now the problem has shifted somewhat in that it now manifests itself on small cases. In earlier investigation I was drawn to MatTranspose but had a hard time pinning it down. The bug seems more stable now or you probably fixed what looks like all the other bugs.

I added print statements with norms of vectors in mg.c (v-cycle) and found that the diffs between the CPU and GPU runs came in MatRestrict, which calls MatMultTranspose. I added identical print statements in the two versions of MatMultTranspose and see this. (pinning to the CPU does not seem to make any difference). Note that the problem comes in the 2nd iteration where the *output* vector is non-zero coming in (this should not matter).

Karl, I zeroed out the output vector (yy) when I come into this method and it fixed the problem. This is with -n 4, and this always works with -n 3. See the attached process layouts. It looks like this comes when you use the 2nd socket.

So this looks like an Nvidia bug. Let me know what you think and I can pass it on to ORNL.

Hmm, there were some issues with MatMultTranspose_MPIAIJ at some point. I've addressed some of them, but I can't confidently say that all of the issues were fixed. Thus, I don't think it's a problem in NVIDIA's cuSparse, but rather something we need to fix in PETSc. Note that the problem shows up with multiple MPI ranks; if it were a problem in cuSparse, it would show up on a single rank as well.

Best regards,
Karli





06:49  /gpfs/alpine/geo127/scratch/adams$ jsrun*-n 4 *-a 4 -c 4 -g 1 ./ex56 -cells 8,12,16 *-ex56_dm_vec_type cuda -ex56_dm_mat_type aijcusparse*
[0] 3465 global equations, 1155 vertices
[0] 3465 equations in vector, 1155 vertices
   0 SNES Function norm 1.725526579328e+01
     0 KSP Residual norm 1.725526579328e+01
         2) call Restrict with |r| = 1.402719214830704e+01
                        MatMultTranspose_MPIAIJCUSPARSE |x in| = 1.40271921483070e+01 *                        MatMultTranspose_MPIAIJ |y in| = 0.00000000000000e+00 *                        MatMultTranspose_MPIAIJCUSPARSE |a->lvec| = 0.00000000000000e+00                         *** MatMultTranspose_MPIAIJCUSPARSE |yy| = 3.43436359545813e+00                         MatMultTranspose_MPIAIJCUSPARSE final |yy| = 1.29055494844681e+01
                 3) |R| = 1.290554948446808e+01
         2) call Restrict with |r| = 4.109771717986951e+00
                        MatMultTranspose_MPIAIJCUSPARSE |x in| = 4.10977171798695e+00 *                        MatMultTranspose_MPIAIJ |y in| = 0.00000000000000e+00 *                        MatMultTranspose_MPIAIJCUSPARSE |a->lvec| = 0.00000000000000e+00                         *** MatMultTranspose_MPIAIJCUSPARSE |yy| = 1.79415048609144e-01                         MatMultTranspose_MPIAIJCUSPARSE final |yy| = 9.01083013948788e-01
                 3) |R| = 9.010830139487883e-01
                 4) |X| = 2.864698671963022e+02
                 5) |x| = 9.763280000911783e+02
                 6) post smooth |x| = 8.940011621494751e+02
                 4) |X| = 8.940011621494751e+02
                 5) |x| = 1.005081556495388e+03
                 6) post smooth |x| = 1.029043994031627e+03
     1 KSP Residual norm 8.102614049404e+00
         2) call Restrict with |r| = 4.402603749876137e+00
                        MatMultTranspose_MPIAIJCUSPARSE |x in| = 4.40260374987614e+00 *                        MatMultTranspose_MPIAIJ |y in| = 1.29055494844681e+01 *                        MatMultTranspose_MPIAIJCUSPARSE |a->lvec| = 0.00000000000000e+00                         *** MatMultTranspose_MPIAIJCUSPARSE |yy| = 1.68544559626318e+00                         MatMultTranspose_MPIAIJCUSPARSE final |yy| = 1.82129824300863e+00
                 3) |R| = 1.821298243008628e+00
         2) call Restrict with |r| = 1.068309793900564e+00
                        MatMultTranspose_MPIAIJCUSPARSE |x in| = 1.06830979390056e+00                         MatMultTranspose_MPIAIJ |y in| = 9.01083013948788e-01                         MatMultTranspose_MPIAIJCUSPARSE |a->lvec| = 0.00000000000000e+00                         *** MatMultTranspose_MPIAIJCUSPARSE |yy| = 1.40519177065298e-01                         MatMultTranspose_MPIAIJCUSPARSE final |yy| = 1.01853904152812e-01
                 3) |R| = 1.018539041528117e-01
                 4) |X| = 4.949616392884510e+01
                 5) |x| = 9.309440014159884e+01
                 6) post smooth |x| = 5.432486021529479e+01
                 4) |X| = 5.432486021529479e+01
                 5) |x| = 8.246142532204632e+01
                 6) post smooth |x| = 7.605703654091440e+01
   Linear solve did not converge due to DIVERGED_ITS iterations 1
Nonlinear solve did not converge due to DIVERGED_LINEAR_SOLVE iterations 0
06:50  /gpfs/alpine/geo127/scratch/adams$ jsrun -n 4 -a 4 -c 4 -g 1 ./ex56 -cells 8,12,16
[0] 3465 global equations, 1155 vertices
[0] 3465 equations in vector, 1155 vertices
   0 SNES Function norm 1.725526579328e+01
     0 KSP Residual norm 1.725526579328e+01
         2) call Restrict with |r| = 1.402719214830704e+01
                        MatMultTranspose_MPIAIJ |x in| = 1.40271921483070e+01 *                        MatMultTranspose_MPIAIJ |y in| = 0.00000000000000e+00 *                        MatMultTranspose_MPIAIJ |a->lvec| = 0.00000000000000e+00                         *** MatMultTranspose_MPIAIJ |yy| = 3.43436359545813e+00                         MatMultTranspose_MPIAIJ final |yy| = 1.29055494844681e+01
                 3) |R| = 1.290554948446809e+01
         2) call Restrict with |r| = 4.109771717986956e+00
                        MatMultTranspose_MPIAIJ |x in| = 4.10977171798696e+00 *                        MatMultTranspose_MPIAIJ |y in| = 0.00000000000000e+00 *                        MatMultTranspose_MPIAIJ |a->lvec| = 0.00000000000000e+00                         *** MatMultTranspose_MPIAIJ |yy| = 1.79415048609143e-01                         MatMultTranspose_MPIAIJ final |yy| = 9.01083013948789e-01
                 3) |R| = 9.010830139487889e-01
                 4) |X| = 2.864698671963023e+02
                 5) |x| = 9.763280000911785e+02
                 6) post smooth |x| = 8.940011621494754e+02
                 4) |X| = 8.940011621494754e+02
                 5) |x| = 1.005081556495388e+03
                 6) post smooth |x| = 1.029043994031627e+03
     1 KSP Residual norm 8.102614049404e+00
         2) call Restrict with |r| = 4.402603749876139e+00
                        MatMultTranspose_MPIAIJ |x in| = 4.40260374987614e+00 *                        MatMultTranspose_MPIAIJ |y in| = 1.29055494844681e+01 *                        MatMultTranspose_MPIAIJ |a->lvec| = 0.00000000000000e+00                         *** MatMultTranspose_MPIAIJ |yy| = 4.43650979822523e-01                         MatMultTranspose_MPIAIJ final |yy| = 1.18089369006243e+00
                 3) |R| = 1.180893690062426e+00
         2) call Restrict with |r| = 6.868764720156294e-01
                        MatMultTranspose_MPIAIJ |x in| = 6.86876472015629e-01                         MatMultTranspose_MPIAIJ |y in| = 9.01083013948789e-01                         MatMultTranspose_MPIAIJ |a->lvec| = 0.00000000000000e+00                         *** MatMultTranspose_MPIAIJ |yy| = 3.36768099045088e-02                         MatMultTranspose_MPIAIJ final |yy| = 6.40334376876017e-02
                 3) |R| = 6.403343768760170e-02
                 4) |X| = 2.380471873599142e+01
                 5) |x| = 6.932703848368443e+01
                 6) post smooth |x| = 4.502536862656444e+01
                 4) |X| = 4.502536862656444e+01
                 5) |x| = 7.998534854728734e+01
                 6) post smooth |x| = 7.660075651381680e+01
   Linear solve did not converge due to DIVERGED_ITS iterations 1
Nonlinear solve did not converge due to DIVERGED_LINEAR_SOLVE iterations 0
06:50  /gpfs/alpine/geo127/scratch/adams$

Reply via email to