MPI编程函数接口(C/C++)

话说MPICH2貌似最多只能支持10000个处理器啊,可是作业里要好多好多个,怎么办。。

//参考教程:http://mpitutorial.com/tutorials/
MPI_Init(
    int* argc,
    char*** argv)

MPI_Comm_size(
    MPI_Comm communicator,
    int* size)

MPI_Comm_rank(
    MPI_Comm communicator,
    int* rank)

MPI_Get_processor_name(
    char* name,
    int* name_length)

MPI_Finalize()  //结束MPI环境,在此之后不能再进行MPI编程

MPI_Send(
    void* data,
    int count,
    MPI_Datatype datatype,
    int destination,
    int tag,
    MPI_Comm communicator)

MPI_Recv(
    void* data,
    int count,
    MPI_Datatype datatype,
    int source,
    int tag,
    MPI_Comm communicator,
    MPI_Status* status)

MPI_Get_count(
    MPI_Status* status,
    MPI_Datatype datatype,
    int* count)

 //和MPI_Recv函数很像,除了不接收message,跟MPI_Recv函数一模一样,可用来获得message的MPI_Status,结合MPI_Get_count可以在接受信息之前获得message的长度。
MPI_Probe(
    int source,
    int tag,
    MPI_Comm comm,
    MPI_Status* status) 

//设置了一个barrier,只有当所有processor都调用了这个函数,这些processor才能继续工作。
MPI_Barrier(MPI_Comm communicator)

//如果有N个处理器,时间复杂度是O(logN)
MPI_Bcast(
    void* data,
    int count,
    MPI_Datatype datatype,
    int root,
    MPI_Comm communicator)

MPI_Wtime()//返回一个浮点数,表示过了多少时间,单位是秒

//分发
MPI_Scatter(
    void* send_data,
    int send_count,
    MPI_Datatype send_datatype,
    void* recv_data,
    int recv_count,
    MPI_Datatype recv_datatype,
    int root,
    MPI_Comm communicator)

//聚集
MPI_Gather(
    void* send_data,
    int send_count,
    MPI_Datatype send_datatype,
    void* recv_data,
    int recv_count,
    MPI_Datatype recv_datatype,
    int root,
    MPI_Comm communicator)

//color表示新的communicator的标识,相同的color会被放到同样的communicator,key表示processor在新的communicator中的rank
MPI_Comm_split(
    MPI_Comm comm,
    int color,
    int key,
    MPI_Comm* newcomm)

//从一个group里的ranks[]复制到另外一一个group
MPI_Group_incl(
    MPI_Group group,
    int n,
    const int ranks[],
    MPI_Group* newgroup)

//名字很坑爹,其实不是创建一个group而是创建一个新的communicator,包含了group里的所有processor
MPI_Comm_create_group(
    MPI_Comm comm,
    MPI_Group group,
    int tag,
    MPI_Comm* newcomm)
)

MPI_Group_intersection(
    MPI_Group group1,
    MPI_Group group2,
    MPI_Group* newgroup)

MPI_Group_union(
    MPI_Group group1,
    MPI_Group group2,
    MPI_Group* newgroup)

MPI笛卡尔拓扑构造(ref:http://micro.ustc.edu.cn/Linux/MPI/MPICH/)


int MPI_Cart_create(MPI_Comm comm_old, int ndims, int *dims, int *periods,

int reorder, MPI_Comm *comm_cart)

IN comm_old 输入通信子(句柄)
IN ndims 笛卡尔网格的维数(整数)
IN dims 大小为ndims的整数矩阵,说明了每一维的进程数
IN periods 大小为ndims的逻辑矩阵,说明了在每一维上网格是否是周期性 的(true)或非周期性的(false)
IN reorder 标识数可以重排序(true)或不能(false)(logical)
OUT comm_cart 带有新的笛卡尔拓扑的通信子(handle)

//看不懂
int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest)
IN comm 带有笛卡尔结构的通信子(句柄)
IN direction 轮换的坐标维(整数)
IN disp 偏移(>0:向上轮换,<0:向下偏移)(整数)
OUT rank_source 源进程的标识数(整数)
OUT rank_dest 目标进程的标识数(整数)
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值