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

Eda Oktay eda.oktay at metu.edu.tr
Sat Apr 4 03:39:13 CDT 2020


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/bce9950c/attachment.html>


More information about the petsc-users mailing list