MPI_Scatterv 示例

本文通过MPI_Scatterv函数的使用示例,展示了如何将一个数组分散到多个进程,每个进程接收不同长度且存在重叠的数据。sendbuf、sendcounts、displs等参数在分散过程中的作用被详细解释,旨在帮助理解MPI并行计算中的数据分布策略。
摘要由CSDN通过智能技术生成

参照 MPI_Scattervman 文档,做了一个示例程序。

输出的效果是,将一个数组中的数组分散到 4 个进程,每个进程收到的数据长度不同,并且有重叠部分:

[mindle@master shared_folder]$ mpicc MPIScatterv_demo.c
[mindle@master shared_folder]$ mpirun -n 4 ./a.out
Sum data at rank 0 = {
   1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
Scattered data at rank 0 = {
   1, 2, 3}
Scattered data at rank 1 = {
   3, 4, 5, 6}
Scattered data at rank 2 = {
   6, 7, 8, 9, 10}
Scattered data at rank 3 = {
   10, 11, 12, 13, 14, 15}
int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
                 MPI_Datatype sendtype, void *recvbuf, int recvcount,
                 MPI_Datatype recvtype,
                 int root, MPI_Comm comm)
  • sendbuf:address of send buffer (choice, significant only at root)
  • sendcounts:integer array (of length group size) specifying the number of elements to send to each processor
  • displs:integer array (of length group size). Entry i specifies the displacement (relative to sendbuf from which to take the outgoing data to process i
  • sendtype: data type of send buffer elements (handle)
  • recvcount: number of elements in receive buffer (integer)
  • recvtype:data type of receive buffer elements (handle)
  • root:rank of sending process (integer)
  • comm:communicator (handle)

示例程序(MPIScatterv_demo.c):

#include <stdio.h>
#include <stdlib.h>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值