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

网站同步到新浪微博怎么做中国建设银行个人登陆网站

网站同步到新浪微博怎么做,中国建设银行个人登陆网站,什么是百度指数,公司网站开发完成后怎么办第三章 MPI编程 3.1 MPI简单介绍 多线程是一种便捷的模型#xff0c;当中每一个线程都能够訪问其他线程的存储空间。因此#xff0c;这样的模型仅仅能在共享存储系统之间移植。一般来讲#xff0c;并行机不一定在各处理器之间共享存储#xff0c;当面向非共享存储系统开发… 第三章 MPI编程   3.1 MPI简单介绍 多线程是一种便捷的模型当中每一个线程都能够訪问其他线程的存储空间。因此这样的模型仅仅能在共享存储系统之间移植。一般来讲并行机不一定在各处理器之间共享存储当面向非共享存储系统开发并行程序时程序的各部分之间通过来回传递消息的方式通信。要使得消息传递方式可移植就须要採用标准的消息传递库。这就促成的消息传递接口(Message Passing Interface, MPI)的面世MPI是一种被广泛採用的消息传递标准[1]。 与OpenMP并行程序不同MPI是一种基于消息传递的并行编程技术。消息传递接口是一种编程接口标准而不是一种详细的编程语言。简而言之MPI标准定义了一组具有可移植性的编程接口。各个厂商或组织遵循这些标准实现自己的MPI软件包典型的实现包含开放源码的MPICH、LAM MPI以及不开放源码的Intel MPI。因为MPI提供了统一的编程接口程序猿仅仅须要设计好并行算法使用对应的MPI库就能够实现基于消息传递的并行计算。MPI支持多种操作系统包含大多数的类UNIX和Windows系统。 3.1.1怎样实现MPI MPI是一个标准。它不属于不论什么一个厂商不依赖于某个操作系统也不是一种并行编程语言。不同的厂商和组织遵循着这个标准推出各自的实现而不同的实现也会有其不同的特点。MPICH是影响最大、用户最多的MPI实现。眼下可下载的最新的MPICH软件包为MPICH1.2.7pl和2008年2月15日公布的MPICH 2-1.0.7測试版(我使用的是MPICH 2-1.0.6pl)在http://www.mcs.anl.gov/research/projects/mpich2/index.php能够下载到分别有支持UNIX和Windows的32位和64位版本号。 3.1.2 MPI程序的特点 MPI程序是基于消息传递的并行程序。消息传递指的是并行运行的各个进程具有自己独立的堆栈和代码段作为互不相关的多个程序独立运行进程之间的信息交互全然通过显示地调用通信函数来完毕。 3.2 MPICH的安装和配置 我使用的MPICH2安装文件是mpich2-1.0.6p1-win32-ia32.msi在Windows下安装MPICH2比較简单可是要有Microsoft .NET Framework 2.0的支持。安装基本上仅仅要单击“Next”就可以。在安装过程中会提示输入进程管理器的password这个password被用来訪问全部的程序这里使用的password为admin。 安装完毕后安装文件夹下的include子文件夹包括了编程所须要的全部头文件lib子文件夹包括了对应的程序库而子文件夹bin则包括了MPI在Windows以下必须的执行程序。执行时须要的动态链接库被安装在了Windows系统文件夹中。在Windows平台下能够使用Microsoft Visual Studio来开发MPI程序以下举例说明。 首先新建一个Win32控制台项目然后将MPICH2安装文件夹下的include 图3-1 配置头文件文件夹   子文件夹增加到头文件文件夹中。在VS 2005的菜单 工具选项项目解决方式VC文件夹对话框中增加include子文件夹如图3-1所看到的。再用同样的方法将MPICH2\lib增加到库文件文件夹中如图3-2。   图3-2 配置库文件文件夹   为了避免名字冲突须要在预编译头文件stdafx.h中增加#inlcude mpi.h语句。如今就能够在主程序文件里编写MPI程序了MPI的开发环境配置完成。 3.3 在Windows下怎样执行MPI程序 我所进行的MPI程序的开发均是在Windows平台下使用Visual Studio 2005 MPIEXEC wrapper 进行的首先用一个简单的Hello World 程序说明执行环境的配置。 依照上一小节介绍配置好开发环境之后在VS 2005中新建立一个Win32 控制台项目并取名MPI1在MPI1.CPP文件里输入以下的程序。在项目属性的“配置属性”“常规”项中的“字符集”设置为“未设置”如图3-3所看到的。 例3_1 int _tmain(int argc, _TCHAR* argv[]) {   int rank, size;        MPI_Init(argc, argv);        MPI_Comm_rank(MPI_COMM_WORLD, rank);        MPI_Comm_size(MPI_COMM_WORLD, size);        printf(Hello World from thread %d of %d\n, rank, size);        MPI_Finalize();        return 0; } 这个程序比較简单在函数MPI_Init()和MPI_Finalize()之间是程序并行运行的地方MPI_Init()、MPI_Comm_rank()、MPI_Comm_size()和MPI_Finalize()这四个函数是MPI中最重要和最经常使用的函数。以下分别说明 图3-3 配置项目属性 1    MPI_Init和MPI_Finalize MPI_Init用来初始化MPI运行环境建立多个MPI进程之间的联系为兴许通信做准备。而MPI_Finalize则是结束MPI运行环境。这两个函数就是定义MPI程序的并行区的除了检測是否初始化的函数之外不应该在这两个函数定义的区域外调用其他MPI函数。这两个函数都返回整型值标识函数是否调用成功。 2    MPI_Comm_rank MPI_Comm_rank函数就是用来标识各个MPI进程的给出调用该函数的进程的进程号。MPI_Comm_rank返回整型的错误值须要提供两个參数 l        MPI_Comm类型的通信域标识參与计算的MPI进程组。上面样例中使用的是MPI_COMM_WORLD这个进程组是MPI实现预先定义好的进程组指的是全部MPI进程所在的进程组。假设想要申请自己的特殊的进程组则须要通过MPI_Comm定义并通过其他MPI函数生成。 l        rank返回调用进程中的标识号。 MPI还定义了还有一个进程组MPI_COMM_SELF,仅仅包括各个进程自己的进程组。 3    MPI_Comm_size 这个函数则用来标识对应进程组中有多少个进程它也有两个參数 l        MPI_Comm类型的通信域标识參与计算的MPI进程组。上面的样例中用的是MPI_COMM_WORLD。 l        size返回对应进程组中的进程数。 执行这个程序执行结果如图3-4,依照并行执行的方式上面程序执行结果应该打印两行文字信息为 Hello World from thread 0 of 2 Hello World from thread 1 of 2   图 3-4 例3_1在windows上的执行结果 本机系统环境变量OMP_NUM_THREADS值是2可是执行结果确仅仅打印了一行显然函数MPI_Init和MPI_Finalize之间的代码仅被一个线程串行执行了。经过查询资料知道MPI程序若要被正确执行须要使用MPICH2安装文件夹下的执行工具MPIEXEC wrapper执行用VS 2005生成的exe文件。启动这个程序程序的界面如图3-5   图 3-5 MPIEXEC wrapper程序界面 因为该程序仅仅有操作系统的管理员才有权使用所以在第一次执行时须要输入计算机username和口令而且不同意口令为空如图3-6。输入完毕后单击“Register”button完毕注冊之后就能够使用该工具执行MPI程序了。 在“Application”栏中选择要执行的exe程序在“Number of process”栏中选择要执行程序的线程数然后单击“Execute”button执行程序。如用4线程执行上面的演示样例程序输出结果如图3-7所看到的。                图 3-6 输入系统username和口令   图 3-7 使用MPIEXEC wrapper执行例3_1的结果   4线程分别运行MPI_Init和MPI_Finalize之间的代码打印4行信息程序运行结果正确。 3.4 MPI的点对点通信 点对点通信是MPI程序的基础MPI_Send和MPI_Recv是两个最重要的函数。这两个函数的标准形式是 l        int MPI_Send(buf, counter, datatype, dest, tag, comm) 參数作用例如以下     buf发送缓冲区的起始地址能够是数组或结构指针     count非负整数发送的数据个数     datatype发送数据的数据类型     dest整型目的的进程号     tag整型消息标志     commMPI进程组所在的通信域 这个函数返回整型的错误码它的含义是向通信域中的dest进程发送数据数据存放在buf中类型是datatype个数是count这个消息的标志是tag用以和本进程向同一目的进程发送的其他消息差别开来。 l        int MPI_Recv(buf, count, datatype, source, tag, comm, status) 參数作用例如以下     buf接收缓冲区的起始地址能够是数组或结构指针     count非负整数最多可接收的数据个数     datatype接收数据的数据类型     source整型接收数据的来源即发送数据进程的进程号     tag整型消息标识应与发送操作的消息标识同样     comm消息接收进程所在的通信域     statusMPI_Status结构指针返回状态信息 这个函数返回整型的错误码它的含义是进程从comm域中source进程接收标签号为tag的数据并保存到buf中。接收缓冲区buf的大小不能小于发送过来的消息的长度。否则会因为数组越界导致程序出错。參数status是MPI_Status类型的status主要显示接收函数的各种错误状态。通过訪问status.MPI_SOURCE、status.MPI_TAG和status.MPI_ERROR就能够得到发送数据的进程号、使用的标签以及接收操作的错误代码。另外还能够使用函数MPI_Get_count来获得实际接收到的数据项数。MPI_Get_count的标准定义为int MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int *count);将实际接收到数据项数存放到count中。以下用一个程序说明上面提到的函数的用法。 演示样例程序见例3_2 程序的执行结果如图3-84个进程 函数MPI_Get_processor_name用于获得计算机名并存放在processor_name中长度为namelen宏定义MPI_MAX_PROCESSOR_NAME是机器名的最大长度。这个程序的完毕的任务是使进程i发送数据给进程i1并等待由进程i-1发送来的数据。最后一个进程则发送数据给进程0。 3.5统计时间函数 为了验证程序并行化后的效果MPI提供了两个用于统计时间的函数 MPI_Wtime和MPI_Wtick。当中MPI_Wtime返回一个双精度数表示从过去某点的时刻到当前时刻所消耗的时间秒数。而函数MPI_Wtick则返回MPI_Wtime结果的精度。改动例3_2程序在并行代码两端增加统计时间的函数如例3_3 例 3_3(完整程序见演示样例程序4_3)        begin MPI_Wtime();        end MPI_Wtime();        diff end - begin;        printf(%d process time is %9.7f\n, myid, diff);        printf(%d process tick is %9.7f\n, myid, MPI_Wtick()); } 执行结果如图3-9     图 3-8 例3_2的执行结果     图 3-9 例3_3的执行结果 3.6负载均衡对程序性能的影响 在并行计算中假设各个处理器上的工作所须要的完毕时间不同则会使先完毕工作的处理器等待未完毕工作的处理器浪费了计算资源。这时应该使各个处理器的负载尽量均衡。一般採用的策略有两种静态负载平衡和动态负载平衡。前者适用于计算前能够准确知道负载并且这些负载easy平均划分给各个进程的情况。而对于事先不知道负载情况或者总负载不易划分的情况则须要採用动态负载划分来解决。在动态负载平衡模式中存在一个管理结点负责给各个进程分配任务当一个进程完毕当前的计算任务后它就向管理结点申请新的任务假设还有未分配的任务管理结点就将任务分配给那个进程这有点类似于计算机硬件向CPU发中断请求服务的方式。 3.7 开发实例 以下将在Windows平台上使用MPI编写一个用数值积分法计算圆周率的程序。利用公式PI 的近似值计算圆周率[7]定积分的计算能够转化为求一个曲边梯形的面积问题。将积分区间等分成n个小的子区间可将每一个小的子区间上的曲边梯形近似地看成矩形这些矩形面积的和就近似地等于原来曲边梯形的面积。这样终于将求圆周率的问题转化成了一个面积迭加的计算。每一个小矩形的宽为   (n为将积分区间等分的份数)高能够将x值带入函数   求得。用循环将每一个小矩形的面积累加起来便是PI的近似值。详细的算法实现见附加中的程序“mpi_pi”。图3-10、3-11各自是用一个进程和两个进程执行的结果。   图3-10 使用一个进程的执行结果 图3-11 使用两个进程的执行结果 从执行结果能够看到使用两个进程时的计算速度反而不如用一个进程执行时的速度这时因为本程序的计算规模不大另外引入一个进程的开销大于程序并行所带来的益处所以进程数越多反而程序的执行速度越慢。看以下一组数据[8](表3-1) 计算机数 计算时间 1 1.63643 2 0.83180 3 0.55622 这组数据是在不同的硬件平台下实现本开发实例程序的计算时间。执行环境为3 台计算机组成的集群, 配置均为CPU : Intel PentiumIII 733MHz同样的算法随着參与计算的机器数添加计算时间降低。 MPI是针对分布式计算机系统提出的它採用非共 表3-1                享内存的方式利用多进程完毕并行任务当计算规模不大或处理器数量不多时很多其它进程的维护会添加系统的开销并且进程之间的通信存在延时。它比較适合集群计算机系统。 3.8 小结 本章对MPI编程进行了初步研究介绍了MPI程序的特点、软件包的安装、MPI程序的执行方式。 MPI是一种基于消息传递的并行编程技术,而不是一种详细的编程语言。MPI程序与OpenMP程序的最大不同就是MPI程序不仅能够适用多线程的方式并行运算还能够让程序以多进程的方式运行以这样的方式运行的程序并不共享内存各个进程是通过消息传递来进行通信的。这样做的优点是完毕某一计算任务的不同进程能够运行在不同处理器上(不仅仅是处理器的不同核上)甚至是不同的结点计算机上方便分布式计算系统的构建。在多核上使用MPI能够採用两种方式一种是在多核平台上开发传统的多进程MPI并行程序一个核运行一个MPI进程。第二种方式是採用MPI OpenMP的方法在结点内採用多线程方式结点间採用MPI多进程方式。 转自http://blog.csdn.net/gexplore/article/details/7078832
http://www.pierceye.com/news/537923/

