最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

一种CPU_GPU的多核异构平台设计方案

IT圈 admin 33浏览 0评论

2024年5月31日发(作者:赖欣)

●韪园西翟到董_l

底涛

过:箜垫量圈鳖

一种CPU+G

PU的多核异构平台设计方案

(河北医科大学第二医院,河北石家庄050000)

【摘要】针对大数据时代CPU或多核服务器中普遍存在的数据处理能力严重不足的问题,文中设计了一种基于GPU通

用处理器作为协处理计算单元的平台方案;通过对数据处理的业务流程进行了逐层分解,简化了算法在GPU实现上的复杂度;

设计了一套基于双线程池的插件化作业处理平台来提高CPU与GPU的利用率,实现了对数据处理的插件化管理。理论分析和

性能测试均验证,GPU完全能够胜任复杂且专项的数据处理业务的实时性工作需求,处理能力表现甚佳。

【关键词】GPU通用处理器线程池软件插件化

中图分类号:TP332文献标识码:A文章编号:1008—1739(2016)3、4—90—4

Design

Scheme

of

Multicore

Heterogeneous

Platform

for

CPU+GpU

DITao

(The

Second

hospital,Hebei

Medical

University,Shijiazhuang

Hebei

050000,China)

Abstract:Inviewof

insufficient

data

processing

capability

ofCPU

solution

based

on

or

multicore

server

in

big

data

ages,thispaperdesigns

platform

generalprocessing

unit(GPU)used

as

co—processing

calculationunit.This

layer.Aplug—in

solution

simplifies

the

complexity

of

algorithmbyecomposing

the

service

flowofdata

double—thread

pool

is

designed

resultsoftheoretical

to

processinglayerbyoperationprocessing

platform

based

on

increase

utilizationratioofCPUandGPUandachieve

plug—inmanagement

ofdata

processing.The

test

analysis

and

performance

showthatGPUhasexcellent

processingcapability

and

can

meetthereal——time

requirement

of

complex

and

special

data

processing

service.

Key

words:general

processing

unit(GPU);thread

pool;plug—in

software

1引言

GPU通用处理器以其惊人的运算速度和数据吞吐能力

引起大数据时代数据处理工程师的广泛关注。目前,如何充分

利用GPU的并行计算能力来辅助CPU实现对复杂运算的快

速求解,已经成为当今学术界和产业界关注的热点问题之一,

这一不争的事实使得GPU从之前的图形协处理器发展为继

CPU之后计算机中又一重要处理器flI。

本文针对CPU或多核服务器中普遍存在的数据处理能

力严重不足的问题,以当前主流的GT200和Femfi架构GPU

为参考对象,详细讲述了如何采用CUDA软件体系架构实现

GPU通用计算;设计了一套基于双线程池的插件化作业处理

定稿日期:2016-01—12

平台来提高CPU与GPU的利用率,通过CPU线程池实现了

多任务的抢占式执行,提高了多任务的执行速度;通过GPU

线程池实现了GPU的多任务复用,提高了计算资源的利用

率,实现了对数据处理的插件化管理。

GPU硬件架构

现代GPU硬件架构的设想最早出现在微软公司的

DirectX

10规范中,它首次提出了统一着色架构的概念,用以

替换DirectX9时代的显卡中相互分离的顶点着色器和片元

着色器单元。NVIDIA于2006年底推出了符合该架构的第一

块GPU卡——GeForce

8800,它首次采用了通用标量线程处

理器阵列作为其内部计算单元,标志着GPU统一计算新时代

的到来。目前为止,NVIDIA的GPU硬件架构已经从G80、

万方数据

GT20{)时代过渡到了Femli架构,最新的Kepler架构也已经

开始普及。

目前市场上主流的GPU多为GT200的GT201)架构和新

一代GFIOx的Femfi架构,上一代的G80架构已经逐渐淡出

市场,从硬件构成上看,它们都是由2个主要部分组成,分别

