• 工作总结
  • 工作计划
  • 心得体会
  • 述职报告
  • 事迹材料
  • 申请书
  • 作文大全
  • 读后感
  • 调查报告
  • 励志歌曲
  • 请假条
  • 创先争优
  • 毕业实习
  • 财神节
  • 高中主题
  • 小学一年
  • 名人名言
  • 财务工作
  • 小说/有
  • 承揽合同
  • 寒假计划
  • 外贸信函
  • 励志电影
  • 个人写作
  • 其它相关
  • 生活常识
  • 安全稳定
  • 心情短语
  • 爱情短信
  • 工会工作
  • 小学五年
  • 金融类工
  • 搞笑短信
  • 医务工作
  • 党团工作
  • 党校学习
  • 学习体会
  • 下半年工
  • 买卖合同
  • qq空间
  • 食品广告
  • 办公室工
  • 保险合同
  • 儿童英语
  • 软件下载
  • 广告合同
  • 服装广告
  • 学生会工
  • 文明礼仪
  • 农村工作
  • 人大政协
  • 创意广告
  • 您现在的位置:六七范文网 > 其它相关 > 正文

    计算机系统结构课程教法研究

    来源:六七范文网 时间:2023-05-20 15:10:12 点击:

    摘要:针对计算机专业学生对程序设计感兴趣的特点,从程序设计与问题求解课程中的某些知识点入手,阐述在计算机系统结构课程教学过程中采用的基于程序设计的启发式教学方法。

    关键词:计算机系统结构;教学方法;程序设计

    0、引言

    计算机系统结构课程是计算机科学与技术专业本科生的一门专业基础必修课,它主要围绕计算机系统的软硬件功能分配及各功能部件的优化技术和量化分析方法,将计算机组成原理、操作系统、编译原理、程序设计与问题求解等课程所学的软硬件知识有机地结合起来,从而建立计算机系统的完整概念。学习本课程旨在使学生从总体结构、系统分析的角度来理解和研究计算机系统,学习如何根据各种实际应用的需要,综合考虑软硬件功能分配,设计和构建合理的计算机系统,以及在一个已知的计算机系统上开发出高效的应用程序、编译器或操作系统,对于培养学生系统分析和解决问题的能力、抽象思维能力都有非常重要的作用。

    1、启发式教学方法

    启发式教学是指教师在教学过程中,根据教学任务和学习的客观规律,从学生的实际出发,采用多种方式,以启发学生的思维为核心,调动其学习主动性和积极性的一种教学方式。

    在计算机系统结构课程的教学过程中,教师先给学生设置悬念,比如针对某一计算机技术的理论分析和量化研究,得出的结论与现代计算机采用的先进技术不一致,然后再讨论需要讲解的内容,从而提高学生的学习兴趣。

    比如,计算机系统结构课程中,教师在讲授超标量超流水线时,若假设基准流水线的级数为k,超标量发射度为m,超流水处理器为n倍频,在不发生任何数据相关、控制相关和资源相关的前提下,共解释N条指令,当N趋于无穷大时,超标量超流水线相对于基准流水线的加速比为Sn=m.n。即微处理器的超标量发射度m越大,则加速比越大,流水线的级数越多,则加速比越大。我们的提问是:①以前从Pentium Pro到P4微处理器的超标量发射度一直为3,个人计算机使用的Core微处理器的超标量发射度也只为4,为什么个人计算机的超标量发射度没有设计为8或16呢?②以前Pentium微处理器的指令流水线为5级,到P4时达到20级(实际可能会大于20级),而个人计算机使用的Core微处理器的有效流水线级数为什么却只有14级呢?学生通过查阅参考书和网上资料,从硬件的复杂性、利用率、时钟技术、功耗和实现成本,应用程序的指令级并行性和编译技术的实现难度等多个方面,对理沦分析的结果与现代微处理器设计采用技术的不一致性进行解释。

    2、基于程序设计的启发式教学方法

    基于程序设计的启发式教学方法是以学生熟悉的程序设计算法为例,先从计算机系统结构的角度指出“本科低年级程序设计算法中存在的不足,然后再讨论面向不同的计算机系统如何去解决问题;在解决问题的过程中,将涉及的知识逐步展开,讨论与计算机系统结构相关的理论知识。

    2.1累加求和算法

    在学习程序设计与问题求解课程时,若计算 s=∑A[i],其c语言描述的核心代码如程序1所示。

    【程序1】s=0;

    for(i=l;i=256;i++)

    s=s十A[i];

    学过计算机系统结构课程后,我们会知道程序1的循环体内存在关于变量s的先写后读数据相关。由于现代微处理器设计采用了超流水线技术,程序l的编程方法会大大降低流水线解释的效率。要改进程序l,必须学习计算机系统结构课程的以下知识:什么叫数据相关,什么叫超流水线,为什么先写后读数据相关会影响流水解释的速度,在计算机系统硬件设计和软件设计过程中如何消除数据相关?在提出问题后,教师逐一讲解相应的理论知识,然后从学生感兴趣的程序设计的角度介绍程序1的改进方法,这里采用了递归折叠技术,如程序2所示。

    【程序2】len=128;

    for(i=1;i<=8;i++)

    {

    for(j=l;j<=len:j++)

    A[j]=A[j]+A[j+len];

    len=len/2;

    }

    s=A[1];

    有同学说程序1的时间复杂度为O(n),程序2的时间复杂度为O(n2),那是针对传统冯.诺依曼计算机而言的,我们学习计算机系统结构课程的目的就是让学生逐步转变观念,学会面向计算机体系结构的编程方法j在程序l中,循环体串行执行了256次,由于现代微处理器采用了超流水线技术,且运算器设计采用了相关专用通路,流水解释指令时在时间上各指令之间尽管有部分重叠,即并非绝对地串行,但由于连续两次迭代间存在关于s的先写后读数据相关,会造成流水线性能的下降。在程序2中的内循环中,由于连续两次迭代间不存在关于A[i]的先写后读数据相关,故可连续地流水解释指令,只有外循环对应的循环体串行执行了8次(在流水解释指令时也并非绝对地串行)。数组分量的个数越多,程序2执行的时间就越短。

    2.2计算点积算法

    在学习程序设计与问题求解课程时,若计算s=∑A[i]*B[i],其c语言描述的核心代码如程序3所示。

    【程序3】s=0;

    for(i=l;i=256;i++)

    s=s+A[i]*B[i];

    由程序1和程序2可知,程序3的连续两次迭代间存在关于s的先写后读数据相关,同时在计算s=s+A[i]*B[i]时,若A[i]*B[i]的结果不生成,则无法进行加法运算。因为现代微处理器采用超流水线技术,乘法指令的执行需要多个时钟周期,在执行循环体时,会频繁地进行乘法和加法的功能切换,按程序3编程,会大大降低指令流水解释的速度。要改进程序3,必须学习计算机系统结构课程的以下知识:什么叫多功能流水线,什么叫先写后读数据相关,为什么频繁的功能切换会影响流水解释的速度,在计算机系统硬件设计和软件设计过程中如何消除数据相关,用户编程时如何考虑应用程序的并行性?在提出问题后,逐一讲解相应的理论知识,然后从学生感兴趣的程序设计的角度介绍程序3的改进方法。解决方法是先将程序变为可向量化部分和归约求和部分,再将归约求和部分采用程序2所示的递归折叠技术,来加速求和操作,如程序4所示。

    【程序4】for(i=l;i=256;j++)/可向量化部分/

    C[i]=A[i]*B[i];

    len=128;/归约求和部分/

    for(i=l;i<=8;i++)

    {

    for(j=l;j<=len:j++)

    C[j]=C[j]+C[j+len];

    len=len/2;

    }

    s=C[1];

    若微处理器为单核单发射超流水微处理器,由于可向量化部分的每条乘法指令之间不存在数据相关,尽管处理器在每个时钟周期只发射一条乘法指令,但在一个指令周期内可并发解释多条指令;若微处理器为单核多发射超标量超流水处理器,则按程序4的编程方法,处理器可在每个时钟周期同时发射多条指令,即在一个指令周期内并发解释的指令数可成倍增加。对于现代微处理器,均采用了超标量超流水技术,程序4的编程方法将大大提高程序的执行速度。

    若微处理器为共享L3 Cache的同构多核处理器,如Core i7,同时采用多个计算引擎进行并行处理,用户在编程时需根据计算机的系统结构,考虑如何用显式的语句说明程序的并行性特征,以便编译器对应用程序编译后,能生成在特定计算机系统结构中运行的高效的目标代码;若用户用顺序的程序设计语言编程,作为编译器设计者还需考虑如何将顺序代码转换成面向计算机系统结构的并行代码;为提高程序的执行速度,操作系统还需进一步考虑如何进行任务调度和负载平衡等。若一个大型任务在分布式共享主存的多机系统中运行,任务调度和负载平衡需综合考虑计算时间、并行性开销、交互开销,以及多机系统采用的互联网络、时延容忍技术等多个方面,情况会更加复杂。

    从这个例子可以看出,作为计算机专业的学生,不仅要学会编写应用程序,而且还需要了解计算机系统结构,使编写出来的应用程序能在特定的计算机系统上高效运行,同时还需掌握并行编程、并行算法、编译技术、操作系统、计算机网络等多方面的知识。

    2.3矩阵乘算法

    在学习程序设计与问题求解课程时,若计算两个n×n的矩阵相乘,即C=AxB,其C语言描述的核心代码如程序5所示。

    【程序5】for(i_l;i<=n;i++)

    fr(j=l;j<=n;j++)

    for(k=l;k<=n;k++)

    C[iJ]=C[ij]+A[i,k]*B[kj];

    因为矩阵元素在存储空间的存放顺序是按行主顺序排列,按照程序5所示的矩阵乘算法,内循环中的A[i,k]具有空间局部性,而B[k,j]不具有空间局部性。也就是说,当n的值较大时,对B[k,j]的访问每次都会出现Cache不命中,从而降低程序的执行速度,因此我们在编写矩阵乘算法时,要考虑的第一个问题是:如何修改程序,才能提高程序执行过程中CPU访问Cache的命中率?要解决这个问题必须学习计算机系统结构课程的以下知识:什么叫程序的局部性、什么叫Cache的命中率、存储体系的结构,增强程序的局部性为什么可以提高Cache的命中率,用户编程时和操作系统调度时如何考虑程序的局部性等。

    在程序5中,由于语句“C[i,j]=C[i,j]]+A[i,k]*B[k,j];"编译后会生成两条目标代码,相当于“x-A[i,k]*B[k,j];”和“C[i,j]=C[i,j]+x;”,这两条语句之间存在关于x的先写后读数据相关。在第三层循环迭代中还会频繁出现关于C[i,j]的先写后读数据相关,由于现代微处理器设计时均采用了超流水线技术,存在的数据相关会大大降低流水线的效率,因此要考虑的第二个问题是:如何修改程序,才能消除程序中的数据相关?

    如果用户编程时采用熟悉的通用算法进行矩阵乘的应用程序设计,如程序5,那么对于编译器而言,如何解决上述两个问题?

    复习C语言程序设计课程中二维数组的定义、计算机组成原理和汇编语言程序设计课程中数组在Cache和主存空间的存放位置,在展开介绍了计算机系统结构课程中有关Cache地址和主存地址格式设计、Cache的地址映像与变换、替换算法、调度算法等知识后,那么如何从程序设计者的角度解决第一个问题?具体方法是将程序5中的语句“fOr(j=1;j<=n;j++)”与“for(k=1;k<=n;k++)”位置对调,对调后程序执行过程中的数据访问和Cache命中率的提高留给学生自己分析;解决第二个问题的方法可参考程序4进行编程。

    从这个例子可以看出,作为一个计算机专业的学生,进行一个简单的程序设计,不仅要懂得程序设计的知识,还要掌握汇编语言程序设计、计算机组成原理、计算机系统结构、编译原理等课程的相关知识,才能真正设计或编译出一个面向计算机系统结构的能高效执行的高级语言源程序或目标程序。

    3、结语

    计算机系统结构课程涉及的专业知识面广、内容抽象,但我们通过采用启发式教学方法,特别是采用基于程序设计的启发式教学方法,从学生感兴趣的程序设计与问题求解入手,以举例的方式,引导学生从面向传统冯·诺依曼体系结构计算机的编程思想,逐步过渡到面向现代计算机体系结构的编程思想。在解决问题的过程中,教师将涉及的知识逐步展开,讨论与计算机系统结构课程相关的理论知识,以及该课程与计算机专业其他专业基础课程之间的关系;让学生知道只有学好计算机系统结构这门课程,才能编写出更加高效的应用程序和系统软件实践证明,该教学方法的应用,不仅激发了学生的学习兴趣,也让学生认识到了学习专业基础课程的重要性。

    推荐访问:教法 计算机系统 结构 课程 研究