当前位置: 首页 > wzjs >正文

单页网站后台浙江壹设软装设计有限公司

单页网站后台,浙江壹设软装设计有限公司,wordpress取消footer,wordpress自定义应用文章目录 MPI Status & Probe动态的接收1 MPI_Status结构体查询的范例2 use MPI_Probe找出消息大小 MPI Status & Probe动态的接收 MPI_Recv将MPI_Status结构体的地址作为参数,可以使用MPI_STATUS_IGNORE 忽略。如果我们将 MPI_Status 结构体传递给 MPI_Re…

文章目录

    • MPI Status & Probe动态的接收
      • 1 MPI_Status结构体查询的范例
      • 2 use MPI_Probe找出消息大小

MPI Status & Probe动态的接收

MPI_RecvMPI_Status结构体的地址作为参数,可以使用MPI_STATUS_IGNORE 忽略。如果我们将 MPI_Status 结构体传递给 MPI_Recv 函数,则操作完成后将在该结构体中填充有关接收操作的其他信息。 三个主要的信息包括:

  • 发送端的rank,发送端的rank存储在结构体MPI_SOURCE元素中,如果声明一个MPI_Status state对象,则可以通过state.MPI_SOURCE访问rank。

    typedef struct MPI_Status {int count_lo;                  // 低位的计数值,表示接收到的数据量的低32位(可能与 count_hi_and_cancelled 组合成完整的 64 位计数)int count_hi_and_cancelled;    // 高位的计数值(如果存在高32位),同时包含一个“取消标志”位int MPI_SOURCE;                // 消息的源进程的 rank(表示接收消息是从哪个进程来的)int MPI_TAG;                   // 消息的标签(与发送时指定的标签对应,用于标识消息的类型)int MPI_ERROR;                 // 错误码(用于存储接收操作的返回状态,MPI_SUCCESS 表示成功)
    } MPI_Status;
    
  • 消息的标签,同上访问方式,访问MPI_TAG

  • 消息的长度,它在在结构体中没有预定义的元素。我们必须使用 MPI_Get_count 找出消息的长度。

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

    MPI_Get_count中需要传递 MPI_Status 结构体,消息的 datatype(数据类型),并返回 count。 变量 count 是已接收的 datatype 元素的数目。

1 MPI_Status结构体查询的范例

// mpicc mpi_status.cc -o mpi_status
// mpirun -np 2 ./mpi_status
#include <mpi.h>
#include <iostream>
#include <stdio.h>int main(int argc, char** argv) {MPI_Init(NULL, NULL);int world_size;MPI_Comm_size(MPI_COMM_WORLD, &world_size);if (world_size != 2) {fprintf(stderr, "Must use two processes for this example\n");MPI_Abort(MPI_COMM_WORLD, 1);}int world_rank;MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);const int MAX_NUMBERS = 100;int numbers[MAX_NUMBERS];int number_amount;if (world_rank == 0) {// Pick a random amount of integers to send to process onesrand(time(NULL));number_amount = (rand() / (float)RAND_MAX) * MAX_NUMBERS;// Send the amount of integers to process oneMPI_Send(numbers, number_amount, MPI_INT, 1, 0, MPI_COMM_WORLD);printf("0 sent %d numbers to 1\n", number_amount);} else if (world_rank == 1) {MPI_Status status;// Receive at most MAX_NUMBERS from process zeroMPI_Recv(numbers, MAX_NUMBERS, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);// After receiving the message, check the status to determine how many// numbers were actually receivedMPI_Get_count(&status, MPI_INT, &number_amount);// Print off the amount of numbers, and also print additional information// in the status objectprintf("1 received %d numbers from 0. Message source = %d, tag = %d\n",number_amount, status.MPI_SOURCE, status.MPI_TAG);}MPI_Barrier(MPI_COMM_WORLD);MPI_Finalize();return 0;
}
/******************************************************************
0 sent 91 numbers to 1
0 sent 91 numbers to 1
*******************************************************************/

2 use MPI_Probe找出消息大小