是流处理器阵列(Scalable

Streaming

Processor

构重新进行了设计,将SM和TPC融合在了一起,称为SMX,

其结构如图2所示.

SMX(Ferm=l

InstructionCa曲e

wa『p

ScheduIer

Dispatch

Unn

Regisle

warP

Scheduler

Dispatch

UnIl

File

Array,SPA)和存

储器系统,但其内部构造又有着明显的不同之处。下面就以

GT2()()架构和Femai架构为例来对比说明现代GPU的软硬

件体系架构及其发展趋势。

流处理器阵列是GPU的核心组成部分,不同的GPU设

备所包含的流多处理器(Stream

Multiprocessor,SM)数量和内

加ND矬.IZI构差异很大,在GT200架构中,每3个SM构成一个线程

处理器群(Thread

Processing

Cluster,TPC),不同GPU中SM

的数量差异是以TPC为基本单位进行增减的。GT200架构中

TPC的结构示意图如图1所示。

TPC(GT200)

Geo

圈回圈回圈匿

囤围困园器阿I:

囤回圈圈圈匿un‘

司网冈冈蹄丙

习圈回圆圈匿

司冈冈冈黑阿

冈冈冈冈需仁

Intefoonnecl

Network

C04K

rnety

Configurable

Cache/SharedMem

C∞幻Ik‘

UhiformCache

SMC

SMSMSM

cache

MTISSue

cache

MTIssue

Ccache

cache

MTISSUe

臼2

SMX内舌|i结构示意ij日L

Fermi

首先从图②中可以发现,在Femli架构中SM包含的内核

数量大大增加,由原来的8个增加到了32个。而在内部,ALu

计算单元电进行了全新的设计,浮点运算单元从IEE754—1

985

标准升级到了IEE754—20()8标准,减少了精度损失。整数运算

单元从原来的24

bit升级成了能够完整支持32

bit和64

bit精

度的指令操作,一改GT20()时代被人所诟病的计算精度受限

问题。为此,NVlDA将其命名为CDUACore,以区别于旧的

sP内核单元。

第二点上的变化来自于存取单元,在GT2()f)架构中,为了

减小控制单元的开销,SM没有自己的存取单元,只在TPC层

拥有一个存取单元,由3个SM通过流水方式共享,而在

Fem“中,每个SM都具有自己独立的16路存取单元

(Load/Store

Units),可以保证在一个时钟周期内实现16路线

L■H

L叫L叫L叫L叫

圈圈

卜订卜订

曰回

圈圈

卜订卜订

围困

圈圈曰圈圈圈

阿阿冈阿

网F可

IShareclMemoryIISheredMⅢ州l

LOAD/STORE

Ccache

cache

ISharedMemoqtl

TextuireUnits

TexlufeL1

圈1

