判断分支结构

2024-07-25

判断分支结构(共3篇)

判断分支结构 篇1

摘要:为了运用多种手段拓展Authorware系统功能以解决数据库问题, 通过与Authorware传统判断结构的应用方法、数据库引入方法进行对比, 基于Authorware顺序判断分支结构以及系统函数, 使用记事本模拟数据库, 得到随机加载, 并动态获取外部文本文件信息的优化方法。通过抽奖游戏实例的制作, 总结出其设计思路及关键技术。该技术简化了Authorware外部数据的引入方法, 为Authorware多媒体作品的动态显示提供新的实现途径。

关键词:Authorware,判断分支结构,函数,记事本,动态随机

0 引 言

Authorware是美国的Macromedia公司于1991年10月推出的一款用于交互式多媒体制作的软件[1]。它使用基于图标和流程线组成的流程图, 能够清晰地将结构复杂的多媒体程序设计思想和程序结构直观地表达出来, 加之丰富的系统函数和系统变量, 使多媒体创作更加灵活和多样[2]。使用Authorware在制作多媒体作品时经常需要实现随机、动态地加载文本信息, 并达到滚动显示的效果。通常人们只是单纯地使用判断图标中随机分支类型, 来解决这一问题, 存在局限与不足。本文将结合抽奖游戏实例, 提出基于Authorware顺序判断分支结构以及外部文件引入技术[3]实现动态显示、随机获取信息的简化方法。

1 使用关键技术介绍

1.1 判断分支结构

判断分支结构由一个判断图标及其右侧的多条分支流程构成, 如图1所示。

判断图标自身内部不包含任何内容, 只包含一些控制。使用它时, 必须有图标挂接在它的右侧, 其功能是为应用程序设置分支路径, 由程序的判断分支结构来自动决定执行哪一个分支。也就是让程序做一个判断或决定, 在当前这个程序结点之后, 怎样运行后面的程序[4]。使用判断图标可以解决类似于C语言编程方面的IF结构、For结构或Switch结构。

在Authorware中, 判断分支结构分为顺序分支结构、随机分支结构、随机执行未用分支结构、计算分支结构4种。通过对判断图标的属性进行设置来选择不同的分支结构。它们的作用和意义如表1所示[2]。

1.2 函数

Authorware中变量和函数是实现一些复杂功能所不能缺少的, 如动态控制显示的内容、操作数据库等[5]。本文通过使用计算图标及相关函数实现引入外部文本内容。随机读取文本信息, 循环执行判断结构分支等功能。

2 设计思路与制作过程

下面通过应用举例, 介绍抽奖游戏制作过程, 来诠释基于Authorware顺序判断分支结构, 动态显示, 并随机获取文本信息的简化方法。图2为抽奖游戏工作流程图。

2.1 构建用于动态显示的“数据库”

为了提高Authorware设计作品的功能, 经常要用到数据库。通常做法是先在Authorware中注册数据库, 也就是定义数据源[6], 然后由应用程序用结构化查询语言SQL访问数据库管理系统[7]。

上述的方法虽然不错, 但操作起来比较麻烦, 可以考虑运用多种手段拓展Authorware系统功能以解决数据库问题, 即实现了增强软件的表现力, 操作起来又方便可行。

本文采用记事本模拟数据库, 来支持数据库操作。新建一个记事本文档database, 在其中输入若干个获奖号码, 每一行为一个号码, 如图3所示。

2.2 读取“数据库”中的所有文本信息

在命名为“初始化”的计算图标中, 使用Authorware提供给用户的系统函数string:=ReadExtFile ("filename") [8], 读取“数据库”中的所有文本信息。函数中ReadExtFile用来读取指定的文件中的内容, 并以字符串的形式返回文件的内容。ReadExtFile只能读ASCⅡ (纯文本) 文件, filename指定的URL地址必须完整。代码为string:=ReadExtFile ("database.txt") , string中包含记事本中的所有信息, 为动态获取作准备, 图4为计算图标中用于读取外部文本文档信息的代码。