在库文件中的定义如下,可以看到与MPI_Recv很类似。可以使用 MPI_Probe 在实际接收消息之前查询消息大小。除了不接收消息之外,MPI_Probe会阻塞具有匹配标签和发送端的消息。消息可用时,会填充Status。然后,用户可以使用 MPI_Recv 接收实际的消息。

MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status)
#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main (int argc, char** argv) {MPI_Init(NULL, NULL);int world_size;MPI_Comm_size(MPI_COMM_WORLD, &world_size); // Get the number of processesif (world_size != 2) {fprintf(stderr, "Error: This program requires exactly 2 processes.\n");MPI_Abort(MPI_COMM_WORLD, 1);}int world_rank;MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); // Get the rank of the current processint number_of_amount = 0;if (world_rank == 0) {int MAX_NUMBERS = 100;int numbers[MAX_NUMBERS];srand(time(NULL));number_of_amount = (rand() / (float)RAND_MAX) * MAX_NUMBERS;MPI_Send(numbers, number_of_amount, MPI_INT, 1, 0, MPI_COMM_WORLD);printf("Process %d sent %d numbers to process %d.\n", world_rank, number_of_amount, 1);} else if (world_rank == 1) {MPI_Status status;MPI_Probe(0, 0, MPI_COMM_WORLD, &status);MPI_Get_count(&status, MPI_INT, &number_of_amount);int* number_buffer = (int*)malloc(sizeof(int) * number_of_amount);MPI_Recv(number_buffer, number_of_amount, MPI_INT, 0, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE);printf("1 dynamically received %d numbers from 0.\n",number_of_amount);free(number_buffer);}MPI_Finalize();
}
/******************************************************************
Process 0 sent 29 numbers to process 1.
1 dynamically received 29 numbers from 0.
*******************************************************************/

MPI_Probe 构成了许多动态 MPI 应用程序的基础。 例如,控制端/执行子程序在交换变量大小的消息时通常会大量使用 MPI_Probe。 作为练习,对 MPI_Recv 进行包装,将 MPI_Probe 用于您可能编写的任何动态应用程序。 它将使代码看起来更美好:-)
下一节将通过完整的代码例子说明send和recv为什么是阻塞通信。

http://www.dtcms.com/wzjs/828462.html

相关文章:

  • 构建电子商务网站的步骤wordpress 定时发布
  • 企业网站建设方案如何seo引擎
  • 网站建设预期效果深圳市官网网站建设报价
  • 网站右下角代码绿化公司网站建设
  • 网站开发的层次wordpress恶意代码在线检测
  • 网站跟域名备案数量最专业网站建设公
  • 小程序企业网站开发公司网站开发实训报告
  • 搬瓦工vps做网站速度怎么样重庆装修房子可以提取公积金吗
  • 苏州学网站建设广州企业网站建设方案
  • 哪里有html5网站建设设计图片素材
  • 网站建设游戏wordpress支持mysqli
  • 自动登录网站的小程序wordpress所有数据迁移
  • 网站轮播效果网络公司运营模式
  • 迪奥生物做图网站网上做网站资金大概多少
  • 赣州网站制作北京seo顾问服务公司
  • 企业做网站收入创业投资公司网站建设
  • 吴川市规划建设局网站wordpress msn space
  • 南京响应式网站制作企业形象宣传策划方案
  • 制作网站后台外贸网站怎么做关键词
  • 人才微网站开发wordpress 无刷新分页
  • 网站页面设计制作网站建设功能需求
  • 做外贸网站哪家好深圳网站制作公司人才招聘
  • 网站升级停止访问如何做关键词查询爱站网
  • 网站免费建设推荐虚拟主机wordpress不能用
  • 企业建站用什么主机海口企业网站开发
  • 市北区大型网站建设衡水专业网站建设公司
  • 网站商城的建设网站的标题符号
  • 有哪些做二手的网站微信应用开发平台
  • 个人网站建设方法和过程厦门网站建设68
  • 网站建设合作方案装修设计软件免费版下载