l,【’内{n?j构示.t三一骂f(:I二{…)

在图1中,内部为共享同一条存储器流水线的3个SM,

从图中SM的内部架构大致可以看出,每个SM包含8个流处

理器(Streanfing

Processor,SP),其类似于一个独立的8路

SIMD处理器,但又略有不同,NVIDIA称之为SIMT处理器,

与传统的SIMD相比,SIMT处理器有2点不同:

①指令宽度实现向量化和透明化:在传统SIMD处理器

中,指令宽度是一个固定的标量,程序必须根据处理器的指令

宽度来开发代码,而在GT200中,指令宽度被隐藏,编程人员

可以在1~512间灵活设置,提高了线程使用的灵活性;

程的地址操作和显存读写。因此,在Femfi架构中,SM已经成

为一个完全独立的处理器。

第三点改进则是支持双wrap调度.在GT200中,由于只

有8个sP,因此每16路线程指令需要分2次才能完全送入

sP执行,而在Femfi中,一次可以同时执行2条16路的指令,

这比GT200中的指令宽度足足大了4倍。

第四点变化则是增加了片上L1缓存的设计,虽然与CPU

中以兆为单位的缓存相比差了不少,但与GT200相比,缓存对

性能的提升是相当明显的12I。

此外,Femfi还在片内增加了独立的特殊函数计算单元,

能够在不影响指令分发的情况下,完成正弦、余弦、倒数和开

方计算等超越函数的计算。

②线程间通信受限:指令宽带的透明化在带来灵活幽均

同时,c乜带来了一定的限制,在传统SIMD处理器中,指令发

射是完全同步的,且各向量间能够共享寄存器资源,而SIMT

中的指令由于存在排队和流水,因此为实现线程间通信,就必

须引入同步机制并借助共享存储器才能实现互访问。

对比新一代Femfi架构,NVIDIA对SM和TPC层次架

万方数据

91

3双线程池设计

当数据处理设备收到多个目标处理任务作业时,启动相

应数量的线程分别对每个任务进行处理,无疑是最常用的实

现策略。但是,当有大量的任务作业集中到来时,会造成大量

线程频繁启动和销毁,这对系统的整体性能产生影响,如图3

所示。

程中安排额外的工作,例如一些数据的初始化、内存的申请和

少量的计算等工作,而这些工作都将被掩藏在GPU执行期

间,进一步缩短的程序的执行时间。受线程池的启发对GPU

线程电进行了专门的管理,形成了双线程池模式,如图4所

示,这样,当平台中存在多个GPU的情况下,就可以实现计算

任务在不同GPU间进行迁移。

GPU

雏…川

GPU任务

作业

线程数■

图3线程数量与性能的关系

GPU

这是由于当线程数量过多时,线程启停和调度的开销会

超过增加线程所产生的收益所致,根据微软给出的建议,应当

将线程数量控制在CPU内核数量的2倍以内,而对于所要面

临的计算密集型任务,线程规模还要适当缩小。

为了避免这种情况的出现,可以采用预先启动并管理一

组线程的方法,在任务到来时可以直接使用,避免频繁创建和

销毁线程的开销,在空闲时,通过降低活动线程的数量来减轻

系统负荷,在线程数量上,通过控制线程总量的方法,避免出

现调度开销过大的情况。这种管理线程的方法被称为线程池

技术。线程池至少包含了线程管理器、工作线程和任务队列3

个部分J_¨l=①线程管理器:负责工作线程的创建、销毁和总数

量上的控制;②工作线程:由线程管理器创建,负责从任务队

列中主动获取具体任务,并调用算法模块运行;③任务队列:

起到任务处理缓冲的作用,当任务集中到来时,对任务进行排

队,避免由于启动的线程过多而对系统造成影响。

在通过线程池对GPU进行并发访问时,人们发现,当存

在多个GPU设备时,只需简单将它们绑定到不同的任务线程

中即可,但如果有多个CPU线程复用一个GPU时,则会出现

问题,这是由于CUDA本身的限制所造成的,由于CUDA在

运行时。其上下文必须被绑定到一个线程中去,这就导致一个

GPU设备在同一时刻只能被一个线程所使用。

如此一来,GPU反而成为了一种瓶颈,所有的线程在这

里都将被被顺序执行,这显然不是设计线程池的初衷,为此采

用了双线程的方式来实现对GPU的复用。

通过为GPU专门启动一个运行线程,当有其他CPU任

务线程需要利用GPU进行运算时,则通过向该代理线程发送

请求的方式来完成任务的计算,在任务执行GPU运算期间,

任务线程处于完全的异步状态,此时可以根据需要在CPU线

;PUl|JGPU2l……IGPU“

娩稷||搜程lJ蛙程

图4双线程池

4平台+插件化设计

“平台+插件”软件体系结构是近年来在软件开发中逐渐

开始流行的一种面向构件的软件开发方法[Sl,之所以选用这种

结构,是基于信号监测业务发展的长期性和多样化的特点。一

方面,在检测和识别算法的实现上,任何一种实用的算法都需

要经过一个漫长的过程,通过不断的改进和升级,才能最终完

善起来;另一方面,监测业务的需求是不断变化的,各种新体

制信号的出现,都需要新的算法来与之适应,而一个稳定和可

靠的运行平台可以保证算法的稳健性,并提高其可复性。

基于上述原因的考虑,从软件模型的角度出发,最自然的

想法就是让每种算法保证自身的独立}生,并通过某种接口,插

入主程序中,实现集成与交互,当需要时,只需对算法部分做

修改或重新插入其他算法模块进行替代,就可以实现不同的

功能㈧。因此基于插件模型设计的作业平台至少包括2个主要

部分,插件和使用

插件的平台,另

外,在逻辑和实现

上,插件接口和公

共函数库也是必

不可少的,它们之

间的关系如图5

所示。

万方数据

92

运行框架:运行框架的职责有2个,对内负责各种任务插

件的识别、加载和卸载,线程池规模的设置与运行。对外则提

供一种统一的接口访问形式,获取插件的访问接口,实现对插

件的参数化以及运行控制,它本身并不知道每个插件具体要

做什么,仅仅是在恰当的时候调用插件来完成具体的功能,如

下所示:

①插件接口:并不负责任何具体的业务和实现,仅仅是作

为一种协议,来规范插件的开发;

②插件:是基于插件接口实现实际功能的实体,插件的功

能不受插件接口的影响,但必须要遵守插件接口规定的所有

接口协议,在这里,插件的最终形式为DLL动态库;

③公共函数库:是一个独立的动态库,将插件和运行框架

常用的函数或类库放在一个独立的运行库中,而不是集成到

运行框架中,既利于降低插件对运行框架的依赖性,又可以降

低运行平台内核的复杂度,提高运行速度和稳定性,通常是将

能够固化下来的常用算法和函数放入公共函数库中。

的开发维护,达到了提高模块通用性和降低数据处理算法在

GPU实现上复杂度的目的。实际工程应用测试结果表明,该

CPU+GPU完全能够胜任大数据复杂且专项业务的实时性工

作需求,在对复杂数据进行处理时,能力表现更佳。

参考文献

[1]仇德元.GPU编程技术一从GLSL、CUDA到OpenCL[M].

北京:机械工业出版社,2011.

【21

Krik

DB,Hwu

Wen—mei.Programmang

Massively

Parallel

Processors:AHands—on

Approach[M].北京:清华大学出版

社.2()10.

【3】Joselli

M,ZamithM,Clua

E,et

a1.An

Adaptative

Game

Loop

Architecture

with

AutomaticDistribution

ofTasksbeteen

CPUand

GPU[J].Computers

in

Entertainment(CIE)

一SPECIAL

ISSUE:Games,2009,4(7):50.

[4]高翔,张金登.基于线程池的多任务并行处理模型Ⅱ】指挥信

息系统与技术,2012,3(4):54-56.

5结束语

本文提出了一种软件插件平台+双线程池的解决方案,

通过插件平台完成了业务层与数据处理实现层的分离和各自

(上接第89页)

[5]王志坚,费玉奎,娄渊清.软件构件技术及其应用【M].北京:科

学出版社,2005.

[6]刘立芳.基于MVC模式与插件式设计的开发架构的探讨

与实践U].电脑编程技巧与维护,2012(12):33—35.