2.3 构建随机加载文本信息的顺序分支结构

传统使用判断结构时, 要想随机运行某一个分支, 通常将分支结构设计为“随机分支结构”类型, 该方法需要制作若干个分支流程, 并在每一个分支流程中分别放入不同的显示信息, 通过随机执行多个分支, 来实现信息的滚动显示与随机读取。而在具体操作中一个分支结构中不便于加载过多的分支流程, 这主要考虑到既增加程序负担, 使得程序变得冗余, 同时制作起来也相当麻烦, 如果滚动显示信息内容较多, 该方法很难实现, 而且其数据的处理过程其实是静态的、有限的, 存在一定的缺陷与不足。

因此本文采用较为简便的顺序分支结构[9], 并结合使用Authorware中的系统函数, 动态的加载信息。具体设计为:

在程序中添加一个判断图标, 设置分支属性为“顺序分支路径”, 设置重复属性为“直到单击鼠标或按任意键”, 并以2个群组图标作为分支结构的2个分支路径, 用于随机加载文本信息的顺序分支结构流程图及各分支代码, 如图5所示。

2.3.1 分支1

第一个分支用来随机获取一个号码, 并将其显示出来, 通过调用系统函数number:=Random (min, max, units) 和resultString:=GetLine ("string", n[, m, delim]) 来实现[10]。

number:=Random (min, max, units) 函数获得一个min和max之间的随机值, units为间隔单位。本文中min, max, units分别代表“数据库”记事本database中最小行数的标号、最大行数的标号、以及随机获取最小到最大行数的标号时一次间隔的单位行数, 代码为pointer:=Random (1, 20, 1) , 得到的pointer为记事本database中的某一行的行标, 如图5所示。

resultString:=GetLine ("string", n[, m, delim])

函数的作用为从字符串string中取回第n行。如果既指定n, 又指定m, 即取回第n行的第m项。在缺省情况下, 每一行用回车符分开, 如果使用了不同的分隔符 (如Tab符) , 则使用delim参数。通过使用该函数, 并结合前面读取的“数据库”中的所有文本信息string以及随机生成的行标pointer, 将得到一个获奖号码number, 其代码为number:=GetLine (string, pointer) , 如图5所示。

2.3.2 分支2

第2个分支功能主要是保证循环执行第1个判断分支, 以使得号码能够随机滚动显示。调用系统函数GoTo (IconID@"IconTitle") [10], 当Authorware遇见GoTo语句时, 它将跳转到命名为“IconTitle”的图标继续执行。在第二个分支中加载命名为“goto”的计算图标, 添加的代码如图5所示。

2.4 显示最终中奖号码

在程序的最后加载命名为“最终显示中奖号码”的显示图标, 并在其中输入代码{number}, 如图5所示。当单击鼠标或按任意键时, 程序将退出执行整个判断结构, 执行主流程线上该显示图标, 以显示中奖号码。

以上是引入实例的设计思路及制作关键环节, 其功能模型如图6所示。

3 结 语

综上所述, 文中提到的动态有两方面的意义, 一方面是内容上的动态, 也就是在Authorware中实现文字、符号的读/写, 实例采用记事本模拟数据库, 将所有要显示的信息存入文本文档中, 通过使用系统函数ReadExtFile支持对外部文件的嵌入, 实现文本文档的读/写。另一方面信息的显示方式是动态的, 通过循环执行判断分支, 使文本呈现滚动的、变化的效果, 就形成了形式上的动态。

经过实际运行检验, 证明上述方法有效地简化了传统的制作方法。根据该方法开发出的程序可以作为独立的模块移植应用到需要类似功能的程序中, 可大大简化、缩短Authorware程序的开发时间。本文重在原理介绍及逻辑实现, 程序内容和画面的背景、按钮等, 可以视具体情况加以应用。

参考文献

[1]张青.Authorware多媒体课件的制作[J].青海大学学报:自然科学版, 2001, 19 (4) :102-103.

[2]陈冠雄, 李光群.Authorware多媒体制作教程[M].北京:清华大学出版社, 2006.

