浅析并行计算编程技术

2016-07-09 09:57曾升谢鹏张瑾
数字技术与应用 2016年6期
关键词:并行计算高性能调试

曾升 谢鹏 张瑾

摘要:计算机技术的不断发展也推动了各行各业对性能和运算需求的增加,各种规模庞大、运算复杂的应用也相继问世,不同的并行计算编程技术和开发模式得到广大开发者的认同。本文从并行计算编程技术的概念分析开始,介绍了当前主流的并行计算编程技术开发模式,并详细描述了CUDA框架的GPU并行技术方法,旨在对并行程序的运行、调试有初步的认识,也能让开发者根据自身编程特点和应用场景选择合适的并行计算编程技术,提高开发效率。

关键词:并行计算 编程 高性能 GPU开发 调试

中图分类号:TP311.11 文献标识码:A 文章编号:1007-9416(2016)06-0243-01

1 并行计算编程技术概念介绍和研究方法

所谓并行计算编程,就是通过高性能计算机,实现计算的并行处理,它也是反映高性能计算和超级计算的一项重要指标。长期以来,通过并行计算编程求解的过程主要表现为:给定一个应用,首先将其转化为数值计算范畴;随后为该数值计算设计一套并行算法,通过编程语言的方式进行实现;最后借助于高性能计算机执行该程序以获得应用的求解,因此,并行计算编程主要包括高性能计算机、并行算法、并行处理程序、并行应用这几个方面,涉及包括计算机、软件工程、数学逻辑等多个领域。

2 并行计算编程技术开发模式

(1)OpenMP。目前在并行计算编程技术中,OpenMP已经是业内比较流行的内存模型开发的标准,它具备完善的编译指导代码,被广泛运用于并行程序处理、数据私有化或共享等操作,旨在将移植性高和扩展性强的开发接口提供给SMP系统[1]。OpenMP新标准在1997年开始被OpenMP Architecture Review Board所提出,目前已经更新到2.0版本。

OpenMP的开放接口能够给多处理平台的共享内存提供并行计算机制,也广泛被应用于高性能计算系统架构,比如微软、UNIX等,它还可以通过编译器指令与库函数结合的方式为开发者提供C/C++或FORTRAN的多线程创建应用。OpenMP的优势体现在多耗时循环应用当中,它首先将一个任务以多线程的形式划分,并通过fork-join的并行机制将程序在完成顺序执行后,转换为并行执行程序。开发者在使用OpenMP时,可以建立良好的循环级实现多处理并行机制,将任务通过分解成多个数据共享的任务,并确定相互间的依赖性,通过并行计算编程机制来实现任务的并行处理。

(2)并行库。并行库的推行大大提高了高性能并行计算处理效率,它集成了并行计算编程中通用的逻辑代码,并封装成库的形式供用户使用,它是完全开源的。一般来说,编写库函数的开发者都拥有较丰富的开发经验,在代码逻辑性上效率会比较高,同时编译器采用优化编译,这就使得库函数拥有很高的执行效率,对大多数开发者而言,并行库为他们提供了一种高效便捷的开发模式[2]。

3 GPU并行计算编程技术方法

GPU的作用是优化并行多线程程序的吞吐量,这种特性也让GPU的处理核心要比传统CPU更多,这种众核架构计算能力也更强,非常适用于大规模的并行计算,GPU在执行指令和获取数据时是通过CPU的PCI-E借口进行的。计算和存储两部分是GPU的架构特征,其中计算部分中的多个流处理器负责指令的计算和执行,而存储部分则是数据存储的内存。这种硬件架构也反映了GPU编程主要是由内存管理和并行计算两部分。

NVIDIA公司的合作厂商PGI推出一套CUDA Fortran编程语言,它是专门针对Fortran用户所设计开发的,并还在不断地更新迭代。CUDA Fortran的编程模式类似于CUDA C/C++,都有一个通用编译器,在开发过程中也能通过插件或命令来访问CUDA库,比如cuBLAS等,并兼容目前主流的操作系统windows、Linux和MacOS等。在EDA工具的支持上,CUDA Fortran也可以在主流工具Visual Studio和Eclipse中通过插件的形式安装。CUDA Fortran不可以直接通过进入调试模式进行调试,若想调试先要通过选项-Mcuda=emu将模拟器模式开启,即用CPU来模拟GPU,然后通过CPU的调试器来进行模拟调试工作。

CUDA Fortran在开发之前需要安装开发套件,这些可以在PGI CUDA Fortran官网上下载,目前的版本已经更新到PGI Release2015,该开发套件包含了GPU编程开发的多种工具:如pgfortran编译器(用于CUDA Fortran)、pgcc编译器(用于OpenACC)、pgcpp编译器(用于CUDA-x86)、以及分析和调试器等。CUDA Fortran将CUDA GPU编程很好地集成在Fortran当中,如果开发者具备CUDA C/C++开发能力,则只需学习基本的Fortran语法即可开始开发工作,在应用方面,异构计算,如内存共享、多线程并发、向量计算等在CUDA Fortran中得到高效地应用。例如,在进行GPU并行编程计算时,可以通过device关键字分配变量在GPU当中,并通过allocate和deallocate来完成内存的分配和释放,并且,CPU和GPU在内存传输过程中只需要用赋值符号“=”操作即可,无需动用其他函数。

4 结语

随着并行计算编程技术的日益发展,各种通用的开发模式和开发方法逐渐被人们所熟悉,开发者和各类专家学者也往相关方面在积极探索,有些已经取得了不错的成果。面对日益成熟的并行计算编程技术,本文旨在帮助开发者了解当前主流的并行计算编程技术开发模式和调试方法,能够让开发者可以在繁多的工具技术中找到适合自己的开发模式,更高效地利用工具完成开发任务。

参考文献

[1]都志辉.高性能计算之并行编程技术--MPI 并行程序设计.北京:清华大学出版社,2001.

[2]陈国良.并行算法的设计与分析.北京:高等教育出版社,2002.

猜你喜欢
并行计算高性能调试
基于航拍无人机的设计与调试
FOCAS功能在机床调试中的开发与应用
一款高性能BGO探测器的研发
无线通信中频线路窄带临界调试法及其应用
高性能砼在桥梁中的应用
云计算中MapReduce分布式并行处理框架的研究与搭建
矩阵向量相乘的并行算法分析
并行硬件简介
基于Matlab的遥感图像IHS小波融合算法的并行化设计
调压柜的调试与试运行探讨