相关文章:

  • dremrever怎么做网站阿里云php网站建设教程
  • 网站建设课程旅行社手机网站建设方案
  • 书店网站建设策划书总结关于外贸公司的网站模板
  • 张家港市规划建设网站房地产估价师
  • 创建网站有什么用南京做网站优化的企业
  • 网站seo设置是什么怎么知道网站被百度k了
  • 个人网站开发的意义自己建设网站需要什么手续
  • 网站的建设流程怎样使用仿站小工具做网站
  • 佛山企业模板建站企业微信管理系统
  • 百度推广登录网站网站开发需要什么技术人员
  • 有关网站升级建设的申请书中国工业设计公司
  • 线上销售怎么做优化网站哪家好
  • 成都网站建设备案audio player wordpress 使用
  • 做网站设计的公司上海装修公司名字
  • 处理器优化软件se 网站优化
  • 网站制作公司汉狮网络电子商务网站建设评估的指标有哪些?
  • asp网站伪静态教程网站建设多少钱实惠湘潭磐石网络
  • wordpress 外贸网站建设wordpress模板安装
  • 中国精准扶贫网站建设现状惠安规划局建设局网站
  • 营销型网站制作建设网络营销推广技巧
  • 哪里有做网站推广的宁波招聘网站开发
  • 建站工具帝国双语网站开发
  • 呼和浩特企业网站建设赞叹天河网站建设公司
  • 新郑做网站公司吉林省建设项目招标网
  • 深圳做网站哪里最好南宁seo外包平台
  • 新开传奇网站推荐做百度推广怎么做才能有电话
  • 文件夹里内容做网站的分类做网站上线一般要多久
  • 企业网站页头背景图河南网络优化服务
  • 成品网站nike源码免费现在装宽带要多少钱
  • 綦江建设银行网站外贸精品网站建设