[3]吴海莲, 熊俊.多媒体应用程序中快速引用外部文件[J].南昌大学学报:理科版, 2004, 28 (4) :353-355.

[4]宋一兵, 蔡立燕, 王京.Authorware多媒体技术教程[M].北京:人民邮电出版社, 2008.

[5]杨迎新, 郝凤肖.基于Authorware环境的多媒体课件的设计与实现[J].计算机工程与设计, 2004, 25 (9) :1627-1629.

[6]梅申信, 梅林, 王郁葱, 等.Authorware中的ODBC技术[J].安徽农业大学学报, 2003, 30 (2) :213-216.

[7]梁培文, 叶小平, 周奇.基于Authorware实现的多媒体数据库管理系统的研究[J].中山大学学报:自然科学版, 2008 (Z) :11-13.

[8]梅申信, 梅林.Authorware中的函数使用[J].安徽农业大学学报, 2004, 31 (2) :242-245.

[9]钟玉, 沈洪, 刘晓颖.多媒体应用设计师教程[M].北京:清华大学出版社, 2004.

[10]毕广吉.Authorware变量、函数、控件手册与使用[M].北京:电子工业出版社, 2003.

[11]李艳.数字电影文件如何在Authorware中正常播放[J].现代电子技术, 2010, 33 (1) :135-136, 144.

判断分支结构 篇2

湖北省黄石市第二中学 李 志

摘要:在全国、省市信息技术优质课中对培养学生信息素养存在两种争议:一种观点认为课堂教学中应注重学生技术、技能培养,将教学中指导学生如何操作和使用作为核心;一种是在教学中着重培养学生处理信息的方法和过程,用探究学习的方式去发现和学习技术,形成技能。本文在多分支教学中设计的“爱心礼物”AB案实际上就是基于这两种观点的典型例子,通过具体教学与反思,我更赞同第二种观点,即引领学生思维,培养分析问题和解决问题的能力,通过思维促进技能。

关键词:信息素养 多分支结构

一、引言

在信息技术课程教学当中,我们培养学生信息素养,或者说信息能力,到底这是一种什么样的能力?这个问题在全国、省市信息技术优质课中存在两种争议:一种观点认为课堂教学中应注重学生技术、技能培养,将教学中指导学生如何操作和使用作为核心;一种是在教学中着重培养学生处理信息的方法和过程,用探究学习的方式去发现和学习技术,形成技能。

对于这个问题,我一直在思考,是否能把狭义的信息技术能力(技术上的操作)拓展到广义视角,也就是信息处理能力和技术能力并举这个目标上来?

我在多分支教学设计中,设计了“爱心礼物”AB案,AB案反映了两种不同的教学设计理念,通过实际教学和反思,让我更加坚定了引领学生思维,培养分析问题和解决问题的能力,通过思维促进技能的教学理念。

二、教学分析

1.教材分析

本节课是教育科学出版社普通高中课程标准实验教科书《算法与程序设计(选修)》第二章第2.3.2节的部分内容。本节内容是在学生初步了解了VB的编程环境、VB中的数据类型、变量的使用以及If单分支与双分支结构,进一步向学生展示VB多分支选择结构的使用。

2.学情分析

本课教学对象为高一年级学生,我所带的3个班是年级基础较好的理科班,学生思维活跃,接受能力较强,当然,也有一些计算机基础较为薄弱的学生。学生本学期第一次接触到程序设计,但是一周开设了2节课,课程开设以来,学生已经基本掌握了使用计算机解决问题的步骤,能够完成简单输入、计算、输出的顺序结构程序,上节课已经学习了单分支和双分支选择结构,学生对If的这两种结构有了一定的理解,能够编写简单的选择结构程序。

三、教学设计

【教学设计A】

1.设计说明

本教学设计通过教师提出的一个个小任务,引导学生逐个解决本节课涉及到的知识点,最后要求学生用多分支结构完成完整的“爱心礼物”的实例。

2.教学目标

