一种嵌入式系统开发平台图形库的优化作图方法

文档序号:6573505阅读:708来源:国知局
专利名称:一种嵌入式系统开发平台图形库的优化作图方法
技术领域
本发明涉及嵌入式系统开发平台图形库领域,更具体的说,是涉及一种嵌入式系统开发平台图形库的优化作图方法。
背景技术
Qtopia是由Trolltech公司基于Qt/Embedded开发地第一个嵌入式地窗口环境和应用程序,有PDA和PHONE两种不同的版本。它被广泛用于PDA、手机、网络设施、掌上设备等。它包括全套的个人信息管理PIM(Personal InformationManagement),如地址本、电脑、日程安排、MPEG播放、图像显示、浏览器等,还当然也有Email、游戏、配置工具。
当前,QT在PC上的性能是非常好的。有了qvfb,Qtopia程序也可以在Intel XScale PXA 255上运行。在PC上,整个Qt/Qtopia任务栏的启动时间不到1秒,其中第一次启动是0.8秒,第二次启动是0.4秒。第二次时间要短于第一次是因为部分目标文件已经存在于内存中了。
但是Qtopia在Intel XScale PXA 255上的成绩就不是那么好了。在本次实验的板子上,整个Qtopia启动大约花了28秒。Qtopia启动时间是指Application::exec调用发生之前的时间。这是由于Qt/Embedded是用C++实现的,所以在几种成熟的GUI中系统资源消耗最大。所以有必要对它进行优化。
使用Intel的编译器,提升热点函数的性能,增加缓存,都可以对Qtopia进行优化,但是,使用这些优化,基本都没有对Qtopia进行任何修改,仅仅是使用外部工具,这样没有充分发挥Qtopia的可定制性,也增加了这些优化方法的限制。

发明内容
为了获得更快的启动速度,更适合嵌入式平台的性能,本发明的目的在于公开一种适用嵌入式系统的Qtopia图形库。
为了解决技术问题,本发明是通过以下技术方案实现的。
一种嵌入式系统开发平台图形库的优化作图方法,包括以下步骤(1)判断画点的位置判断要画的点是否在指针确定的长方形内,假如指针不空,则将另一块地址中的内容直接赋值给指针所指向的内存地址;(2)根据画点位置的反馈信息,画点函数的作用是画图点,通过使用内联函数的方法,提到代码执行的效率;(3)根据确定的点画粗线画一条从用户给出的一点到用户给出的另一点的加粗的线,采用内联的方式实现;(4)根据确定的路线画线在用户给定的确定的路线上画一条线,通过去除不必要的内存装载的方式减少循环中变量的调用代价,并几次的读写缓存起来,减少读写的次数;(5)使用当前画笔的颜色填充颜色用当前画笔的颜色填充长方形,长方形以用户确定的参数为基准,确定长和高,通过去除不必要的内存装载,增加缓存的方式,提高函数效率。
作为一种改进,所述的判断画点的位置,是用8条指令来完成判断中需要的数据拷贝。
与现有技术相比,本发明的有益效果是首先,本发明合理利用了流水线性能,比原有的指令更有效率,有效避免了流水线的阻塞;其次,画点函数和画粗线函数通过内联的方式进行了重写,减少了每次调用和调出的进出栈代码,也就降低了函数调用的代价,减少了启动时间;最后,画线函数和填充函数去掉了很多不必要的内存装载,对于经常调用的变量,放入联想存储器,降低了调用代价,同时减少读写内存的次数,增加缓存的利用率,提高了效率,减少了读写代价。通过以上方法,提高了作图的性能。


