- 1、本文档共67页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7、MPI分布内存及并行程序开发.ppt.ppt
MPI分布内存并行程序开发;一般的MPI程序设计流程图 ;4个MPI基本指令; 点对点通信函数;阻塞通信与非阻塞通信
;非阻塞发送;阻塞通信正确返回后,其后果是:
- 该调用要求的通信操作已正确完成
- 该调用的缓冲区可用
消息信封要匹配
接收到的消息是最早发送的
非阻塞通信主要用于计算和通信的重叠,从而提高整个程序执行的效率。;; 请求(request);通讯模式(4种):;标准(standard)模式:对数据的缓冲由具体MPI实现决定,与用户程序无关;
发送操作的正确返回而不要求接收操作收到发送的数据。
;缓冲区(buffered)模式:用户定义,使用和回收缓冲区,不管接收操作是否启动,发送操作都可以执行,但是必须保证缓冲区可用。
;同步(synchronous)模式:开始不依赖于接收进程相应的操作是否启动,但必须等到接受开始启动发送才可以返回
;就绪(ready)模式:只有当接收操作已经启动时,才可以在发送进程启动发送操作,否则发送将出错。
; 例、死锁的发送接收序列;进程 0; 例、不安全的发送接收序列;进程 0; 程序、安全的发送接收序列;进程 0; 例 循环-死锁; 改进:; 集合通信函数;集合操作的三种类型:
同步(barrier):集合中所有进程都到达后,每个进程再接着运行;
数据传递:广播(broadcast)、分散(scatter)、收集(gather)、全部到全部(alltoall);
规约(reduction):集合中的其中一个进程收集所有进程的数据并计算(如:求最大值、求最小值、加、乘等);
; 集合通信函数; MPI_Barrier(); 程序、同步示例; /*Make data table */
table =(int *)calloc(size,sizeof(int));
table[rank]=rank+1; /*准备要广播的数据*/
MPI_Barrier (MPI_COMM_WORLD);
/*将数据广播出去*/
for (i=0;isize,i++)
MPI_Bcast( table[i],1,MPI_INT,i,MPI_COMM_WORLD);
/*检查接收到的数据的正确性*/
for (i=0;isize,i++)
if (table[i]!=i+1) errors++;
MPI_Barrier(MPI_COMM_WORLD); /*检查完毕后执行一次同步*/
……
/*其他的计算*/
MPI_Finalize();
}; MPI_Bcast();30; 程序、广播程序示例; do{
if (rank==0) /*进程0读入需要广播的数据*/
scanf(“%d”,value);
/*将该数据广播出去*/
MPI_Bcast(value,1,MPI_INT,0,MPI_COMM_WORLD);
/*各进程打印收到的数据*/
printf(“Process %d got %d \n”,rank,value);
}while(value=0);
MPI_Finalize();
return 0;
}
; MPI_Scatter();34;MPI_Gather(); ; MPI_Reduce();38; 程序、规约示例 ; MPI_Init(argc,argv);
MPI_Comm_size(MPI_COMM_WORLD,numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,myid);
MPI_Get_processor_name(processor_name,namelen);
fprint(stdout,”Process %d of %d on % s\n”,myid,numprocs,
processor_name);
n=0;
if (myid==0)
{
printf(“Please give N=”);
文档评论(0)