(1)能理解选择结构中单分支和双分支选择结构执行过程,并用其解决实际问题。

(2)能理解多分支选择结构,并能用If多分支语句和Select Case多分支语句解决实际问题。

(3)能理解Image控件的picture属性和List控件的text属性。

3.教学过程

(1)创设情景 导入新课

教师通过演示选择商品,程序能够显示相应商品的图片导入新课。目的在于引导学生思考为什么选择一个商品,程序能显示相应的图片,也就是引导学生复习上节课学到的单分支语句或者双分支语句的执行过程。

(2)师生探究 构建新知

在这个过程中设计四个任务:

任务一:在图片框中显示商品图片。设计该任务的目的是解决如何显示图片的技术问题。

任务二:通过下拉列表框选择商品名称,在图片框中显示对应的商品图片。在这个任务中,设置下拉列表框中只有两个商品。这样设计的目的在于引导学生用已有单分支或者双分支选择的知识解决这个问题。

任务三:在任务二的基础上,将下拉列表框中的商品增加到3个以上,此时用原来的双分支语句无法解决问题,从而引出本节课的新知识:if语句的多分支结构。

任务四:在任务三的基础,用select case 语句来实现多分支选择功能。

通过这四个任务的设置,帮助学生逐步解决技术难点,同时引出本节课的新知识,在此基础上完成学生新知识的构建与学习。

(3)交流总结,拓展延伸

在这个环节中,教师总结本节课所学到的知识,同时要求学生运用已有知识和新知识解决“爱心礼物”任务。

“爱心礼物”任务描述如下:小明爸爸的生日快到了,小明想用平时节省下来的800元钱给爸爸买一身行头,同学们,你们能不能设计一个“爱心礼物”的小程序让爸爸挑选喜欢的上衣、裤子和鞋子共三件礼物且不超出800块钱预算呢?

【教学设计B】

1.设计说明

教学设计B与教学设计A的不同之处在于:首先向学生提出“爱心礼物”问题,要求学生自己操作,口述程序流程,用程序流程图画出程序模块结构。然后分析程序流程,引导学生讨论思考:我们完成该程序,需要解决哪些问题?在此基础上,教师进一步引导学生联系旧知识,解析任务。在接下来的过程中,教师将学生分组,让每个小组的学生进行合作探究,并要求进行汇报交流,通过学生之间的交流让学生找出本节课的新知识,然后在师生的共同探究中达到新知识的构建,最终实现课程导入时的任务。

2.教学目标

(1)通过学生自己分析,找到需要解决的问题。

(2)通过分组,学生在小组内完成任务的探究、交流,教师适当加以引导完成新知识的构建与运用。

(3)培养学生自主学习、自主探究的能力。

3.教学过程

(1)创设情景 整体感知

在这个环节中,通过实例演示、操作让学生了解程序流程,要求学生口述程序流程,并用程序流程图画出程序模块结构。

(2)分析流程,明确任务

在这个环节中引导学生思考本程序需要解决的问题,老师仅帮忙梳理,得到我们要解决的任务:图片载入、双分支、多分支选择以及价格核算。接下来教师引导解析任务:阅读图片加载相关材料,上衣的选择应该用双分支结构,裤子和鞋子用多分支。老师集中解决基础问题──图片载入,为后面多分支探究扫除障碍。

(3)小组合作,自主探究

在这个环节中三人一组,学生选择“双分支”“多分支”“价格核算”问题进行合作探究,要求学生根据流程图写程序,自己上机调试程序并做好问题的记录以备交流汇报使用。

上衣小组:要求上衣小组完成双分支的交流。

裤子和鞋子小组:设计了两个预设。预设一:学生展示不成熟(未完成的程序)。学生说出自己的问题与困惑;老师帮助分析,找出原因,修改完善,并调试运用。预设二:学生展示已经完成的程序,老师将双分支和用单分支语句解决多分支程序进行列举比较(相同点和不同点)。

价格核算小组:引导学生思考如何让程序知道你选择了多少钱的上衣、裤子和鞋子?用变量保存价格的时候应该放在程序的什么地方?整个礼物选择结果的判断应在什么地方完成?

