DSP

利用工具和技巧应对多核设计领域的挑战

2019-07-13 21:04发布

多处理器电脑已存在一段时间了,但工程师们只是在最近几年才有机会买到具有多个处理器或“核心”的芯片现货。这些器件分为两类:对称型和非对称型。第一类器件提供同一CPU内核的多个“克隆”,因此称作对称型。第二类是将不同类型的CPUDSP、加速器都放在一个单片系统中。本文将专门介绍第一类多核技术。    Extreme Engineering Solutions公司首席执行官Rob Scidmore表示,单核处理器与多核处理器使用的硬件仅存在很少几项区别。“挑战会出现在,当你必须把软件从单核迁移到双核时。当两个处理器内核必须通信时,性能可能会降低很多。系统的等待时间变得更长,但吞吐率依然很高。当工程师们为每个内核把应用代码分解成片段时,就必须应对上述局面。他们必须平衡等待时间和吞吐率。”    但是,工程师们经常会把代码分解成片段。Scidmore解释说:“他们也许通过以太网端口接收图像,用算法处理图像,然后显示它们。你可以在一个处理器上运行TCP/IP堆栈,在第二个处理器上运行算法,并把第三个处理器专门用于显示。但是如果你有数千个汇编语言文件,那么你别无选择,只能回到框图并从头开始,并花时间把某个应用划分成几个线程。”    一些为对称多处理(SMP)提供支持的操作系统(OS)可以提供某种方式来集成旧代码和新代码。例如,QNX公司的Neutrino OS提供混合多处理(bound multiprocessing),它使开发人员能使多个进程始终位于某个核心,或称“锁定”。QNX公司产品经理Kerry Johnson说:“假设你有一些旧软件,它们在多核芯片或多处理环境中也许不能恰当运行。代码可能会假定它拥有对I/O设备等的独占控制权,这可能会在多核系统中造成一些问题。这种情况下,你可以把软件‘锁’在某个内核里,不必修改代码。然后你可以添加新应用软件,它将利用剩余内核。旧软件和新软件并存于某个多核芯片上的相同OS中。”    Johnson说:“要让开发人员理解多核芯片不需要每一个内核都拥有自己的OS,这是一个挑战。具备SMP能力的单一OS可立即监督多个内核的运行情况。随着更多OS厂商开始支持SMP,开发人员将会更好地理解,他们可以使用一种编程风格,并让他们的代码工作在单核、双核、四核处理器。一套软件工具可工作在所有这些环境中。”    当然,这些工具必须包含源代码级调试器。 Johnson解释说:“设计人员需要一个调试器处理所有这些内核,希望在一个窗口里看到一切,而不是每个内核都有一个调试窗口。在特定时间,无论哪个处理器运行代码,调试器都必须在断点停止,追踪程序执行情况,并在所有内核收集数据,就像它对单核芯片做的那样。”    作为 Neutrino操作系统的一部分,QNX公司在其中提供了一个带有调试工具的内核,它使开发人员能用日志记录低级的状态变化、中断等事件。因此人们能看到所有内核的互动。Johnson说:“当内核共享存储器和I/O设备时,你可能会遇到必须详细检查的问题。这个配备了仪器的内核把数据记录在日志里,并且Momentics系统剖析器可以让你分析日志记录的信息。”QNX公司提供带有调试工具的内核以及未配备调试工具的内核。前者提供一种方法来检查和测试现场的操作,而后者则略微减少了内核开发成本,并略微增加了内核的代码空间。    在把应用软件放到多核系统中以前,需要多次测试这些软件。但是,如果原型硬件在代码准备就绪时就已存在的话,则测试会占用这些昂贵并且难以部署的原型硬件。并且如果把代码锁定到多核硬件,就会很快减少在硬件和软件之间折衷的机会。作为替代办法,可以考虑在虚拟系统上运行软件,该系统模仿处理器核心和其它硬件设备。Virtutech公司营销副总裁 Michel Genard说:“硬件虚拟化使你能做许多探索。你可以看到应用代码在一个或几个核心内如何工作。并且你可以观察为每个内核改变时钟频率后造成的影响,但不必改变硬件。无需占用硬件,可以运行自己的应用代码。”    由于虚拟系统控制了时间,因此可以停止所有内核和设备,并且可以向后或向前运行代码。还可以用检查点在特定时间访问来自“内部”核心和所有其它设备的信息。Genard指出:“开发人员告诉我们一些噩梦,比如多核系统中的 SMP竞态条件。他们发现几乎无法在硬件上调试多核应用代码。另一方面,虚拟环境使他们能再现系统行为。他们可以根据需要‘备份’、检验、改变数据,或观察和改变行为。”    虚拟化还有一个好处:开发人员可以确定自己的软件将如何利用多个内核以及系统的其它硬件,因此他们可以做出设计决定。他们也许会发现,两个内核将提供与四个内核相同的性能。   工程师们经常把飞思卡尔、英特尔、博通等公司看作多核芯片厂商,而XMOS SemiconductorParallax 等其它公司也提供多核器件,但面向不同市场。    XMOS公司首席技术官及创始人之一David May表示,该公司把它的XS1-G多核IC家族定位为“软件定义芯片”。他说:“XCores也许有些不同寻常,这是因为它们看起来像通用处理器以及与 I/O接口紧密集成的可编程状态机。它们能做许多你分配给专用硬件做的事情。”每个XCore均位于一个XCore Tile中,后者有自己的寄存器、存储器、I/O端口以及XLinkXLink与相同或不同IC上的其它Xcore通信。一个XCore能同时执行8个线程。    开发人员使用XC语言,它是C语言的衍生品,包括输入与输出命令以及多种功能,用于将在不同核心上运行的软件组件。 David May表示,“在尽可能的情况下,程序员拥有与ANSI C相同的操作符和数据类型。软件开发人员熟悉顺序型C程序,他们很快就可领会新的I/O操作。”    XC语言的I/O命令控制着I /O端口,并经由XLink通道在XCore之间发送消息。据David May介绍,“XLink连接相同芯片上的各个内核,并且我们可以提供外部链路,因此可将两块XMOS芯片连接。产品应用多半将使用我们的多个IC。这种情况下,你可简单地创建IC之间的信号连接。PCB上无需复杂的高速总线或接口。你不必担心同步操作和操作系统。我们的OS在硬件里面。在我们的处理器上,对多数系统的OS调用就是一两条指令。”    虽然多核应用乍一看也许很复杂,但有许多工具可以帮助开发人员对可用内核加以利用。本文提及的公司提供了一种具有代表性的方式,来帮助人们在产品中轻松使用多核芯片。 如图   1. Extreme Engineering Solutions公司的XPedite7040高级夹层卡(AMC)为用户提供了Intel Core DuoCore2 Duo处理器。AMC上的电脑可应用于许多高端电脑系统和军用设备中。 如图 2. 通过模拟硬件设计,多核处理器的虚拟化使开发人员无须为实施细节操心。他们可以向后或向前运行代码,以便在读设备上部署代码之前,对行为做详细检查。 如图   3. XMOS公司的多核XS1-G4 IC提供四个XCore Tile,每个均能运行八个线程。内部XLink开关提供片上XCore Tile和外部XCore Tile之间的通信路径。