参考文献

[1]王宏旭.基于飞思卡尔智能车的视频导航控制技术研究

【D].沈阳:沈阳理工大学,2014.

[2]段振兴.基于MC9S128的摄像头导航智能车的设计与实

现Ⅱ]甘肃科技纵横,2011(3):11—13

【3】卓晴,王王i{},王磊.基于面阵CCD的赛道参数检测方法

3.3实验结果

经过垂直和水平2个方向的矫正处理后的赛道效果如图

4所示。可以看出经过畸变矫正后的赛道图像与实际的赛道基本

—致,算法运算实时}生强,很好的满足了计算和控制的需要。

飞雌卜

(a)经过畸变校正的效果图

㈣实际的赛道

图4变校正后的最终效果比对

【I】.电子产品世界,20()6(7):141—143

【4]方川,曾龙,魏洪川.摄像头智能车硬件设计方案U】.电子

产品世界,2010(3):50-52.

【5】程钊,万齐齐,唐旋来,等.智能车道路识别及控制研究Ⅱ]伺

服控制.20137(6):49-5

1.

16】6董秀成,杨栩.基于视觉的智能车道路检测与转向控制策略

研究[『】.西华大学学报,2010,4(2):2—3.

【7]曹凯,于少伟,周芦芦基于动态目标位置的智能车辆控制

4结束语

在垂直和水平方向对视觉图像进行畸变校正后,分别经

过相应方向上的坐标变换,就可以得到更接近实际效果的图

像,为后面计算赛道参数提供了准确的输入信息。实验结果表

研究U】信息与控制,2008,14(4):23-25.

[8]Qiushi

Science

and

Technology.navigation

for

typical

module

examplesdesign

ofMCU[J].Posts

375.

andTelecommunications

News

Press,2004,3(2):365

【9】刘明,王洪军,李永科.基于智能车中摄像头的图像采集的

研究U]电子设计工程,2012(17):158—160

【10】田敏雄,沈庆宏,曹凤莲,等基于图像空间变换和插值运算

的投影仪梯形校正法Ⅱ】电子测量技术,2007(3):10—12

明,校正算法运算实时}生强,经过校正后的赛道信息与实际的

赛道基本一致,可以满足计算和控制的需要。