小结:利用单分支以及多个单分支解决问题。

(4)师生探究 构建新知

在上面的环节中,教师引导学生用旧的知识解决了多分支问题,在这个环节中,教师引导学生进行多分支的深入研究。老师引用学生新发现,或者直接引出“多分支结构”,让学生进一步思考“多分支结构”与刚才“单分支解决多分支”有什么不同?

教师用单步调试的方法,让学生分析两者之间在执行过程中的不同,找到If多分支语句的优势所在,通过学生的自主探究,发现这节课的新知识,同时要求学生用自己熟悉的方法,完成整个程序的设计,并调试运行。

(5)交流总结,拓展延伸

在这个环节中指出VB中还有一种多分支语句---Select Case语句,让学生阅读教材36页的例子和教材旁边的注释,要求学生用Select Case语句实现选择鞋子的程序。学生自主探究,调试程序并运行,最后进行小结,包括:多分支选择语句的格式;多分支选择语句的执行过程;在处理多选一问题时,使用多分支选择结构语句能够使程序更加直观,并能够提高程序的运行效率。

(6)学生完成自我评价表

设计了自我评价表,通过学生自我评价的反馈信息,有助于教师了解教学的实际情况,便于在以后的教学中调整教学方法和教学策略。

(7)课后练习

由于Select Case语句结构较If多分支语句更加灵活,鉴于要在一节课内完成两个多分支语句的理解比较困难,所以在处理时进行了侧重,通过课后练习的方式,让学生在课后去思考、消化。

四、爱心礼物AB教学设计的分析及思考

该案例所使用的“爱心礼物”程序源于南京师大附中王静老师2010年暑假给湖北老师做新课程培训时所举例子,王老师没有给出这节课的教学设计。

在最初设计这节课时,我采用的是A案,考虑到整个例子的难度,我将该例子进行任务分解,在完成四个任务以后,让学生运用新知来最终解决“爱心礼物”问题,在这个过程中,学生跟着老师安排的任务进行着,但我当初的设计忽视了学生自己的分析能力,忽视了学生知识的建构,学生知其“源”,不知其所以“源”。通过A案的实施,学生在课堂上学得很不错,但在其它运用中,我发现很多学生不知道如何用已有的知识去解决问题,及缺乏整体问题的分析能力。

高中生,他们的基础知识已经从小学、初中的通实性、基础性,提升到更高的角度;他们的思维已经由感知、抽象,提升到演绎、归纳等逻辑思维阶段;他们的学习能力已经由老师的帮、扶、教,逐渐过渡到了自学、探究、创新、个性的层次。

由此想到,只专心教会学生基础知识肯定会忽略学生创造性的发现,个性化的学习方法,以及实际运用能力。我们能否让学生站在程序员的角度,熟悉信息处理的全过程,能够主动地去分析需要解决什么问题,然后是如何去解决问题,通过这个发现与解决问题的过程让学生知识与能力并举,B案的教学设计正是立足于此而展开。

教学设计B案,通过“爱心礼物”程序创设情景,通过叙述操作过程,以及绘制程序流程图引导学生对程序进行整体上的把握,培养学生整体分析能力。通过分析流程、明确任务环节,帮助学生从事物表象抓住本源,培养学生分析程序、解析问题的能力。在知识获取过程中,把所需知识演变成学生迫切想解决的问题,并建立新旧知识的联系,让学生自主探究、合作学习而完成。通过整体把握分层(程序模块)思考,结合已有知识对问题进行梳理,培养学生程序设计的策划能力。

五、展望

在实际完成B案的过程中也遇到了很多问题,通过学生教学反馈信息来看,还是有一部分学生对于VB程序设计的学习感到困难,这也反映出学生在思维上存在一定的依赖性,自主探究的动力和习惯还有待提高。当然,老师在进行教学设计的过程中应该有更多的预设,通过充分的换位思考,提高教学效果。

融合判断信息于分支预测器 篇3

