[petsc-users] Gather and Broadcast Parallel Vectors in k-means algorithm

Junchao Zhang junchao.zhang at gmail.com
Sat Apr 4 08:37:40 CDT 2020


Check
https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecScatterCreateToAll.html
to
see if it meets your needs.
--Junchao Zhang


On Sat, Apr 4, 2020 at 3:39 AM Eda Oktay <eda.oktay at metu.edu.tr> wrote:

> Hi all,
>
> I created a parallel vector UV, by using VecDuplicateVecs since I need row
> vectors of a matrix. However, I need the whole vector be in all processors,
> which means I need to gather all and broadcast them to all processors. To
> gather, I tried to use VecStrideGatherAll:
>
>   Vec UVG;
>   VecStrideGatherAll(UV,UVG,INSERT_VALUES);
>   VecView(UVG,PETSC_VIEWER_STDOUT_WORLD);
>
>  however when I try to view the vector, I get the following error.
>
> [3]PETSC ERROR: Invalid argument
> [3]PETSC ERROR: Wrong type of object: Parameter # 1
> [3]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html
> for trouble shooting.
> [3]PETSC ERROR: Petsc Release Version 3.11.1, Apr, 12, 2019
> [3]PETSC ERROR: ./clustering_son_final_edgecut_without_parmetis on a
> arch-linux2-c-debug named localhost.localdomain by edaoktay Sat Apr  4
> 11:22:54 2020
> [3]PETSC ERROR: Wrong type of object: Parameter # 1
> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html
> for trouble shooting.
> [0]PETSC ERROR: Petsc Release Version 3.11.1, Apr, 12, 2019
> [0]PETSC ERROR: ./clustering_son_final_edgecut_without_parmetis on a
> arch-linux2-c-debug named localhost.localdomain by edaoktay Sat Apr  4
> 11:22:54 2020
> [0]PETSC ERROR: Configure options --download-mpich --download-openblas
> --download-slepc --download-metis --download-parmetis --download-chaco
> --with-X=1
> [0]PETSC ERROR: #1 VecStrideGatherAll() line 646 in
> /home/edaoktay/petsc-3.11.1/src/vec/vec/utils/vinv.c
> ./clustering_son_final_edgecut_without_parmetis on a arch-linux2-c-debug
> named localhost.localdomain by edaoktay Sat Apr  4 11:22:54 2020
> [1]PETSC ERROR: Configure options --download-mpich --download-openblas
> --download-slepc --download-metis --download-parmetis --download-chaco
> --with-X=1
> [1]PETSC ERROR: #1 VecStrideGatherAll() line 646 in
> /home/edaoktay/petsc-3.11.1/src/vec/vec/utils/vinv.c
> Configure options --download-mpich --download-openblas --download-slepc
> --download-metis --download-parmetis --download-chaco --with-X=1
> [3]PETSC ERROR: #1 VecStrideGatherAll() line 646 in
> /home/edaoktay/petsc-3.11.1/src/vec/vec/utils/vinv.c
>
> I couldn't understand why I am getting this error. Is this because of UV
> being created by VecDuplicateVecs? How can I solve this problem?
>
> The other question is broadcasting. After gathering all elements of the
> vector UV, I need to broadcast them to all processors. I found
> PetscSFBcastBegin. However, I couldn't understand the PetscSF concept
> properly. I couldn't adjust my question to the star forest concept.
>
> My problem is: If I have 4 processors, I create a matrix whose columns are
> 4 smallest eigenvectors, say of size 72. Then by defining each row of this
> matrix as a vector, I cluster them by using k-means clustering algorithm.
> For now, I cluster them by using MATLAB and I obtain a vector showing which
> row vector is in which cluster. After getting this vector, to cluster row
> vectors according to this information, all processors need to have all of
> the row vectors.
>
> According to this problem, how can I use the star forest concept?
>
> I will be glad if you can help me about this problem since I don't have
> enough knowledge about graph theory. An if you have any idea about how can
> I use k-means algorithm in a more practical way, please let me know.
>
> Thanks!
>
> Eda
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20200404/2f0d6225/attachment.html>


More information about the petsc-users mailing list