CN104360941A - 采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法 - Google Patents
采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法 Download PDFInfo
- Publication number
- CN104360941A CN104360941A CN201410619036.8A CN201410619036A CN104360941A CN 104360941 A CN104360941 A CN 104360941A CN 201410619036 A CN201410619036 A CN 201410619036A CN 104360941 A CN104360941 A CN 104360941A
- Authority
- CN
- China
- Prior art keywords
- mpi
- openmp
- compiling
- computing cluster
- stream benchmark
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开一种采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法,属于多线程应用技术领域,在计算集群中部署MPI环境,将OpenMP部署于各个计算机节点,运行计算集群;STREAMBenchmark运行之前对源代码进行编译,OpenMP实现计算机节点的不同线程间通信,MPI实现不同计算机节点间的传递数据,实现同步,并将STREAMBenchmark自动迁至闲置计算节点;本发明综合使用MPI与OpenMP编译,使STREAMBenchmark测试性能比单独应用于MPI环境时更精确。
Description
技术领域
本发明公开一种提高计算集群的STREAM Benchmark测试性能的方法,属于多线程应用技术领域,具体地说是一种采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法。
背景技术
OpenMP是共享存储系统编程的工业标准,为 SMP 系统提供可移植、可扩展的开发接口。编译制导是对程序设计语言的扩展,进一步提供对并行区域、工作共享、同步构造的支持,并且支持数据的共享和私有化。运行库和环境变量使得用户可以调整并行程序的执行环境。作为一种轻量化的多线程实现工具,由于使用线程间共享内存的方式协调并行计算,它在多核/多CPU结构上的效率很高、内存开销小、编程语句简洁直观,因此编程容易、编译器的实现也容易;但由于其有着共享存储、隐式数据分配、线程级并行粒度等特点,OpenMP只适用于单台计算机共享内存结构上的并行计算,不能用于多台主机间的并行计算。
而MPI是由学术界、政府和工业协会共同开发的一个消息传递编程模型的实现标准,是目前分布式存储系统上的主流编程模型。它不是一门独立的编程语言,而是一个库,提供了与FORTRAN和C/C++语言的绑定。MPI适用于共享和分布式存储的并行计算环境,用它编写的程序可以直接在SMP集群上运行。MPI具有可移植性好、功能强大、效率高等优点,特别适用于粗粒度的并行,几乎被所有多线程操作系统(包括UNIX,Windows NT等)支持,是目前超大规模并行计算最可信赖的平台。MPI是目前主流的用于多主机联网协作进行并行计算的工具,能协调多台主机间的并行计算,因此并行规模上的可伸缩性很强,具有很高的可扩展性;但由于其运行级别为进程级,使用进程间通信的方式协调并行计算,所以导致并行效率较低、运行时系统资源开销大、运行效果不直观、编译麻烦。
由于STREAM Benchmark主要应用于单一计算平台的测试,对于OpenMP有着良好的兼容性,其源代码通过简单的编译即可运行。但是当应用于MPI环境时,其效率远低于OpenMP环境,本发明通过综合使用以上两种环境,使得STREAM Benchmark在多个计算机组成的并行计算平台上的测试性能比单独应用于MPI环境时得到大幅提高,而且简单易行,应用性强,适合各种主流计算平台。
发明内容
本发明针对现有技术存在的不足和问题,提供一种采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法,提出的具体方案是:
采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法,具体步骤为:
在计算集群中部署MPI环境,将OpenMP分别部署于计算集群中的各个计算机节点,运行计算集群,在MPI环境中可多线程并发运行程序,线程分配由人为操作来决定每个计算机节点上运行的线程数;
STREAM Benchmark以源代码的方式发行,运行之前对源代码进行编译,引入编译器编译的程序同时应用于MPI及OpenMP,添加 OpenMP 和 MPI 的相关语句和函数,同时满足MPI和OpenMP的要求;
在MPI与OpenMP混合编译的条件下运行STREAM Benchmark,OpenMP实现计算机节点的不同线程间通信,MPI实现不同计算机节点间的传递数据,实现同步,并将STREAM Benchmark自动迁至闲置计算节点。
所述的计算集群由多个独立运行的计算机系统所组成的,并且是非共享内存的,每个计算机节点都拥有独立使用的系统资源。
所述的引入的编译器是计算集群中计算系统的编辑器及MPI本身的编译器。
所述的多线程运行程序采用分类算法,使各计算机节点间使用 MPI 编程进行通信,传递数据,实现同步。
所述的计算系统是unix、linux、windowsNT。
本发明的有益之处是:本发明提供一种采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法,综合使用MPI与OpenMP编译,在各个节点上添加OpenMP编译,使其运行,利用MPI协调各个节点间的通信,弥补了OpenMP只能用于单一计算机的缺点,不仅使系统资源占用率低,STREAM Benchmark测试性能比单独应用于MPI环境时更精确,而且使得STREAM Benchmark能够较好的应用于大型计算集群中,简单易行,应用性强,适合各种主流计算平台。
附图说明
图1计算集群中MPI与OpenMP编译部署的示意图。
具体实施方式
MPI是基于消息传递机制的。通过在各个并行执行的部分之间传递消息来交换信息、协调步伐、控制执行。在通信域中发送和接受消息进行并行。
OpenMP 采用 Fork-Join 编程模型,执行模式在开始执行的时候,只有主线程存在。主线程在运行过程中,当遇到需要进行并行计算的时候,派生出Fork线程来执行并行任务。在并行执行的时候,主线程和派生线程共同工作。在并行代码结束执行后,派生线程退出或者挂起,不再工作,控制流程回到单独的主线程中Join。通过编译制导语句和运行时库函数实现并行。
采用MPI与OpenMP编译:为了充分利用两种编程模型,实现 MPI/OpenMP 的混合编译模型,可知上层的 MPI 表示计算机节点间的并行;下层的OpenMP表示计算机节点内的并行。
采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法,具体步骤为:
在计算集群中部署MPI环境,将OpenMP分别部署于计算集群中的各个计算机节点,运行计算集群,在MPI环境中可多线程并发运行程序,线程分配由人为操作来决定每个计算机节点上运行的线程数,计算集群由多个独立运行的计算机系统所组成的,并且是非共享内存的,每个计算机节点都拥有独立使用的系统资源;
STREAM Benchmark以源代码的方式发行,运行之前对源代码进行编译,引入编译器是计算集群中计算系统的编辑器及MPI本身的编译器,编译器编译的程序同时应用于MPI及OpenMP,添加 OpenMP 和 MPI 的相关语句和函数,同时满足MPI和OpenMP的要求;
在MPI与OpenMP混合编译的条件下运行STREAM Benchmark,OpenMP实现计算机节点的不同线程间通信,采用分类算法,使各计算机节点间使用 MPI编程进行通信,传递数据,实现同步,并将STREAM Benchmark自动迁至闲置计算节点。
具体实施为:将OpenMP分别部署于集群中的各个计算机参见图1,并在集群中部署MPI环境,以MPICH环境为例。
程序的编译:
以Linux系统为例,STREAM Benchmark以源代码的方式发行,所以在运行之前需要对源代码进行编译。编译中需要注意的是,对源代码的编译要同时满足MPI和OpenMP的要求,所以我们需要引入Linux中的GNU编译器及MPI本身的编译器。为了使编译的程序能同时应用于MPI及OpenMP,需要在编译中加入-fopenmp参数,以C++语言编译STREAM源代码,编译命令应为:
[rootlocalhost home]# mpicc-o stream stream.c-fopenmp_
编译完成后,在所有节点上运行4个进程,用以下命令运行:
[rootlocalhost home]# mpirun-np 4./stream_。
Claims (5)
1.采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法,其特征是具体步骤为:
在计算集群中部署MPI环境,将OpenMP分别部署于计算集群中的各个计算机节点,运行计算集群,在MPI环境中可多线程并发运行程序,线程分配由人为操作来决定每个计算机节点上运行的线程数;
STREAM Benchmark以源代码的方式发行,运行之前对源代码进行编译,引入编译器编译的程序同时应用于MPI及OpenMP,添加 OpenMP 和 MPI 的相关语句和函数,同时满足MPI和OpenMP的要求;
在MPI与OpenMP混合编译的条件下运行STREAM Benchmark,OpenMP实现计算机节点的不同线程间通信,MPI实现不同计算机节点间的传递数据,实现同步,并将STREAM Benchmark自动迁至闲置计算节点。
2.根据权利要求1所述的采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法,其特征是所述的计算集群由多个独立运行的计算机系统所组成的,并且是非共享内存的,每个计算机节点都拥有独立使用的系统资源。
3.根据权利要求2所述的采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法,其特征是所述的引入的编译器是计算集群中计算系统的编辑器及MPI本身的编译器。
4.根据权利要求1-3任一项所述的采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法,其特征是所述的多线程运行程序采用分类算法,使各计算机节点间使用 MPI 编程进行通信,传递数据,实现同步。
5.根据权利要求4所述的采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法,其特征是所述的计算系统是unix、linux、windowsNT。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410619036.8A CN104360941A (zh) | 2014-11-06 | 2014-11-06 | 采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410619036.8A CN104360941A (zh) | 2014-11-06 | 2014-11-06 | 采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104360941A true CN104360941A (zh) | 2015-02-18 |
Family
ID=52528205
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410619036.8A Pending CN104360941A (zh) | 2014-11-06 | 2014-11-06 | 采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104360941A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105095084A (zh) * | 2015-08-25 | 2015-11-25 | 浪潮(北京)电子信息产业有限公司 | 一种服务器虚拟化平台的虚拟机内存性能测试系统及方法 |
CN108932172A (zh) * | 2018-06-27 | 2018-12-04 | 西安交通大学 | 一种基于OpenMP/MPI混合并行CFD计算的细粒度共享内存通信同步方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6275956B1 (en) * | 1997-10-28 | 2001-08-14 | Electronics And Telecommunications Research Institute | Integrated dynamic-visual parallel debugging apparatus and method thereof |
CN102707955A (zh) * | 2012-05-18 | 2012-10-03 | 天津大学 | 采用MPI和OpenMP编程实现支持向量机方法 |
CN103699449A (zh) * | 2013-12-20 | 2014-04-02 | 北京遥测技术研究所 | 一种适用于监控mpi并行软件的通信方法 |
-
2014
- 2014-11-06 CN CN201410619036.8A patent/CN104360941A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6275956B1 (en) * | 1997-10-28 | 2001-08-14 | Electronics And Telecommunications Research Institute | Integrated dynamic-visual parallel debugging apparatus and method thereof |
CN102707955A (zh) * | 2012-05-18 | 2012-10-03 | 天津大学 | 采用MPI和OpenMP编程实现支持向量机方法 |
CN103699449A (zh) * | 2013-12-20 | 2014-04-02 | 北京遥测技术研究所 | 一种适用于监控mpi并行软件的通信方法 |
Non-Patent Citations (2)
Title |
---|
王堃: "基于多核的并行程序设计及优化", 《中国优秀硕士学位论文全文数据库》 * |
王杰: "基于多核机群环境的并行程序设计方法研究", 《中国优秀硕士学位论文全文数据库》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105095084A (zh) * | 2015-08-25 | 2015-11-25 | 浪潮(北京)电子信息产业有限公司 | 一种服务器虚拟化平台的虚拟机内存性能测试系统及方法 |
CN105095084B (zh) * | 2015-08-25 | 2018-02-09 | 浪潮(北京)电子信息产业有限公司 | 一种服务器虚拟化平台的虚拟机内存性能测试系统及方法 |
CN108932172A (zh) * | 2018-06-27 | 2018-12-04 | 西安交通大学 | 一种基于OpenMP/MPI混合并行CFD计算的细粒度共享内存通信同步方法 |
CN108932172B (zh) * | 2018-06-27 | 2021-01-19 | 西安交通大学 | 一种基于OpenMP/MPI混合并行CFD计算的细粒度共享内存通信同步方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104035781A (zh) | 一种快速开发异构并行程序的方法 | |
CN102708088A (zh) | 面向海量数据高性能计算的cpu/gpu协同处理方法 | |
CN102880474B (zh) | 并行源代码生成、编译及驱动执行的测试方法 | |
CN104536937A (zh) | 基于cpu-gpu异构集群的大数据一体机实现方法 | |
CN103699432A (zh) | 一种异构环境下的多任务运行时协同调度系统 | |
KR20140054948A (ko) | 임베디드 시스템을 위한 오픈씨엘 응용 소프트웨어 개발 지원 도구 구성 및 방법 | |
CN110968320A (zh) | 针对异构硬件架构的联合编译方法和编译系统 | |
CN103699365A (zh) | 一种众核处理器结构上避免无关依赖的线程划分方法 | |
CN103473072A (zh) | 一种移动云计算应用程序开发方法 | |
CN104360941A (zh) | 采用MPI与OpenMP编译提高计算集群的STREAM Benchmark测试性能的方法 | |
CN105808346A (zh) | 一种任务调度方法与装置 | |
CN104750533A (zh) | C程序编译方法及编译器 | |
CN107340995A (zh) | 一种牵引控制应用软件开发系统 | |
Khaldi et al. | SPIRE: A methodology for sequential to parallel intermediate representation extension | |
CN103631585A (zh) | 一种用于开发应用程序的方法及系统 | |
Liao et al. | OpenMC: Towards simplifying programming for TianHe supercomputers | |
Aldinucci et al. | Targeting heterogeneous architectures via macro data flow | |
Khaldi et al. | Spire: A sequential to parallel intermediate representation extension | |
Kjeldsberg et al. | Readex: Linking two ends of the computing continuum to improve energy-efficiency in dynamic applications | |
Malik et al. | Executing synchronous data flow graphs on heterogeneous execution architectures using integer linear programming | |
Cheung et al. | Speeding up database applications with pyxis | |
Nakao et al. | Multi-accelerator extension in openmp based on pgas model | |
Dümmler et al. | Programming support and scheduling for communicating parallel tasks | |
Bueno et al. | Poster: programming clusters of gpus with ompss | |
Woodard | Introduction to Parallel Programming |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150218 |