显式并行指令计算体系结构(EPIC)已经成为一种通过指令级并行(ILP)来使未来处理器性能得到提升的有效体系结构。IA-64安腾处理器就是一个应用显式并行指令计算体系结构的例子。

EPIC体系结构其中的一个新特性就是支持判断执行,每个操作都由体系结构中可用的判断寄存器有效保护,每个操作都只有在寄存器中保护的判断值为真的时候才被执行。

我们研究的目标就是使用判断执行技术通过移除难以预测的分支来降低分支预测失败的概率。为了区别判断空间和难以预测的分支,我们必须有侧重的选择,把最基本的可预测的分支(条件转移,无条件转移,返回指令)标志到判断空间里去,我们把放到判断空间里的分支定义为空间分支(Region branch)。

创建判断序列(判断空间形成)基于通过移除难以预测分支使判断空间里的分支的可预测性得到相反的效果。空间分支的执行是通过比较判断空间的寄存器的值来移除难以预测的分支。空间分支那些频繁取出的分支将比其他的分支得到更多的预测(补充:空间分支被取出可能是判断值是真也可能是假)。由于错误的预测迁移,当使用传统的分支预测器来获得难以预测的分支的方向是难以减少分支失败的概率的。

在这篇论文中,我们提出2种新的分支预测器优化方法。第一种是叫做Squash False Path(Squash-FP)的分支预测器优化,它试图通过获得分支的判断值,如果判断值为假则不进行跳转。这个分支器要实现的目标就是正确的预测空间分支中判断值为假而不跳转的分支。

第二种分支预测器优化法是我们增加判断信息到全局历史寄存器中。我们把它叫做Predicate Global Update Branch Predictor(PGU),这种体系结构通过加入判断信息到全局历史寄存器来试图改进空间分支的预测性能。当分支指令的判断值改变时,PGU预测器更新全局历史寄存器的判断值。当标志全局分支表的时候,这样能有利于空间分支增加与全局历史寄存器的相关性。

2 分支预测

2.1 包含判断信息的分支预测

August.提出了一个修改后的分支预测结构叫做加强的判断分支预测器(PEP),它把一个局部的分支预测解释器嵌入到判断信息中。解释器详细地描叙了为什么把无偏分支转换成判断信息的时候可能引起先前可以预测的分支变成了不可预测的的问题。解释器就是通过储存保护的BTB表分支指令判断寄存器的数值来解决这个问题的。更多的是,有2个局部历史表记录着BTB表的入口信息,一个用来协助当保护的判断信息是真之后的分支动作。理论上,“真历史表”应该被调用和被先前同类型的分支更新直到当保护的判断值为真时再次被调用。“假历史表”当保护的判断值为假的时候也被调用,并希望它提供的预测分析是“不跳转”。然而实际中,当分支被取出无论当前判断寄存器文件里记录的是什么值,它都要通过历史表来决定跳转行为。比如当判断定义的保护的分支被发射到了流水线中,但还没有完成,这时分支信息就可能进入“假历史表”中直到分支判断信息值被改写成真值。相反,如果判断信息的值是来自以前的判断信息为真的代码集和判断定义表明当前的分支还一直没有被执行的时候,有的分支信息为假的分支可能进入“真历史表”。

图1是一个PEP分支结构的示意图。一个分支预测器使用2个连续的查找表。一个查找表用来访问BTB用来提供协助分支跳转的保护判断信息。另一个查找表是在判断寄存器文件中查找当前可用的判断信息。从BTB表中提取的2个局部历史表到2位的索引历史表的同时再由判断值来决定预测方向。我们假设局部历史表在取指阶段能智能地更新并能正确地对预测错误的分支信息进行覆盖。

2.2 基线分支预测器

基线分支预测器是一个Meta Chooser类型的预测器,如图2。本文中模拟一个4K的局部入口和全局入口,12位的全局历史寄存器构成的选择表。这种类型的分支预测器利用超前分支局部历史表以及当前全局历史分支表路径来获得精确的分支预测。这种预测器使用全局表来在一个单周期来进行预测,通过压缩和更新局部分支表在下个周期提供给选择器使用。

