“道系统”并行计算环境

2018-10-30 11:35:00
李昱江
原创 1137
摘要:并行计算

“物不可以终难,故授之以解,解者缓也。” 出自《易经》

自然的法则,一件事情不会永远困难,困久了就会想办法找出路。

现状

北京科银京成技术有限公司(以下简称“科银京成”)是国产嵌入式实时操作系统的提供商,其自主研发的“道系统”实时操作系统已经成功应用于航空、舰船、兵器、航天等对可靠性、安全性、实时性严格要求的领域。

传统意义上,不管是何种领域的嵌入式设备,都是针对不同的应用场景进行定制,以低功耗、高安全为首要目标,但是随着应用软件复杂程度的提高,数据量不断增加,计算密集型的应用不断应用于嵌入式设备领域中,尤其在道系统广泛应用的国防领域,显著的例子就是复杂弹道的计算、雷达数据的分析等。

虽然随着硬件科技的发展,单个嵌入式设备的硬件性能越来越高,但是针对密集型计算应用,传统的计算方式在CPU占用率与计算效率上,不能满足应用场景需求,有时因为单个设备中CPU占用率过高而影响设备中其他程序的运行,导致整个系统出错。

因此在嵌入式设备领域,功耗、实时性与计算效率在一定程度上形成了一个天平的两端。

 

解决方案

为了应对在嵌入式设备中对于密集计算效率低下的问题,采用空间换时间的方式。通过使用同一个局域网内空闲的计算节点,组成并行计算的运行环境,从而提高复杂计算的效率。

并行计算在高效计算领域有着很高的地位,一般运行于超级计算机的计算环境中,用于大型物理问题的仿真与计算,如预测天气、分子模拟、物理模拟等。

科银京成通过充分的调研,参考并行计算在各个领域的应用情况,对当前流行的并行计算的实现方式进行了分析与对比,最终采用基于消息传递实现的MPICH作为并行计算环境的基础。(MPI是针对并行计算提供的一套基于消息传递的编程接口标准,MPICH是MPI标准的开源实现。)

"道系统"作为实时操作系统,其提供的用户态实时进程(与传统进程不同)与完备的POISX接口,为移植MPICH打下坚实的基础。

"道系统"MPI产品

科银京成针对嵌入式设备领域进行并行计算应用开发提供了一整套解决方案。

针对嵌入式实时操作系统("道系统"6.0),提供了MPI组件支持,为MPI应用程序运行提供稳定的基础核心。

"道系统"基础开发环境,为MPI应用程序开发进行了定制,提供了MPI项目编译、MPI目标机工作集、MPI一键部署、一键运行等功能,方便用户进行MPI应用程序的开发与运行。

MPI应用测试

为了在"道系统"中进行并行计算方式与传统计算方式之间的对比,我们搭建了验证环境,并且编写了相关代码。

验证环境:

三张相同配置的X86体系结构的板卡,同时运行"道系统"6.0。 其中一张板卡运行传统的π运算算法,另外两张板卡运行π运算的并行算法。

验证目的:

统计分析计算时间与单个节点CPU占用率的情况,对比传统计算与并行计算的差距,体现"道系统"MPI并行程序的优势。

π的求解方式如下:

MPI并行程序如下:

   /*     * mpi.c     *     *  Created on: 2018-8-30     *      Author: kelton     */   #include<stdio.h>   #include<mpi.h>   #include<time.h>       intmain(intargc,char* argv[]) {    inti;    intmyrank;    intsize;    intn=1000000000;    clock_t t=0;    doublex,pi,sum=0;    doublestep=1.0/n;        //初始化MPI环境   MPI_Init(&argc, &argv);        //获取当前进程在通信器MPI_COMM_WORLD中的进程号   MPI_Comm_rank(MPI_COMM_WORLD, &myrank);    MPI_Comm_size(MPI_COMM_WORLD, &mysize);        t-=clock();    for(i=myrank;i<n;i=i+mysize)    {          x=(i+0.5)*step;          sum+=4.0/(1+x*x);    }        MPI_Reduce(&sum,&pi,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);    if(myrank==0)    {          pi=step*pi;          t+=clock();          printf("run time is:%10f\n", t/1000.0);    }        MPI_Finalize();    return0;    }

使用"道系统"MPI集成开发环境能够很方便的开发和运行MPI应用程序,以下就是具体的开发步骤:

开发步骤如下:

  1. 在使用"道系统"进行MPI应用程序开发之前,我们需要通过LambdaPRO进行内核项目的创建,并选择MPI组件。

  1. 在MPI运行环境配置中,用户可以配置MPI节点数目、节点IP地址、MPI应用程序运行目录等信息。

  1. 用户在配置完"道系统"之后,就可以对内核进行编译,编译成功之后,将内核文件和项目中mpi目录中的文件部署到节点设置的运行目录中,MPI目录中的文件如下图所示:

  1. 部署完成内核镜像之后,用户即可通过新建实时进程项目来完成代码的编写(代码如上),编译,部署,运行。 在运行MPI应用程序之前,我们将程序进行部署,在实时进程项目中点击右键就可以进行应用的一键部署:

  1. 在部署完成后,在rtp项目中右键选择MPI运行,就可以进行MPI应用程序的运行。右键点击MPI运行按钮之后,选择对应的MPI目标机工作集,然后就进入MPI程序运行界面:

在该界面中,用户需要选择运行的主节点、以及需要运行的总进程数,以及每个节点的进程个数分配,PS:"每个节点的进程数加起来需要等于总进程数"。其他选项可根据用户需求进行配置。

点击“运行”按钮就可以成功运行MPI应用程序了。

通过对比传统计算方式与并行计算的运行结果,两种不同配置下程序的CPU占用率、计算时间(纵轴是CPU占用率,横轴是计算时间)如下图所示:

验证结果:

通过以上测试可发现,在进行π运算时,普通串行程序占用了90%左右的CPU使用率,运行时间也达到了8s。而使用MPI并行程序进行π运算时,通过2个板卡进行运算,单个节点CPU使用率只有25%左右,运行时间也在2s-3s间,效率提升了4倍左右。

由此可见,单个计算设备的串行计算与多个计算设备的并行计算,在计算效率上有很大的差距。在嵌入式设备领域中,如果存在多余空闲计算设备时,可以采用并行计算的方式来解决一些计算密集型应用的问题。

应用领域

"道系统"并行计算环境能够应用于使用嵌入式设备作为主要计算平台,同时需要实时性、安全性的领域,如航空、航天、舰船、轨道交通等。

未来"道系统"并行计算环境将会支持更多的国产化平台,形成嵌入式领域自主可控并行计算平台的解决方案。

安全性、实时性高是“道系统”的基础特质,在嵌入式设备应用领域,道系统将会根据业务的需求,提供更多外围组件,感谢广大合作伙伴对科银京成的支持。