现在,嵌入式多核处理器已经在嵌入式设备范畴得到广泛运用,但嵌人式体系软件开发技能还停留在传统单核形式,并没有充分发挥多核处理器的功能。程序并行化优化现在在PC渠道上有必定运用,但在嵌入式渠道上还很少,别的,嵌入式多核处理器与PC渠道多核处理器有很大不同,因而不能直接将PC渠道的并行化优化办法应用到嵌人式渠道。本文分别从使命并行和缓存优化两方面进行并行化优化的研讨,探求在嵌人式多核处理器上对程序进行并行化优化的办法。
1 嵌入式多核处理器结构
嵌人式多核处理器的结构包含同构(Symmetric)和异构(Asymmetric)两种。同构是指内部核的结构是相同的,这种结构现在广泛应用在 PC多核处理器;而异构是指内部核的结构是不同的,这种结构常常在嵌入式范畴运用,常见的是通用嵌入式处理器+DSP核。本文探求的嵌入式多核处理器选用同构结构,完结同一段代码在不同处理器上的并行履行。
图1 ARM SMP处理器结构
在现在嵌入式范畴中,运用最为广泛的为ARM 处理器,因而以ARM 双核处理器OMAP4430作为研讨目标。ARM 对称多处理(Symmetric Multi-Processing,SMP)结构如图1所示,依据程序的局部性原理,每一个处理器都具有私有的内存(Local Memory),常见的是一级缓存(L1Cache)。但是,多个处理器之间又触及到彼此通讯问题,因而在常见的ARM 处理器中运用二级缓存(L2 Cache)来处理这一问题。根据对称多处理器结构,一切的处理器(一般为2的倍数)在硬件结构上都是相同的,在运用体系资源上也是相等的。更重要的是,因为一切的处理器都有权力去拜访相同的内存空间,在同享内存区域中,任何一个进程或许线程都能够运转在恣意一个处理器之上,这样就使得程序的并行化成为可能。2在嵌入式多核渠道上进行并行化优化,需求考虑以下问题:
① 并行化程序的功能取决于程序中串行化部分,程序功能不会跟着并行线程数目的提高而不断提高;
② 嵌入式多核处理器相关于PC处理器而言,其总线速度较慢,而且缓存(Cache)更小,会形成很多数据在内存(Memory)和缓存(Cache)问不断复制,因而在进行并行化优化的进程中,应考虑缓存友好性(Cache friendly);
③ 程序并行化履行线程数目应当小于或等于物理处理器的数目,线程过多会形成线程间抢占处理器资源,致使并行化功能下降。
2 OpenMP并行化优化
2.1 0penMP作业原理简介
OpenMP是一个根据同享内存形式的跨渠道多线程并行的编程接口。主线程生成一系列的子线程,并将使命映射到子线程进行履行,这些子线程并行履行,由运转时环境将线程分配给不同的物理处理器。默许情况下,各个线程独立履行并行区域的代码。能够运用work-sharingconstructs来区分使命,使每个线程履行其分配部分的代码。经过这种方法,运用OpenMP能够完结使命并行和数据并行。
图2 使命并行模型
使命并行形式创立一系列独立的线程,每一个线程运转一个使命,线程之间彼此独立,如图2所示。OpenMP运用编译原语session directive和task directive来完结使命分配,每个线程能够独立运转不同的代码区域,一起支撑使命的嵌套和递归。一旦创立使命,该使命就可能会在线程池(其巨细等于物理线程数目)中闲暇的线程上履行。
数据并行也便是数据级并行,对使命中处理的数据进行分块并行履行,如图3所示。C语言中的for循环最合适运用数据并行。
图3 数据并行模型
2.2 快速排序算法原理
快速排序算法是一种递归分治算法,算法中最为要害的便是确认岗兵元素(pivot data)。数据序列中小于岗兵的数据将会放在岗兵元素的左边,序列中大于岗兵的数据将会被放在岗兵元素的右侧。当完结数据扫描后,岗兵元素分红的左右两个部分就会调用快速排序算法递归进行。
快速排序算法中触及算法的递归调用,会发生很多使命,而且这些使命彼此独立,十分合适 OpenMP的使命并行形式;别的,就一次快速排序搜索算法而言,岗兵元素关于左右子区间数据容量巨细具有决定性效果,考虑到嵌入式渠道的缓存(Cache)空间较小,需求对岗兵元素挑选算法进行优化,尽量使得区分出来的左右子区间更均衡,满意负载均衡的要求。
2.3 使命并行化优化
经过对快速排序算法的剖析,快速排序是一个递归调用算法,算法的履行进程中会发生很多重复函数调用,而且函数的履行彼此独立。关于快速排序的一次扫描运算而言,算法首要确认岗兵元素(pivot),并对数据序列进行一次调整,然后对岗兵元素的左右区间再次进行递归调用算法。
如下所示,对使命并行化优化针对每次扫描调整后的左右子区间,将每个子区间的运算笼统为一个使命,并经过OpenMP中的使命并行化原语#pragma omp task完结使命的并行化履行,然后完结了快速排序的使命并行化优化。
使命空间中的数据巨细取决于岗兵元素,因而,算法选取的区分算法(Partition Algorithm)应尽量将数据序列的区分均衡化,本文运用简略区分算法和三元中值法(Median-of-Three Method)进行测验。