2.3 Squash-FP

最早的判断分支预测器结构是使用保护的判断值来完全排除错误的保护分支的预测器。这种使用判断技术是由August et al.修改的。它们的增强型判断预测器(PEP)结构使用分支的保护判断值来选择2个局部历史寄存器中的一个来预测分支,引导保护判断为真的分支预测器到2位预测器中,并且这些错误或者已经定义保护判断值到另外的2位预测器中。

本文的Squash False Path(Squash-FP)结构保存着判断寄存器的值用来进入分支BTB表的入口。在预测过程中判断寄存器在寄存器表中查询并且查询的返回值不仅是判断值还有一些在流水线中其他的判断信息。没有其他定义的判断寄存器被称为resolved。如果判断值被解析并求的值为假,那么我们就能精确的预测不跳转的分支。这样不仅能对那些在取指解析后得到的判断值为假的分支提供100%的预测精度而且还能减少与其他预测分支的冲突。

为了提供这种分支器。我们依赖查询寄存器来确定最新的定义是否已经写入寄存器中了或者是流水线中的指令是否已经提供了它的结果值。这个信息在传统的结构中提供依据来决定执行指令时是使用旁路信息值还是使用寄存器文件。我们也使用处理器提供的相同信息来确定判断是执行了还是没有。

2.4 全局更新预测器

我们将介绍一种融合判断信息的基于全局历史表的分支预测器:Predicate Global Update(PGU)预测器结构保存了随机全局历史表的判断定义状态的判断结果。当一个判断定义的分支完成了执行,它将把求得的条件结果放到全局历史表寄存器的最低位,同样,把分支结构也保存到全局历史寄存器中。然而,由于判断的定义,这只能在写回阶段当判断定义的值已知的情况下发生。由于判断定义的指令执行一个延迟更新的随机全局历史寄存器过程,所以全局历史表的信息的顺序就与以前没有判断的过程不同。只要分支/判断定义在执行过程中的分类类似,那么延迟更新的全局历史寄存器的结果就有高的精确预测。

由于分支依赖于历史寄存器的判断信息,所以判断值的更新必须在分支被取出和预测之间进行。这通过编译器来实现尽可能快的判断定义的调度和尽可能慢的空间分支的调度。由于只有当分支跳转后移出以后才能离开这个空间导致一些额外的错误指令路径的执行开销。

空间分支(包括伪装的和真实路径的)的更新过程,PGU预测器和基线判断预测器的原理一样。它们都是在取指阶段随机更新全局历史寄存器和进行预测。

3 实验评估

通过SPEC95测试程序子集(go,gcc,m88ksim,and ijpeg),SPEC92以及2个其他的测试程序得到的结果。Dot是一个标图工程以及gs是ghostscript程序中把postscript转换成jpeg格式的程序。我们选择这些测试程序是因为它们有一个合理的错误预测的数目。我们使用相同的输入能得到空间的组成以及获得模拟后错误分支的结果。

我们使用ISA来获得判断的结果。我们使用的Alpha ISA增加了每条指令的判断保护寄存器以及增加我们上面介绍的判断比较指令到ISA中来定义判断值。我们使用修改的ISA来建立判断空间来模拟判断调度过程。

我们通过分支预测失败的概率来评估我们的体系结构,这个错误预测的概率就是计算被分割的错误预测。另外,我们还给出了难以预测分支指令的比例。

我们对错误预测分支的检测首先没有使用任何判断信息来更新分支预测器。首先在图3中3个数据显示以前只使用局部预测的错误预测和Meta Chooser(全局和局部都有)的错误预测的概率。

上面的Meta Chooser预测器的表现比只使用局部或者全局的预测器好很多。图3中第4个数据表明当使用空间组成算法和判断难以预测的分支的方法后错误预测的概率。结果表明明显减少了错误预测的失败概率,其中使用判断难以预测分支空间组成的方法能得到go(22%下降到15%),ijpeg(8.5%下降到2.5%)和m88ksim(3%下降到1%)的结果。测迁移导致很高的错误预测概率,这些在dot和li测试程序中很明显的得到显示。

