调节多核处理器硬件适应软件设计方法

技术分类: 嵌入式系统  | 2008-02-14
来源:嵌入式在线 | 作者:Tejia Technologies公司产品营销副总裁 Bryon Moyer

  下一个问题是如何安排这些处理器。处理这一问题最简单的办法就是确定你是否需要划分代码,来创建一个流水线。流水线使用较少的硬件资源,但会增加等待时间。如果你需要对代码进行划分,最好选择在一个明显的位置(自然和直观的位置)进行。而没有必要计算出周期中点精确的位置。

并行的流水线

图1 - 并行的流水线,每个引擎由一个MicroBlaze处理器、专用存储器和可选的减负器构成。

  假设你要用6个处理器构成一个两级流水线。那么你现在就需要计算出每一级所需的处理器的数量;先通过分析来确定每个划分的周期数,如后再用它去除以周期预算,就可以得到每一级所需的处理器的数量。。因此,如果第一个划分需要380个周期,则它需要4个处理器;这样第二级就需要140个周期,从而需要两个处理器。(两个划分所需的周期数之和实际上不一定正好等于未划分的程序所需的周期数,但会非常接近,因此在这里可以近似看作相等。)因此,这个两级的流水线的第一级需要4个处理器,第二级需要2个处理器。如果有足够的逻辑资源,使用Xilinx MicroBlazeTM软核,就能够实体化任何这样的流水线。

  相比较而言,在一个固定的流水线结构中,每一级的处理器数量都已经预先确定。

因此就只能强制使用一种专门的划分方法,实现这一划分就会需要相当长的时间。相反地,如果每一级使用的处理器数量不同,流水线就可以定制,并且可以是不规则的。因此能够从任何位置进行划分。这样,就能够围绕划分的情况来进行硬件设计,而不用根据硬件来进行划分。

  软件工程师如何进行设计是一个关键问题。Teja中集成了一组API和一个处理工具,可以用ANSI C来定义硬件平台。此工具可执行程序,创建处理平台的定义,这些定义能够被Xilinx嵌入式工具进行处理。API组的内容十分丰富,并且能够在很靠底的硬件层次上进行控制,但大多数软件工程师不希望使用它们。因此,Teja中还使用参数化的方式加入了一个“典型的”流水线定义的方法。要实现上述示例中的流水线,只需要在配置头文件中修改两个简单的#define陈述式。

  下面的陈述式定义了一个两级的流水线,在第一级使用了4个引擎,在第二级使用了2个引擎:

  #define PIPELINE_LENGTH 2

  #define PIPELINE_CONFIG {4,2};

  由上述陈述式和预设的配置程序,TejaCC程序就能构建出流水线。当然,无论由于什么原因使得流水线的配置需要发生改变时,只要使用与上面相似的方法进行编辑即可。

  存储器

  第三个问题跟所需的存储器数量有关。在一个典型的系统中,所能存储的代码和数据的数量是固定的。如果你的设计没有满足这一要求,就需要做大量的工作来将多出的内容压缩到存储空间中。但是在使用FPGA时,只要所需存储器的数量在芯片所能提供的范围之内,就能够按照实际需要为每个处理器分配存储空间。在更典型的情况下,所有的存储空间的大小都相同(由于每个块的最小容量为2k,这就限制了进行微调的程度)。

 配置并行流水线的流程

图2 - 配置并行流水线的流程

  代码编译时提供所需存储器的大小,并且可以使用下面的陈述式来编辑配置头文件,在这个示例中为代码和数据存储分配的存储空间均为8KB:

  #define CPE_CODE_MEM_SIZE_KB 8

  #define CPE_DATA_MEM_SIZE_KB 8

  使用减负器来加快处理速度

  第四个问题和创建硬件加速器有关。可能有一部分程序会占用太多的周期。要减少周期就需要更多的处理器,而使用硬件加速器就能减少处理器的数量。只要硬件加速器比其所替代的处理器占用更少的门,就能够减少整个硬件实现的面积。

  Teja有一项功能就是用来从代码中直接创建这样的加速器或减负器。通过对程序进行注释,此功能就可创建:

  • 实现代码的硬件逻辑
  • 通过系统接口在处理器基础设施中添加加速器
  • 调用原型替换程序中最初的代码
  • 在将减负器集成于系统之前,先使用测试台对其进行验证。

  一旦创建了减负器,周期数就会减少,因此你需要重新安排处理器。但由于重新定义流水线结构的操作十分方便,因此这是一项很简单的任务。

1】【2】【3
加载中

对文章的评论

剩余字数:  

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组

设计资源与分销