93

万方数据

2024年5月31日发(作者:赖欣)

●韪园西翟到董_l

底涛

过:箜垫量圈鳖

一种CPU+G

PU的多核异构平台设计方案

(河北医科大学第二医院,河北石家庄050000)

【摘要】针对大数据时代CPU或多核服务器中普遍存在的数据处理能力严重不足的问题,文中设计了一种基于GPU通

用处理器作为协处理计算单元的平台方案;通过对数据处理的业务流程进行了逐层分解,简化了算法在GPU实现上的复杂度;

设计了一套基于双线程池的插件化作业处理平台来提高CPU与GPU的利用率,实现了对数据处理的插件化管理。理论分析和

性能测试均验证,GPU完全能够胜任复杂且专项的数据处理业务的实时性工作需求,处理能力表现甚佳。

【关键词】GPU通用处理器线程池软件插件化

中图分类号:TP332文献标识码:A文章编号:1008—1739(2016)3、4—90—4

Design

Scheme

of

Multicore

Heterogeneous

Platform

for

CPU+GpU

DITao

(The

Second

hospital,Hebei

Medical

University,Shijiazhuang

Hebei

050000,China)

Abstract:Inviewof

insufficient

data

processing

capability

ofCPU

solution

based

on

or

multicore

server

in

big

data

ages,thispaperdesigns

platform

generalprocessing

unit(GPU)used

as

co—processing

calculationunit.This

layer.Aplug—in

solution

simplifies

the

complexity

of

algorithmbyecomposing

the

service

flowofdata

double—thread

pool

is

designed

resultsoftheoretical

to

processinglayerbyoperationprocessing

platform

based

on

increase

utilizationratioofCPUandGPUandachieve

plug—inmanagement

ofdata

processing.The

test

analysis

and

performance

showthatGPUhasexcellent

processingcapability

and

can

meetthereal——time

requirement

of

complex

and

special

data

processing

service.

Key

words:general

processing

unit(GPU);thread

pool;plug—in

software

1引言

GPU通用处理器以其惊人的运算速度和数据吞吐能力

引起大数据时代数据处理工程师的广泛关注。目前,如何充分

利用GPU的并行计算能力来辅助CPU实现对复杂运算的快

速求解,已经成为当今学术界和产业界关注的热点问题之一,

这一不争的事实使得GPU从之前的图形协处理器发展为继

CPU之后计算机中又一重要处理器flI。

本文针对CPU或多核服务器中普遍存在的数据处理能

力严重不足的问题,以当前主流的GT200和Femfi架构GPU

为参考对象,详细讲述了如何采用CUDA软件体系架构实现

GPU通用计算;设计了一套基于双线程池的插件化作业处理

定稿日期:2016-01—12

平台来提高CPU与GPU的利用率,通过CPU线程池实现了

多任务的抢占式执行,提高了多任务的执行速度;通过GPU

线程池实现了GPU的多任务复用,提高了计算资源的利用

率,实现了对数据处理的插件化管理。

GPU硬件架构

现代GPU硬件架构的设想最早出现在微软公司的

DirectX

10规范中,它首次提出了统一着色架构的概念,用以

替换DirectX9时代的显卡中相互分离的顶点着色器和片元

着色器单元。NVIDIA于2006年底推出了符合该架构的第一

块GPU卡——GeForce

8800,它首次采用了通用标量线程处

理器阵列作为其内部计算单元,标志着GPU统一计算新时代

的到来。目前为止,NVIDIA的GPU硬件架构已经从G80、

万方数据

GT20{)时代过渡到了Femli架构,最新的Kepler架构也已经

开始普及。

目前市场上主流的GPU多为GT200的GT201)架构和新

一代GFIOx的Femfi架构,上一代的G80架构已经逐渐淡出

市场,从硬件构成上看,它们都是由2个主要部分组成,分别

