mpi并行编程中定义的变量每个cpu中都有吗

300 CPU MPI全局数据通讯组态方法及介绍-专业自动化论坛-中国工控网
300 CPU MPI全局数据通讯组态方法及介绍
给TA发消息
加TA为好友
发表于: 11:41:46
&&&&&&&&300CPU间的通讯方式有MPI通讯、DP通讯等。MPI通讯最大通讯距离在100米范围内,DP通讯单段通讯距离可达1200米,可以较长距离数据传送,MPI和DP通讯硬件介质都是485接口。在一个MPI通讯网络中,最多能组态4台300CPU之间的数据交换。&&&&&&&&MPI全局数据通讯采用广播方式进行数据交换,不需要对全局数据进行编程,只需要在STEP7的MPI网络中用全局数据表对数据通讯组态。&&&&&&&&中小型生产线,两台以上四台以下300CPU的通讯方式可以走MPI通讯方式。以下介绍一下2台300CPU&MPI通讯方式的全局数据组态方法。&&&&&&&&硬件要求:CPU315-2DP&&&CPU312&&&&&&&&软件要求:STEP7编程软件&&&&&&&&1)打开STEP7编程软件,建立一个项目MPI&TONGXUN,项目中插入两个站点,CPU312站点和CPU315-2DP站点,如图所示。&&&&&&&&2)分别对两个站点的CPU进行硬件组态,配置MPI通讯速率和站点号,通讯速率可以在19.2K到12M中选择,这里我们选择系统默认通讯速率:187.5K,312CPU站点:2#站,315CPU站点:3#站,组态如下所示。&&&&&&&&&312站点CPU组态如下所示,系统默认2#地址,不需要修改:&&&&&&&&&315-2DP站点CPU组态如下图所示,在“属性”中“参数”对话框中定义MPI网络站点地址为3#站地址,如下图所示:&&&&&&&&接下来进行全局数据通讯组态,共有两种方法:&&&&&&&&方法一:在组态好的项目中,右击MPI网络进行全局变量数据设置;如图一所示。&&&&&&&&方法二:打开任一配置好的硬件配置,点击组态网络图标“”,右击MPI进行全局变量数据设置,如下图所示:&定义发送接收数据,300CPU间的相互通讯最多可以定义4个全局数据包的循环数,地址区可以使M、D、Q、I区,长度最大是22个字节,定义多个数据区,每个数据区会占用两个字节,发送接收的最大22个字节数也会相应减少。定义发送与接收区地址长度应为一致,不然编译会报错。(转发暗号:亿维UN300&PLC)定义全局数据发送接收区步骤如下图所示:&&定义全局数据发送接收区扫描速率、全局数据状态如下图所示:&&以上为2台300CPU&MPI的全局数据组态方式,3台、4台也是同样的组态方法,大家可以试着自己组态一个看看。关注亿维微信订阅号,随时随地学习工控技术!&
给TA发消息
加TA为好友 发表于: 12:54:41 1楼
&不错,谢谢分享 !
给TA发消息
加TA为好友 发表于: 11:45:14 2楼
回复内容:对:&阿水--王者之师&&&不错,谢谢分享&!&&内容的回复!&&谢谢&夸奖,,,,,,,,,,,
周点击排行周回复排行
[159] [142] [85] [58] [54] [43] [41] [40] [38] [34]
[14] [11] [7] [5] [4] [4] [4] [4] [3] [3]最新求助
[0] [0] [2] [2] [3] [1] [0] [0] [2] [11]http://blog.csdn.net/delacroix_xu/article/details/5928121
最近发觉自己博客转帖的太多,于是决定自己写一个原创的。笔者用过MPI和C#线程池,参加过比赛,有所感受,将近一年来,对多线程编程兴趣一直不减,一直有所关注,决定写篇文章,算是对知识的总结吧。有说的不对的地方,欢迎各位大哥们指正:)
1.CPU发展趋势
核 心数目依旧会越来越多,依据摩尔定律,由于单个核心性能提升有着严重的瓶颈问题,普通的桌面PC有望在2017年末2018年初达到24核心(或者16核 32线程),我们如何来面对这突如其来的核心数目的增加?编程也要与时俱进。笔者斗胆预测,CPU各个核心之间的片内总线将会采用4路组相连:),因为全 相连太过复杂,单总线又不够给力。而且应该是非对称多核处理器,可能其中会混杂几个DSP处理器或流处理器。
2.多线程与并行计算的区别
(1)多线程的作用不只是用作并行计算,他还有很多很有益的作用。
还在单核时代,多线程就有很广泛的应用,这时候多线程大多用于降低阻塞(意思是类似于
if(flag==1)
这样的代码)带来的CPU资源闲置,注意这里没有浪费CPU资源,去掉sleep(1)就是纯浪费了。
阻 塞在什么时候发生呢?一般是等待IO操作(磁盘,数据库,网络等等)。此时如果单线程,CPU会干转不干实事(与本程序无关的事情都算不干实事,因为执行 其他程序对我来说没意义),效率低下(针对这个程序而言),例如一个IO操作要耗时10毫秒,CPU就会被阻塞接近10毫秒,这是何等的浪费啊!要知道 CPU是数着纳秒过日子的。
所以这种耗时的IO操作就用一个线程Thread去代为执行,创建这个线程的函数(代码)部分不会被IO操作阻塞,继续干这个程序中其他的事情,而不是干等待(或者去执行其他程序)。
同 样在这个单核时代,多线程的这个消除阻塞的作用还可以叫做&并发&,这和并行是有着本质的不同的。并发是&伪并行&,看似并行,而实际上还是一个CPU在 执行一切事物,只是切换的太快,我们没法察觉罢了。例如基于UI的程序(俗话说就是图形界面),如果你点一个按钮触发的事件需要执行10秒钟,那么这个程 序就会假死,因为程序在忙着执行,没空搭理用户的其他操作;而如果你把这个按钮触发的函数赋给一个线程,然后启动线程去执行,那么程序就不会假死,继续相 应用户的其他操作。但是,随之而来的就是线程的互斥和同步、死锁等问题,详细见有关文献。
现在是多核时代了,这种线程的互斥和同步问题是更加严峻的,单核时代大都算并发,多核时代真的就大为不同,为什么呢?具体细节请参考有关文献。 我这里简单解释一下,以前volatile型变量的使用可以解决大部分问题,例如多个线程共同访问一个Flag标志位,如果是单核并发,基本不会出问题 (P.S.在什么情况下会出问题呢?Flag有多个,或者是一个数组,这时候只能通过逻辑手段搞定这个问题了,多来几次空转无所谓,别出致命问题就行), 因为CPU只有一个,同时访问这个标志位的只能有一个线程,而多核情况下就不太一样了,所以仅仅volatile不太能解决问题,这就要用到具体语言,具 体环境中的&信号量&了,Mutex,Monitor,Lock等等,这些类都操作了硬件上的&关中断&,达到&原语&效果,对临界区的访问不被打断的效 果,具体就不解释了,读者可以看看《现代操作系统》。
(2)并行计算还可以通过其他手段来获得,而多线程只是其中之一。
其他手段包括:多进程(这又包括共享存储区的和分布式多机,以及混合式的),指令级并行。
ILP(指令级并行),x86架构里叫SMT(同时多线程),在MIPS架构里与之对应的是super scalar(超标量)和乱序执行,二者有区别,但共同点都是可以达到指令级并行,这是用户没法控制的,不属于编程范围,只能做些有限的优化,而这有限的优化可能只属于编译器管辖的范畴,用户能做的甚少。
(3)典型的适于并行计算的语言
Erlang和MPI:这两个前者是语言,后者是C++和Fortran的扩展库,效果是一样的,利用多进程实现并行计算,Erlang是共享存储区的,MPI是混合型的。
C#.NET4.0:新版本4.0可以用少量代码实现并行For循环,之前版本需要用很繁琐的代码才能实现同样功能。这是利用了多线程实现并行计算。Java和C#3.5都有线程池(ThreadPool),也是不错的很好用的多线程管理类,可以方便高效的使用多线程。
CUDA, 还是个初生牛犊,有很大的发展潜力,只不过就目前其应用领域很有限。其目前只能使用C语言,而且还不是C99,比较低级,不能使用函数指针。个人感觉这由 于硬件上天生的局限性(平均每个核心可用内存小,与系统内存通讯时间长),只适用于做科学计算,静态图像处理,视频编码解码,其他领域,还不如高端 CPU。等以后GPU有操作系统了,能充分调度GPU资源了,GPU就可以当大神了。游戏中的物理加速,实际上多核CPU也能很好的做到。
其他语言。。。恩。。留作将来讨论。
3.线程越多越好吗?什么时候才有必要用多线程?
线程必然不是越多越好,线程切换也是要开销的,当你增加一个线程的时候,增加的额外开销要小于该线程能够消除的阻塞时间,这才叫物有所值。
Linux自从2.6内核开始,就会把不同的线程交给不同的核心去处理。Windows也从NT.4.0开始支持这一特性。
什么时候该使用多线程呢?这要分四种情况讨论:
a.多核CPU&&计算密集型任务。此时要尽量使用多线程,可以提高任务执行效率,例如加密解密,数据压缩解压缩(视频、音频、普通数据),否则只能使一个核心满载,而其他核心闲置。
b.单核CPU&&计算密集型任务。此时的任务已经把CPU资源100%消耗了,就没必要也不可能使用多线程来提高计算效率了;相反,如果要做人机交互,最好还是要用多线程,避免用户没法对计算机进行操作。
c.单核CPU&&IO密集型任务,使用多线程还是为了人机交互方便,
d.多核CPU&&IO密集型任务,这就更不用说了,跟单核时候原因一样。
4.程序员需要掌握的技巧/技术
(1)减少串行化的代码用以提高效率。这是废话。
(2)单一的共享数据分布化:把一个数据复制很多份,让不同线程可以同时访问。
(3)负载均衡,分为静态的和动态的两种。具体的参见有关文献。
阅读(...) 评论() &MPI并行计算考试简答题_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
MPI并行计算考试简答题
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢大数据并行计算利器之MPI/OpenMP - 文章 - 伯乐在线
& 大数据并行计算利器之MPI/OpenMP
图像连通域标记算法是从一幅栅格图像(通常为二值图像)中,将互相邻接(4邻接或8邻接)的具有非背景值的像素集合提取出来,为不同的连通域填入数字标记,并且统计连通域的数目。通过对栅格图像中进行连通域标记,可用于静态地分析各连通域斑块的分布,或动态地分析这些斑块随时间的集聚或离散,是图像处理非常基础的算法。目前常用的连通域标记算法有1)扫描法(二次扫描法、单向反复扫描法等)、2)线标记法、3)区域增长法。二次扫描法由于简单通用而被广泛使用!
图1 连通域标记示意图
随着所要处理的数据量越来越大,使用传统的串行计算技术的连通域标记算法运行时间过长,难以满足实际应用的效率需求。随着并行计算技术的发展,利用不同的编程模型,许多数据密集型的计算任务可以被同时分配给单机多核或多机多处理器进行并行处理,从而有可能大幅度缩减计算时间。目前在集群计算领域广泛使用MPI来进行并行化,在单机领域广泛使用OpenMP进行化,本文针对基于等价对的二值图像连通域标记算法的进行了并行化设计,利用不同的并行编程模型分别实现了不同的并行算法,并通过实验对利用不同并行编程模型所实现的连通域标记算法进行了性能对比分析。
2 二次扫描串行算法思想
顾名思义,二次扫描串行算法步骤包含两部分。
2.1 第一次扫描
b)等价关系建立
2.2 第二次扫描
利用并查集链表进行标记更新。
3 并行化策略
3.1 数据划分并行策略
二次扫描的串行算法中,非直接相邻的各像元数据之间是无关的,将图像分割为数据块后,对于各个数据块之间的主体运算也是独立无关的,可并行性较高,因此可通过对图像进行分块来加快计算时间、提高计算效率。
3.2 并行算法步骤
a)各个进程分别使用串行算法计算
b)各个进程将各块的标记值唯一化
c)生成等价对数组
d)主进程生成全局并查集链表
将1到n-1进程中比较获得的等价对数组统一发送给0进程,0进程生成并查集链表。
e)广播全局并查集链表,各进程更改标记值
主进程广播全局并查集链表,各进程接收后更新标记值。
4 程序实现
并行算法详细流程图。
MPI版本和OpenMP版本的并行算法。
5 测试准备
5.1 实验目的
a)正确性;
b)效率:测试不同连通域数目的数据、不同机器环境(单机和集群)、不同并行编程模型(MPI和OpenMP)对二次扫描并行算法效率的影响。
5.2 测试环境
CPU:两颗Intel(R) Quad Core E5645 Xeon(R) CPU,共12核;
内存:80GB ;操作系统:Linux CentOS 64位。
b)高性能集群(4个计算节点,1个存储节点)
CPU:两颗Intel(R) Quad Core E5645 Xeon(R) CPU,共12核;
内存:32GB;操作系统:Linux CentOS 64位;
节点间文件系统:Network File System (NFS)。
c)测试数据
两个相同数据量( 1 )的二值栅格图像,一个连通域为3个(简单图),一个连通域为10433个(复杂图)
效率测试结果
6.1 结果1:复杂图和简单图的运行时间
6.2 为什么复杂图计算时间更长?
6.3 结果2:单节点环境下,复杂图和简单图的加速比
6.4 问题1:为什么会出现超线性加速比?
原因:并查集链表的影响。
连通域标记算法很多时间用于对并查集链表进行大量查询和插入操作。
6.5 问题2:为什么复杂图比简单图加速比高?
6.6 结果3:集群环境下,复杂图和简单图的加速比
6.7 问题:为什么进程数超过12时,复杂图加速比不再上升,而简单图加速比继续上升?
6.8 结果4:OpenMP版本与MPI版本的比较?
6.9问题:为什么MPI 1个进程比OpenMP 1个线程更高效?
6.10 OpenMP开辟线程的开销?
6.11 OpenMP编译制导语句会影响编译结果?
OpenMP编译制导语句会影响编译结果,这也可以解释单线程OpenMP程序比串行程序慢这一现象。
连通域标记算法的并行化研究,马益杭、占利军、谢传节、秦承志,《地理与地理信息科学》
打赏支持我写出更多好文章,谢谢!
打赏支持我写出更多好文章,谢谢!
关于作者:
可能感兴趣的话题
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线}

我要回帖

更多关于 mpi环境变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信