图1是位置判断函数inClip()的修改前后示意图。
图2是画点函数drawPoint()内联前后的对比示意图。
图3是画线函数hilineUnclipped()的流程图。
具体实施例方式
结合附图,下面通过具体实施例对本发明进行详细说明。
一种嵌入式系统开发平台图形库的优化作图方法,包括以下步骤(1)优化的位置判断函数bool QGfxRasterBase::inClip(irnt x,int y,QRect*cr,bool known_to_be_outside)函数的作用是判断点(x,y)是否在cr确定的长方形内。
在原函数中,假如cr不空,则将另一块地址中的内容直接赋值给cr所指向的内存地址,如附图一左边代码所示。这条语句在编译成机器指令之后,在真正的执行过程中,需要8个时钟周期,并有6个时钟周期的延时损耗。但是,这条指令可能会阻塞CPU的流水线执行,这将会带来极大的系统损耗。
所以,本文用8条小的指令来完成这次数据拷贝。虽然函数代码的规模增加了,数据拷贝的次数也增多了,但是由于CPU是流水线执行的,所以这些简单的指令实际上会比原指令更有效率。同时,在此过程中CPU还可以根据调度算法即时调度一些更高级别的进程进行运算,避免了流水线被阻塞。流水线避免被阻塞是最关键的。附图1所示为修改inClip()的函数代码,原函数中有两处这样的代码,在优化时都做了相应的修改。
(2)优化的画点函数inline void QGfxRaster<depth,type>::drawPoint(int x,int y)函数的作用是画点(x,y)。drawPoint()是一个在画图过程经常会被调用,规模很小,内部不存在循环的简单函数。对于这样简单的函数,调用前的入栈代码,调用后的出栈代码数量可能就已经超过函数本身的代码了。而内联函数是将函数代码直接嵌入到被调用处的函数,这样可以省去函数参数压栈的工作,减少函数调用的代价。所以将drawPoint()使用inline声明成内联函数,会比普通的函数声明更有效率,同时内联函数由编译器完成,安全,便于调试。附图2表示修改前后普通函数和内联函数的调用过程。
(3)优化的画粗线函数inline void QGfxRaster<depth,type>::drawThickLine(int x1,int y1,int x2,int y2)函数的作用是画一条从点(x1,y1)到点(x2,y2)加粗的线,同画点函数相同,我们把这个函数内联化。
(4)优化的画线函数void QGfxRaster<depth,type>::hlineUnclipped(intx1,int x2,unsigned char*1)函数的作用是在*1确定的路线上画一条从x1到x2的线,本发明对此函数的优化分为两层。首先,去除一些不必要的内存装载。由于在函数循环中有一个变量unsigned iht*myptr=(unsigned int*)1经常被调用,所以将*myptr设置成为本地变量const unsigned long int localpixel=pixel(*myptr指向的地址存放的就是pixel)。由于*myptr常被调用,根据时间相关性和空间相关性,localpixel就会存在于寄存器或TLB中,而不用从内存装载,*myptr的调用代价将会大大缩小。
其次pixel的数据类型声明是unsigned long int,这就意味着它的长度是32bit。而系统的数据缓冲是16byte的,4次对pixel的读写正好能够满足一次数据缓冲的大小。于是,本文将4次pixel读写缓存起来,然后再1次执行以提高效率。因为,4次4byte的读写的时间肯定要长于1次16byte[2]。过程如附图3所示。
(5)优化的填充函数void QGfxRaster<depth,type>::fillRect(iht rx,int ry,intw,int h)函数的作用是用当前画笔的颜色填充长方形,长方形以rx,ry为基准,以w为长,以h为高。
本发明对fillRect()函数的优化方法跟hlineUnclipped()类似,也是去除了不必要的内存装载、将4次4byte的读写结合成1次16byte的读写。
为了检验的新的画图函数的效果,使用修改过的QTopia图形函数库进行实验。我们使用的目标平台是Intel XScale的开发板,使用的操作系统是ARMLinux。本次实验所得的数据都是在这个平台上获得。
以下是我们的平台详细参数

首先我们改动算法,编译通过。之后我们使用QTopia。
Qtopia-phone 2.0.0中自带了一个benchmark工具叫做qtperf,这是一个标准的Qtopia的应用程序。在本实验中将其重新编译之后放在$QPEDIR/src/tools/目录下,在需要使用时可以通过命令行启动qtperf,以获得所需的相关数据。但是,因为Qtopia free2.1.1缺省不能编译qtperf,所以我们需要手动配置qtperf到Qtopia free2.1.1中。方法是在$QPEDIR/src/general.Pn的APP_PROJECTS宏定义中加入tools/qtperf。
经过以上优化之后得到的结果为启动时间约为25秒,性能获得了约11%的提升。使用了qtperf,我们可以得到

我们可以看到,性能由显著提升。
最后,还需要注意的是,以上列举的仅是本发明的一个具体实施例。显然,本发明不限于以上实施例,还可以有许多变形。本领域的普通技术人员能从本发明公开的内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。
权利要求
1.一种嵌入式系统开发平台图形库的优化作图方法,其特征在于,包括以下步骤(1)判断画点的位置判断要画的点是否在指针确定的长方形内,假如指针不空,则将另一块地址中的内容直接赋值给指针所指向的内存地址;(2)根据画点位置的反馈信息,画点函数的作用是画图点,通过使用内联函数的方法,提到代码执行的效率;(3)根据确定的点画粗线画一条从用户给出的一点到用户给出的另一点的加粗的线,采用内联的方式实现;(4)根据确定的路线画线在用户给定的确定的路线上画一条线,通过去除不必要的内存装载的方式减少循环中变量的调用代价,并几次的读写缓存起来,减少读写的次数;(5)使用当前画笔的颜色填充颜色用当前画笔的颜色填充长方形,长方形以用户确定的参数为基准,确定长和高,通过去除不必要的内存装载,增加缓存的方式,提高函数效率。
2.根据权利要求1所述的一种嵌入式系统开发平台图形库的优化作图方法,其特征在于,所述的判断画点的位置,是用8条指令来完成判断中需要的数据拷贝。
全文摘要
本发明涉及嵌入式系统开发平台图形库领域,旨在一种嵌入式系统开发平台图形库的优化作图方法。该方法包括以下步骤一种嵌入式系统开发平台图形库的优化作图方法,其特征在于,包括以下步骤(1)判断画点的位置;(2)根据画点位置的反馈信息,画点;(3)根据确定的点画粗线;(4)根据确定的路线画线;(5)使用当前画笔的颜色填充颜色。本发明首先合理利用了流水线性能,提高了效率;其次,画点函数和画粗线函数通过内联的方式进行了重写,减少了启动时间;最后,画线函数和填充函数去掉了很多不必要的内存装载,增加缓存的利用率,提高了效率,减少了读写代价。
文档编号G06F9/44GK101013369SQ20071006716
公开日2007年8月8日 申请日期2007年2月2日 优先权日2007年2月2日
发明者陈天洲, 马吉军, 黄江伟, 郑臻炜 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1