是流处理器阵列(Scalable

Streaming

Processor

构重新进行了设计,将SM和TPC融合在了一起,称为SMX,

其结构如图2所示.

SMX(Ferm=l

InstructionCa曲e

wa『p

ScheduIer

Dispatch

Unn

Regisle

warP

Scheduler

Dispatch

UnIl

File

Array,SPA)和存

储器系统,但其内部构造又有着明显的不同之处。下面就以

GT2()()架构和Femai架构为例来对比说明现代GPU的软硬

件体系架构及其发展趋势。

流处理器阵列是GPU的核心组成部分,不同的GPU设

备所包含的流多处理器(Stream

Multiprocessor,SM)数量和内

加ND矬.IZI构差异很大,在GT200架构中,每3个SM构成一个线程

处理器群(Thread

Processing

Cluster,TPC),不同GPU中SM

的数量差异是以TPC为基本单位进行增减的。GT200架构中

TPC的结构示意图如图1所示。

TPC(GT200)

Geo

圈回圈回圈匿

囤围困园器阿I:

囤回圈圈圈匿un‘

司网冈冈蹄丙

习圈回圆圈匿

司冈冈冈黑阿

冈冈冈冈需仁

Intefoonnecl

Network

C04K

rnety

Configurable

Cache/SharedMem

C∞幻Ik‘

UhiformCache

SMC

SMSMSM

cache

MTISSue

cache

MTIssue

Ccache

cache

MTISSUe

臼2

SMX内舌|i结构示意ij日L

Fermi

首先从图②中可以发现,在Femli架构中SM包含的内核

数量大大增加,由原来的8个增加到了32个。而在内部,ALu

计算单元电进行了全新的设计,浮点运算单元从IEE754—1

985

标准升级到了IEE754—20()8标准,减少了精度损失。整数运算

单元从原来的24

bit升级成了能够完整支持32

bit和64

bit精

度的指令操作,一改GT20()时代被人所诟病的计算精度受限

问题。为此,NVlDA将其命名为CDUACore,以区别于旧的

sP内核单元。

第二点上的变化来自于存取单元,在GT2()f)架构中,为了

减小控制单元的开销,SM没有自己的存取单元,只在TPC层

拥有一个存取单元,由3个SM通过流水方式共享,而在

Fem“中,每个SM都具有自己独立的16路存取单元

(Load/Store

Units),可以保证在一个时钟周期内实现16路线

L■H

L叫L叫L叫L叫

圈圈

卜订卜订

曰回

圈圈

卜订卜订

围困

圈圈曰圈圈圈

阿阿冈阿

网F可

IShareclMemoryIISheredMⅢ州l

LOAD/STORE

Ccache

cache

ISharedMemoqtl

TextuireUnits

TexlufeL1

圈1