对于其他的程序,其结果显示我们使用难以预测的分支组成方法没有成功的判断到错误预测。事实上我们通过转换一个难以预测的分支成为一个判断定义已经减少了大部分的错误预测的概率,但是使用基线Meta选择器对剩下的空间分支变的更加难以预测。错误预

PEP预测器使用预测信息选择局部历史预测,尽管PGU预测器包括全局历史寄存器的预测信息。正如以上所列结果,我们检查了使用同一区域的体系结构。通过访问时间比较这两个设计的复杂性,PEP结构在单周期中很难实现。PEP结构的关键路径需要两个前瞻表实施条件分支预测。PEP结构首先要查询分支缓冲表来预测对应分支和两个局部历史,于此同时,查找预测寄存器文件获得局部历史的两位预测器最新值。只有使用寄存器文件查询的结果才能选择预测。通过比较PGU结构,只有一个使用全局历史寄存器索引两位计数表的查询表,它类似于存在分支预测结构。减少的PGU设计复杂性和访问时间为实现分支预测器做出选择。

4 结束语

预测允许移除难以预测的分支和用预测定义取代,预测定义可不必预测。为了有效地减少分支预测,预测区域信息必须集中于最难以预测的分支。为了做到这些,我们发现必须允许无偏但原先可预测的分支寄留分支区域。因此,我们发展了难以预测区域信息算法,目的是移除这些难以预测的分支和允许一些保留在预测区域中无偏可预测的分支。平均来说,使用难以预测区域形成的基准测试程序预测区域形成减少了8%到5.5%的分支错误预测率。

为了解决这个问题,先前的工作增加了保护预测信息的局部分支预测策略。我们用逐渐减少的错误分支移位预测全局更新分支预测器体系结构改进区域分支预测。预测全局更新分支预测器通过在写返回中更新前瞻全局历史寄存器允许预测定义评论来提供相关信息。通过优化可预测的敏感预测策略,我们尽可能地调度区域去允许预测定义信息。

最终,对于使用Squash-FP保护预测分支问题我们建议用一个直接的预测方法。对于伪造的分支,在分支被取出的时刻,Squash-FP完成100%预测精确性。这些错误的保护分支经常预测为不执行,这技术通过类似于PEP的BTB使用分支保护预测相同的策略。然而,当分支被确认为伪造的,它利用储存在体系结构流水线的旁路信息终结。这个技术通过不再使用先前使用的错误路径分支预测器状态在分支预测表中有减少内容的益处。

Squash-FP方法在分支错误预测中利用可预测的定义信息完成规模缩减0.5%到4.3%。对于目前的分支预测结构,这方法是最简单及最快的预测更新修改法。Squash-FP技术和PEP,PGU以及选择预测器平均来说是最适度的,但是单个基准测试程序正经历重要的改进。

摘要:分支预测技术一直是提高处理器性能的重要方法,工业界和学术界对之进行了大量研究。分支预测的本质是克服指令控制相关,提高指令并行度。随着研究的不断深入,当前学术界认为分支预测是一个指令学习的过程,这就使得对分支预测的研究出现了新的趋势。该文对分支预测技术进行了归纳以及评估,以便从总体上了解分支预测技术的发展过程。

关键词:分支预测,判断信息,EPIC

参考文献

[1]李文龙,林隽民,汤志忠.IA-64中软件数据预取的优化[J].清华大学学报:自然科学版,2004,44[09]:1282-1285.

[2]Intel IA-64Architecture Software Developer's Manual,Volume3:Instruction Set Reference.January2000.

[3]August D I,Connors D A,Gyllenhaal J C,et al.Architectural support for compiler-synthesized dynamic branch prediction strategies:Rationale and initial results[C].In Proceedings of the Third International Symposium on High-Performance Computer Architecture,1997:84-93.

上一篇:美丽的力量下一篇:体育课堂教学新