[petsc-users] [beginner question] Different communicators in the two objects: Argument # 1 and 2 flag 3!

Barry Smith bsmith at mcs.anl.gov
Tue Apr 22 11:08:45 CDT 2014


On Apr 22, 2014, at 10:23 AM, Niklas Fischer <niklas at niklasfi.de> wrote:

> I have tracked down the problem further and it basically boils down to the following question: Is it possible to use MatSetValue(s) to set values which are owned by other processes?

   Yes it is certainly possible. You should not set a large percent of the values on the “wrong” process but setting some is fine. The values will also be added together if you use ADD_VALUES.

   Below have you called the MatAssemblyBegin/End after setting all the values?

   
> 
> If I create a matrix with
> 
>     for(int i = 0; i < 4 * size; ++i){
>       CHKERRXX(MatSetValue(A, i, i, rank+1, ADD_VALUES));
>     }
> 
> for n=m=4, on four processes, one would expect each entry to be 1 + 2 + 3 + 4 = 10, however, PETSc prints
> Matrix Object: 1 MPI processes
>   type: mpiaij
> row 0: (0, 1) 
> row 1: (1, 1)
> row 2: (2, 1)
> row 3: (3, 1)
> row 4: (4, 2)
> row 5: (5, 2)
> row 6: (6, 2)
> row 7: (7, 2)
> row 8: (8, 3)
> row 9: (9, 3)
> row 10: (10, 3)
> row 11: (11, 3)
> row 12: (12, 4)
> row 13: (13, 4)
> row 14: (14, 4)
> row 15: (15, 4)
> which is exactly, what 
> 
> CHKERRXX(VecGetOwnershipRange(x, &ownership_start, &ownership_end));
> for(int i = ownership_start; i < ownership_end; ++i){
>    CHKERRXX(MatSetValue(A, i, i, rank+1, ADD_VALUES));
> }
> would give us.
> 
> Kind regards,
> Niklas Fischer
> 
> Am 22.04.2014 14:59, schrieb Niklas Fischer:
>> I should probably note that everything is fine if I run the serial version of this (with the exact same matrix + right hand side).
>> 
>> PETSc KSPSolve done, residual norm: 3.13459e-13, it took 6 iterations.
>> 
>> Am 22.04.2014 14:12, schrieb Niklas Fischer:
>>> 
>>> Am 22.04.2014 13:57, schrieb Matthew Knepley:
>>>> On Tue, Apr 22, 2014 at 6:48 AM, Niklas Fischer <niklas at niklasfi.de> wrote:
>>>> Am 22.04.2014 13:08, schrieb Jed Brown:
>>>> Niklas Fischer <niklas at niklasfi.de> writes:
>>>> 
>>>> Hello,
>>>> 
>>>> I have attached a small test case for a problem I am experiencing. What
>>>> this dummy program does is it reads a vector and a matrix from a text
>>>> file and then solves Ax=b. The same data is available in two forms:
>>>>   - everything is in one file (matops.s.0 and vops.s.0)
>>>>   - the matrix and vector are split between processes (matops.0,
>>>> matops.1, vops.0, vops.1)
>>>> 
>>>> The serial version of the program works perfectly fine but unfortunately
>>>> errors occure, when running the parallel version:
>>>> 
>>>> make && mpirun -n 2 a.out matops vops
>>>> 
>>>> mpic++ -DPETSC_CLANGUAGE_CXX -isystem
>>>> /home/data/fischer/libs/petsc-3.4.3/arch-linux2-c-debug/include -isystem
>>>> /home/data/fischer/libs/petsc-3.4.3/include petsctest.cpp -Werror -Wall
>>>> -Wpedantic -std=c++11 -L
>>>> /home/data/fischer/libs/petsc-3.4.3/arch-linux2-c-debug/lib -lpetsc
>>>> /usr/bin/ld: warning: libmpi_cxx.so.0, needed by
>>>> /home/data/fischer/libs/petsc-3.4.3/arch-linux2-c-debug/lib/libpetsc.so,
>>>> may conflict with libmpi_cxx.so.1
>>>> /usr/bin/ld: warning: libmpi.so.0, needed by
>>>> /home/data/fischer/libs/petsc-3.4.3/arch-linux2-c-debug/lib/libpetsc.so,
>>>> may conflict with libmpi.so.1
>>>> librdmacm: couldn't read ABI version.
>>>> librdmacm: assuming: 4
>>>> CMA: unable to get RDMA device list
>>>> --------------------------------------------------------------------------
>>>> [[43019,1],0]: A high-performance Open MPI point-to-point messaging module
>>>> was unable to find any relevant network interfaces:
>>>> 
>>>> Module: OpenFabrics (openib)
>>>>    Host: dornroeschen.igpm.rwth-aachen.de
>>>> CMA: unable to get RDMA device list
>>>> It looks like your MPI is either broken or some of the code linked into
>>>> your application was compiled with a different MPI or different version.
>>>> Make sure you can compile and run simple MPI programs in parallel.
>>>> Hello Jed,
>>>> 
>>>> thank you for your inputs. Unfortunately MPI does not seem to be the issue here. The attachment contains a simple MPI hello world program which runs flawlessly (I will append the output to this mail) and I have not encountered any problems with other MPI programs. My question still stands.
>>>> 
>>>> This is a simple error. You created the matrix A using PETSC_COMM_WORLD, but you try to view it
>>>> using PETSC_VIEWER_STDOUT_SELF. You need to use PETSC_VIEWER_STDOUT_WORLD in
>>>> order to match.
>>>> 
>>>>   Thanks,
>>>> 
>>>>      Matt
>>>>  
>>>> Greetings,
>>>> Niklas Fischer
>>>> 
>>>> mpirun -np 2 ./mpitest
>>>> 
>>>> librdmacm: couldn't read ABI version.
>>>> librdmacm: assuming: 4
>>>> CMA: unable to get RDMA device list
>>>> --------------------------------------------------------------------------
>>>> [[44086,1],0]: A high-performance Open MPI point-to-point messaging module
>>>> was unable to find any relevant network interfaces:
>>>> 
>>>> Module: OpenFabrics (openib)
>>>>   Host: dornroeschen.igpm.rwth-aachen.de
>>>> 
>>>> Another transport will be used instead, although this may result in
>>>> lower performance.
>>>> --------------------------------------------------------------------------
>>>> librdmacm: couldn't read ABI version.
>>>> librdmacm: assuming: 4
>>>> CMA: unable to get RDMA device list
>>>> Hello world from processor dornroeschen.igpm.rwth-aachen.de, rank 0 out of 2 processors
>>>> Hello world from processor dornroeschen.igpm.rwth-aachen.de, rank 1 out of 2 processors
>>>> [dornroeschen.igpm.rwth-aachen.de:128141] 1 more process has sent help message help-mpi-btl-base.txt / btl:no-nics
>>>> [dornroeschen.igpm.rwth-aachen.de:128141] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help / error messages
>>>> 
>>> Thank you, Matthew, this solves my viewing problem. Am I doing something wrong when initializing the matrices as well? The matrix' viewing output starts with "Matrix Object: 1 MPI processes" and the Krylov solver does not converge.
>>> 
>>> Your help is really appreciated,
>>> Niklas Fischer
>>>> 
>>>> 
>>>> -- 
>>>> 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
>>> 
>> 
> 



More information about the petsc-users mailing list