l,【’内{n?j构示.t三一骂f(:I二{…)

在图1中,内部为共享同一条存储器流水线的3个SM,

从图中SM的内部架构大致可以看出,每个SM包含8个流处

理器(Streanfing

Processor,SP),其类似于一个独立的8路

SIMD处理器,但又略有不同,NVIDIA称之为SIMT处理器,

与传统的SIMD相比,SIMT处理器有2点不同:

①指令宽度实现向量化和透明化:在传统SIMD处理器

中,指令宽度是一个固定的标量,程序必须根据处理器的指令

宽度来开发代码,而在GT200中,指令宽度被隐藏,编程人员

可以在1~512间灵活设置,提高了线程使用的灵活性;

程的地址操作和显存读写。因此,在Femfi架构中,SM已经成

为一个完全独立的处理器。

第三点改进则是支持双wrap调度.在GT200中,由于只

有8个sP,因此每16路线程指令需要分2次才能完全送入

sP执行,而在Femfi中,一次可以同时执行2条16路的指令,

这比GT200中的指令宽度足足大了4倍。

第四点变化则是增加了片上L1缓存的设计,虽然与CPU

中以兆为单位的缓存相比差了不少,但与GT200相比,缓存对

性能的提升是相当明显的12I。

此外,Femfi还在片内增加了独立的特殊函数计算单元,

能够在不影响指令分发的情况下,完成正弦、余弦、倒数和开

方计算等超越函数的计算。

②线程间通信受限:指令宽带的透明化在带来灵活幽均

同时,c乜带来了一定的限制,在传统SIMD处理器中,指令发

射是完全同步的,且各向量间能够共享寄存器资源,而SIMT

中的指令由于存在排队和流水,因此为实现线程间通信,就必

须引入同步机制并借助共享存储器才能实现互访问。

对比新一代Femfi架构,NVIDIA对SM和TPC层次架

万方数据

91

3双线程池设计

当数据处理设备收到多个目标处理任务作业时,启动相

应数量的线程分别对每个任务进行处理,无疑是最常用的实

现策略。但是,当有大量的任务作业集中到来时,会造成大量

线程频繁启动和销毁,这对系统的整体性能产生影响,如图3

所示。

程中安排额外的工作,例如一些数据的初始化、内存的申请和

少量的计算等工作,而这些工作都将被掩藏在GPU执行期

间,进一步缩短的程序的执行时间。受线程池的启发对GPU

线程电进行了专门的管理,形成了双线程池模式,如图4所

示,这样,当平台中存在多个GPU的情况下,就可以实现计算

任务在不同GPU间进行迁移。

GPU

雏…川

GPU任务

作业

线程数■

图3线程数量与性能的关系

GPU

这是由于当线程数量过多时,线程启停和调度的开销会

超过增加线程所产生的收益所致,根据微软给出的建议,应当

将线程数量控制在CPU内核数量的2倍以内,而对于所要面

临的计算密集型任务,线程规模还要适当缩小。

为了避免这种情况的出现,可以采用预先启动并管理一

组线程的方法,在任务到来时可以直接使用,避免频繁创建和

销毁线程的开销,在空闲时,通过降低活动线程的数量来减轻

系统负荷,在线程数量上,通过控制线程总量的方法,避免出

现调度开销过大的情况。这种管理线程的方法被称为线程池

技术。线程池至少包含了线程管理器、工作线程和任务队列3

个部分J_¨l=①线程管理器:负责工作线程的创建、销毁和总数

量上的控制;②工作线程:由线程管理器创建,负责从任务队

列中主动获取具体任务,并调用算法模块运行;③任务队列:

起到任务处理缓冲的作用,当任务集中到来时,对任务进行排

队,避免由于启动的线程过多而对系统造成影响。

在通过线程池对GPU进行并发访问时,人们发现,当存

在多个GPU设备时,只需简单将它们绑定到不同的任务线程

中即可,但如果有多个CPU线程复用一个GPU时,则会出现

问题,这是由于CUDA本身的限制所造成的,由于CUDA在

运行时。其上下文必须被绑定到一个线程中去,这就导致一个

GPU设备在同一时刻只能被一个线程所使用。

如此一来,GPU反而成为了一种瓶颈,所有的线程在这

里都将被被顺序执行,这显然不是设计线程池的初衷,为此采

用了双线程的方式来实现对GPU的复用。

通过为GPU专门启动一个运行线程,当有其他CPU任

务线程需要利用GPU进行运算时,则通过向该代理线程发送

请求的方式来完成任务的计算,在任务执行GPU运算期间,

任务线程处于完全的异步状态,此时可以根据需要在CPU线

;PUl|JGPU2l……IGPU“

娩稷||搜程lJ蛙程

图4双线程池

4平台+插件化设计

“平台+插件”软件体系结构是近年来在软件开发中逐渐

开始流行的一种面向构件的软件开发方法[Sl,之所以选用这种

结构,是基于信号监测业务发展的长期性和多样化的特点。一

方面,在检测和识别算法的实现上,任何一种实用的算法都需

要经过一个漫长的过程,通过不断的改进和升级,才能最终完

善起来;另一方面,监测业务的需求是不断变化的,各种新体

制信号的出现,都需要新的算法来与之适应,而一个稳定和可

靠的运行平台可以保证算法的稳健性,并提高其可复性。

基于上述原因的考虑,从软件模型的角度出发,最自然的

想法就是让每种算法保证自身的独立}生,并通过某种接口,插

入主程序中,实现集成与交互,当需要时,只需对算法部分做

修改或重新插入其他算法模块进行替代,就可以实现不同的

功能㈧。因此基于插件模型设计的作业平台至少包括2个主要

部分,插件和使用

插件的平台,另

外,在逻辑和实现

上,插件接口和公

共函数库也是必

不可少的,它们之

间的关系如图5

所示。

万方数据

92

运行框架:运行框架的职责有2个,对内负责各种任务插

件的识别、加载和卸载,线程池规模的设置与运行。对外则提

供一种统一的接口访问形式,获取插件的访问接口,实现对插

件的参数化以及运行控制,它本身并不知道每个插件具体要

做什么,仅仅是在恰当的时候调用插件来完成具体的功能,如

下所示:

①插件接口:并不负责任何具体的业务和实现,仅仅是作

为一种协议,来规范插件的开发;

②插件:是基于插件接口实现实际功能的实体,插件的功

能不受插件接口的影响,但必须要遵守插件接口规定的所有

接口协议,在这里,插件的最终形式为DLL动态库;

③公共函数库:是一个独立的动态库,将插件和运行框架

常用的函数或类库放在一个独立的运行库中,而不是集成到

运行框架中,既利于降低插件对运行框架的依赖性,又可以降

低运行平台内核的复杂度,提高运行速度和稳定性,通常是将

能够固化下来的常用算法和函数放入公共函数库中。

的开发维护,达到了提高模块通用性和降低数据处理算法在

GPU实现上复杂度的目的。实际工程应用测试结果表明,该

CPU+GPU完全能够胜任大数据复杂且专项业务的实时性工

作需求,在对复杂数据进行处理时,能力表现更佳。

参考文献

[1]仇德元.GPU编程技术一从GLSL、CUDA到OpenCL[M].

北京:机械工业出版社,2011.

【21

Krik

DB,Hwu

Wen—mei.Programmang

Massively

Parallel

Processors:AHands—on

Approach[M].北京:清华大学出版

社.2()10.

【3】Joselli

M,ZamithM,Clua

E,et

a1.An

Adaptative

Game

Loop

Architecture

with

AutomaticDistribution

ofTasksbeteen

CPUand

GPU[J].Computers

in

Entertainment(CIE)

一SPECIAL

ISSUE:Games,2009,4(7):50.

[4]高翔,张金登.基于线程池的多任务并行处理模型Ⅱ】指挥信

息系统与技术,2012,3(4):54-56.

5结束语

本文提出了一种软件插件平台+双线程池的解决方案,

通过插件平台完成了业务层与数据处理实现层的分离和各自

(上接第89页)

[5]王志坚,费玉奎,娄渊清.软件构件技术及其应用【M].北京:科

学出版社,2005.

[6]刘立芳.基于MVC模式与插件式设计的开发架构的探讨

与实践U].电脑编程技巧与维护,2012(12):33—35.

