论文部分内容阅读
摘 要:本文将基于CUDA平台的GPU并行程序设计模式引入自动控制系统并行编程实践教学中。通过介绍CUDA体系结构与编程模式,实例教学使自动控制专业学生对CUDA并行程序设计有着深刻的认识,将有助于同学们掌握CUDA并行计算平台在工业控制程序开发中的应用,增强同学们对自动控制专业学习的兴趣和实践动手能力。
关键词:CUDA平台;自动控制;并行编程;实践教学
一、引言
随着工业控制系统规模日益增大,控制算法日益复杂,工业数据日益激增,工业现场对系统控制与优化调度的实时性要求日益提高,给现代控制系统程序设计提出挑战。工业控制系统中存在大量的重复性计算,如快速傅里叶变换(FFT)、滤波、矩阵与数值计算等,给传统控制系统带来巨大时间开销。以多核计算机为代表的并行计算技术为工业控制系统设计与开发提供了技术支持。特别是GPU(Graphic Processing Unit)通用并行计算技术的推广[1],由于其高存储器带宽、低功耗等诸多优点,已被广泛应用于科学与工业等领域中,在提升实际问题的求解效率方面发挥了作用。CUDA(Compute Unified Device Architecture,计算统一设备架构)由英伟达公司于2007年发布的一种将GPU作为并行计算的软硬件体系架构,可用于解决工程科学中的复杂计算,开启了GPU通用并行计算时代[2]。研究表明在浮点运算、数值计算等密集型计算方面,基于CUDA平台的GPU计算系统可获得数十倍于传统CPU的加速性能[3]。因此,相比于传统微机控制方式,基于CUDA的GPU并行计算适用于数据量大,实时性要求高的工业控制领域。
现有高校自控专业程序设计课程主要是基于串行编程方式的教学,难以适应工业信息化与知识自动化对控制系统实时性能与数据存储的需求。本文将基于CUDA平台的GPU并行程序设计模式引入自动控制系统并行程序设计实践教学中。有利于同学掌握先进计算技术在自动控制系统中的开发与应用,拓宽其专业视野。最后对自动控制程序设计与CUDA并行编程实践教学进行了思考与总结。
二、CUDA体系架构和编程模式
(一)CUDA体系结构。CUDA框架包括硬件和软件两部分,拓宽了GPU程序开发与运行的可操作性。GPU的硬件包括运算核心和存储器,其中运算核心流处理器构成流多处理器(Streaming Multi-Processor,SM),每个SM都带共享存储器,所有SM共享GPU的全局、常量与纹理存储器。CUDA的软件包括CPU代码和GPU代码,其中CPU负责处理逻辑性的串行事务控制,GPU负责处理大量重复性计算任务。在GPU上执行的函数称为核函数,当核函数被CPU代码激活时,GPU中在逻辑上的两层线程组(顶层为线程网格(Grid),下层为线程块(Block,包含若干个线程(Thread))并行执行。一个内核函数网格中的线程块并行和线程块中的线程两个层次的并行方式来提高数据吞吐量和执行效率。各个线程块并行执行,线程块间无法通信,也没有执行顺序,但同一个线程块中的线程可以通过共享存储器方式交换数据。
(二)CUDA编程模式。在CUDA架构中,CPU与GPU是一种异构协同并行计算模式。其中CPU为主机,GPU为设备。CPU与GPU各自拥有独立的存储器地址空间:显存和内存。程序员可以应用高级语言(C/C++/fortan)对GPU内部计算资源进行访问。CUDA编程基本步骤为:步骤1:加载C(或C++)和CUDA头文件,启动cudaSetDevice()配置GPU设备;初始化CPU和GPU数据空间;步骤2:调用设备端(GPU)的内核函数计算;①从显存读取数据到共享存储器或寄存器内;②对数据进行并行计算和处理;③将处理后的数据写回显存。
步骤3:将显存中的结果回读到内存;步骤4:使用CPU对数据进行处理并输出结果;步骤5:释放内存和显存空间并退出CUDA。
三、实例讲解
以一个简单的CUDA程序设计实例来讲解,加深自动控制专业同学对CUDA平台GPU并行程序设计过程的理解。考虑给一个向量V{1:N}上每一位矢量的加上常数。其中CUDA程序C代码如下:
#define N 100;
_global_void Vadd(int*V,int m)
{int index=blockIdx.x;if(index int main(void){ int host_V[N]; int *device_V; cudaMalloc((void**)&device_V, L * sizeof(int)); for (int k=0; k cudaMemcpyHostToDevice); Vadd<<>>(device_V, 5);
cudaMemcpy( host_V,device_V,N*sizeof(int),cudaMemcpyDeviceToHost);
cudaFree(device_V); return 0; }
对上述CUDA关键函数进行解释。内核函数通过_global_函数类型限定符定义,如_global_void kernel(void)。GPU通过cudaMalloc()函数为设备分配内存。函数cudaMemcpy()来完成CPU和GPU之间数据传递,cudaFree(device_V)为释放内存。实际执行中,CUDA产生许多在GPU上执行的线程,每一个线程都去执行内核程序,由于预先设置了内置变量blockIdx,变量的值为当前执行设备代码线程块的索引,从而取得不同的数据进行并行计算。
四、基于CUDA的自动控制并行编程实践教学思考
目前高校自动控制专业所开设程序设计课程主要以简单程序设计语言为主,其计算机系统知识不全面。自动控制专业学生的软件基础与计算思维相对较弱,将造成现有自动控制专业学生的计算机程序设计开发能力不强。因此自动控制专业学生有待加强计算机系统学习,特别是计算机程序设计与软件基础,数据结构与算法分析等课程,加强计算机系统知识积累。
五、结论
将GPU先进计算与现代控制技术结合是适应新时代工业信息化与知识自动化人才培养的需求。将CUDA平台引入控制系统并行程序设计实践课堂教学,有助于同学掌握现代先进计算技术在工业控制中的应用,拓宽同学们的专业视野及对自动控制专业的兴趣和动手能力,这将有利于自动控制专业人才培养质量。
参考文献:
[1]张舒,褚艳丽,赵开勇,等.GPU高性能运算之CUDA[M].中国水利水电出版社,2009.
[2]王海峰,陈庆奎.图形处理器通用计算关键技术研究综述[J].计算机学报,2013,36(4):757-772.
[3]王海峰,陈庆奎.图形处理器通用计算关键技术研究综述[J].计算机学报,2013,36(4):757-772.
(作者单位:湖南科技大学信息与电气工程学院)
关键词:CUDA平台;自动控制;并行编程;实践教学
一、引言
随着工业控制系统规模日益增大,控制算法日益复杂,工业数据日益激增,工业现场对系统控制与优化调度的实时性要求日益提高,给现代控制系统程序设计提出挑战。工业控制系统中存在大量的重复性计算,如快速傅里叶变换(FFT)、滤波、矩阵与数值计算等,给传统控制系统带来巨大时间开销。以多核计算机为代表的并行计算技术为工业控制系统设计与开发提供了技术支持。特别是GPU(Graphic Processing Unit)通用并行计算技术的推广[1],由于其高存储器带宽、低功耗等诸多优点,已被广泛应用于科学与工业等领域中,在提升实际问题的求解效率方面发挥了作用。CUDA(Compute Unified Device Architecture,计算统一设备架构)由英伟达公司于2007年发布的一种将GPU作为并行计算的软硬件体系架构,可用于解决工程科学中的复杂计算,开启了GPU通用并行计算时代[2]。研究表明在浮点运算、数值计算等密集型计算方面,基于CUDA平台的GPU计算系统可获得数十倍于传统CPU的加速性能[3]。因此,相比于传统微机控制方式,基于CUDA的GPU并行计算适用于数据量大,实时性要求高的工业控制领域。
现有高校自控专业程序设计课程主要是基于串行编程方式的教学,难以适应工业信息化与知识自动化对控制系统实时性能与数据存储的需求。本文将基于CUDA平台的GPU并行程序设计模式引入自动控制系统并行程序设计实践教学中。有利于同学掌握先进计算技术在自动控制系统中的开发与应用,拓宽其专业视野。最后对自动控制程序设计与CUDA并行编程实践教学进行了思考与总结。
二、CUDA体系架构和编程模式
(一)CUDA体系结构。CUDA框架包括硬件和软件两部分,拓宽了GPU程序开发与运行的可操作性。GPU的硬件包括运算核心和存储器,其中运算核心流处理器构成流多处理器(Streaming Multi-Processor,SM),每个SM都带共享存储器,所有SM共享GPU的全局、常量与纹理存储器。CUDA的软件包括CPU代码和GPU代码,其中CPU负责处理逻辑性的串行事务控制,GPU负责处理大量重复性计算任务。在GPU上执行的函数称为核函数,当核函数被CPU代码激活时,GPU中在逻辑上的两层线程组(顶层为线程网格(Grid),下层为线程块(Block,包含若干个线程(Thread))并行执行。一个内核函数网格中的线程块并行和线程块中的线程两个层次的并行方式来提高数据吞吐量和执行效率。各个线程块并行执行,线程块间无法通信,也没有执行顺序,但同一个线程块中的线程可以通过共享存储器方式交换数据。
(二)CUDA编程模式。在CUDA架构中,CPU与GPU是一种异构协同并行计算模式。其中CPU为主机,GPU为设备。CPU与GPU各自拥有独立的存储器地址空间:显存和内存。程序员可以应用高级语言(C/C++/fortan)对GPU内部计算资源进行访问。CUDA编程基本步骤为:步骤1:加载C(或C++)和CUDA头文件,启动cudaSetDevice()配置GPU设备;初始化CPU和GPU数据空间;步骤2:调用设备端(GPU)的内核函数计算;①从显存读取数据到共享存储器或寄存器内;②对数据进行并行计算和处理;③将处理后的数据写回显存。
步骤3:将显存中的结果回读到内存;步骤4:使用CPU对数据进行处理并输出结果;步骤5:释放内存和显存空间并退出CUDA。
三、实例讲解
以一个简单的CUDA程序设计实例来讲解,加深自动控制专业同学对CUDA平台GPU并行程序设计过程的理解。考虑给一个向量V{1:N}上每一位矢量的加上常数。其中CUDA程序C代码如下:
#define N 100;
_global_void Vadd(int*V,int m)
{int index=blockIdx.x;if(index
cudaMemcpy( host_V,device_V,N*sizeof(int),cudaMemcpyDeviceToHost);
cudaFree(device_V); return 0; }
对上述CUDA关键函数进行解释。内核函数通过_global_函数类型限定符定义,如_global_void kernel(void)。GPU通过cudaMalloc()函数为设备分配内存。函数cudaMemcpy()来完成CPU和GPU之间数据传递,cudaFree(device_V)为释放内存。实际执行中,CUDA产生许多在GPU上执行的线程,每一个线程都去执行内核程序,由于预先设置了内置变量blockIdx,变量的值为当前执行设备代码线程块的索引,从而取得不同的数据进行并行计算。
四、基于CUDA的自动控制并行编程实践教学思考
目前高校自动控制专业所开设程序设计课程主要以简单程序设计语言为主,其计算机系统知识不全面。自动控制专业学生的软件基础与计算思维相对较弱,将造成现有自动控制专业学生的计算机程序设计开发能力不强。因此自动控制专业学生有待加强计算机系统学习,特别是计算机程序设计与软件基础,数据结构与算法分析等课程,加强计算机系统知识积累。
五、结论
将GPU先进计算与现代控制技术结合是适应新时代工业信息化与知识自动化人才培养的需求。将CUDA平台引入控制系统并行程序设计实践课堂教学,有助于同学掌握现代先进计算技术在工业控制中的应用,拓宽同学们的专业视野及对自动控制专业的兴趣和动手能力,这将有利于自动控制专业人才培养质量。
参考文献:
[1]张舒,褚艳丽,赵开勇,等.GPU高性能运算之CUDA[M].中国水利水电出版社,2009.
[2]王海峰,陈庆奎.图形处理器通用计算关键技术研究综述[J].计算机学报,2013,36(4):757-772.
[3]王海峰,陈庆奎.图形处理器通用计算关键技术研究综述[J].计算机学报,2013,36(4):757-772.
(作者单位:湖南科技大学信息与电气工程学院)