Thanks a lot, Jose! I looked at the eps folder (where I found the test8.c that has been my starting point) but I did not look at the nep folder (my fault!) Thanks again, Mario
Il giorno ven 17 giu 2022 alle ore 17:34 Jose E. Roman <[email protected]> ha scritto: > You can use VecGetOwnershipRange() to determine the range of global > indices corresponding to the local portion of a vector, and VecGetArray() > to access the values. In SLEPc, you can assume that X and Y will have the > same parallel distribution. > > For an example of a shell matrix that implements the matrix-vector product > in parallel, have a look at this: > https://slepc.upv.es/documentation/current/src/nep/tutorials/ex21.c.html > It is a simple tridiagonal example, where neighborwise communication is > done with two calls to MPI_Sendrecv(). > > Jose > > > > El 17 jun 2022, a las 17:21, Mario Rossi <[email protected]> escribió: > > > > I need to find the largest eigenvalues (say the first three) of a very > large matrix and I am using > > a combination of PetSc and SLEPc. In particular, I am using a shell > matrix. I wrote a "custom" > > matrix-vector product and everything works fine in serial (one task) > mode for a "small" case. > > For the real case, I need multiple (at least 128) tasks for memory > reasons so I need a parallel variant of the custom matrix-vector product. I > know exactly how to write the parallel variant > > (in plain MPI) but I am, somehow, blocked because it is not clear to me > what each task receives > > and what is expected to provide in the parallel matrix-vector product. > > More in detail, with a single task, the function receives the full X > vector and is expected to provide the full Y vector resulting from Y=A*X. > > What does it happen with multiple tasks? If I understand correctly > > in the matrix shell definition, I can choose to split the matrix into > blocks of rows so that the matrix-vector function should compute a block of > elements of the vector Y but does it receive only the corresponding subset > of the X (input vector)? (this is what I guess happens) and in output, does > > each task return its subset of elements of Y as if it were the whole > array and then PetSc manages all the subsets? Is there anyone who has a > working example of a parallel matrix-vector product for matrix shell? > > Thanks in advance for any help you can provide! > > Mario > > i > > > >