参考文献

[1]王宏旭.基于飞思卡尔智能车的视频导航控制技术研究

【D].沈阳:沈阳理工大学,2014.

[2]段振兴.基于MC9S128的摄像头导航智能车的设计与实

现Ⅱ]甘肃科技纵横,2011(3):11—13

【3】卓晴,王王i{},王磊.基于面阵CCD的赛道参数检测方法

3.3实验结果

经过垂直和水平2个方向的矫正处理后的赛道效果如图

4所示。可以看出经过畸变矫正后的赛道图像与实际的赛道基本

—致,算法运算实时}生强,很好的满足了计算和控制的需要。

飞雌卜

(a)经过畸变校正的效果图

㈣实际的赛道

图4变校正后的最终效果比对

【I】.电子产品世界,20()6(7):141—143

【4]方川,曾龙,魏洪川.摄像头智能车硬件设计方案U】.电子

产品世界,2010(3):50-52.

【5】程钊,万齐齐,唐旋来,等.智能车道路识别及控制研究Ⅱ]伺

服控制.20137(6):49-5

1.

16】6董秀成,杨栩.基于视觉的智能车道路检测与转向控制策略

研究[『】.西华大学学报,2010,4(2):2—3.

【7]曹凯,于少伟,周芦芦基于动态目标位置的智能车辆控制

4结束语

在垂直和水平方向对视觉图像进行畸变校正后,分别经

过相应方向上的坐标变换,就可以得到更接近实际效果的图

像,为后面计算赛道参数提供了准确的输入信息。实验结果表

研究U】信息与控制,2008,14(4):23-25.

[8]Qiushi

Science

and

Technology.navigation

for

typical

module

examplesdesign

ofMCU[J].Posts

375.

andTelecommunications

News

Press,2004,3(2):365

【9】刘明,王洪军,李永科.基于智能车中摄像头的图像采集的

研究U]电子设计工程,2012(17):158—160

【10】田敏雄,沈庆宏,曹凤莲,等基于图像空间变换和插值运算

的投影仪梯形校正法Ⅱ】电子测量技术,2007(3):10—12

明,校正算法运算实时}生强,经过校正后的赛道信息与实际的

赛道基本一致,可以满足计算和控制的需要。

93

万方数据

发布评论

评论列表 (0)

  1. 暂无评论