EEJournal

专题文章
现在就订阅

多核消息传递

Polycore实现MCAPI

几周前,我们研究了新的MCAPI标准,该标准为多核和紧密耦合的多处理器系统提供了低级的、低开销的消息传递功能。但是,当然,除非有人实现它们,否则标准是不好的,所以在这里我们来看看由Polycore构建的MCAPI标准的第一个商业实现。作为MCAPI委员会主席,Polycore的Sven Brehmer已经准备好并积极地将标准工作推向市场。

标准本身只是一个API,它没有指定任何实现细节。MCAPI服务将由实现API语义的库和运行时服务组成。这已经体现在Polycore的Poly Messenger产品的最新版本中。但是,由于作为应用程序程序员,您只接触API,并且根据设计,您因此与它如何工作的细节绝缘,坦率地说,除了关于MCAPI的讨论之外,没有太多可说的。

除了一个细节:消息传递的发生方式取决于系统的拓扑结构。实际上,有两种拓扑:一种是逻辑通信拓扑,另一种是物理拓扑。最终它们必须一起解决,但是这种区别允许您创建一个逻辑设计,它在某种程度上独立于底层物理实现,从而减少移植所需的工作。事实上,这允许在预期的多核平台可用性之前,在单核桌面开发机上实现完整的消息传递系统。

因此,让我们将其分为两个步骤:首先,逻辑拓扑的规范,然后在特定平台上实现该拓扑。第一步是通过称为Poly Generator的单独工具完成的。这个工具生成数据结构,常量,初始化例程,链接驱动程序等,Poly Messenger将需要在系统上实际执行API的命令。这些是通过自动生成的C头文件和代码文件(即.h和. C文件)提供的,然后可以将它们编译成整体代码。系统在编译时完全配置完毕。事实上,尽管MCAPI标准允许信道初始化时实时路由发现,但Polycore的实现假设静态拓扑,因此在编译时确定最佳路由,简化并加速Poly Messenger的运行时行为。

Poly Generator和Poly Messenger早于MCAPI,因此存在映射到MCAPI概念的遗留概念。在下面的描述中,我试图阐明这些关系。在某些情况下,由于之前的工具版本,确切的语义可能略有不同,但是当创建MCAPI实现以确保完全遵从时,任何此类差异都将得到解决,从而有利于MCAPI语义。

逻辑视图

在最高级别上,逻辑拓扑由一组相互连接的节点组成。Poly Generator中的节点对应于MCAPI中的节点,本质上是计算的轨迹。它们可以发送、接收或简单地传递消息。节点可以通过不同种类的链路连接起来。拓扑结构可以包括子网;如果消息需要在子网之间传输,Poly Generator将推断并创建一个“网关”节点。

这里需要明确的一个区别是,节点与核心不同。节点是逻辑拓扑的一部分;核心是物理拓扑的一部分。您可以将节点映射到核心,但实际上,节点可以是“虚拟的”,您可以将多个节点映射到单个核心。这个稍后再说。现在,您只需为系统创建关键节点,并让Poly Generator创建任何额外的网关节点。

还有另一个类似的概念,即“储存库”;这大致等同于端点的MCAPI概念。存储库是接收到消息时存储消息的地方。很容易将节点等同于存储库,但有些节点可能只传递消息,而不是真正的端点,因此没有存储库。每个存储库都被命名;然后在使用MCAPI api建立消息目的地时可以访问这个符号名称。

每个节点都有一组可以定义的属性。一个适用于所有节点的全局属性是用于存储消息的预分配缓冲区的大小。这并不意味着所有消息都必须是这个大小,但它确实建立了最大值。更大的缓冲区允许更大的有效负载,但也会浪费那些有效负载较小的消息的内存。决定有效载荷大小本身就需要权衡。当需要传输大量数据时,通常会将完整的数据块分解为多个消息。因为每条消息都有一个报头,这就是开销,所以可以分配给每条消息的数据越多,开销的百分比就越小。但是,可以对消息进行优先级排序。高优先级消息不会中断正在进行的低优先级消息传输,而是下一个访问接收节点的消息。因此,有效负载越大,优先级更高的消息等待通过的时间就越长。 Thus the largest payload that makes sense will vary by system and application and, once chosen, will set the buffer size.

在查看节点属性之前,看看使用Polycore设置发送和接收消息时发生了什么是很有帮助的。首先,应用程序将组装一些需要传输到另一个存储库的数据。应用程序负责编组数据,它将通过从堆中获取内存并构建消息来实现这一点。一旦完成,就可以发送消息(如果需要,可以分成多个消息),这是通过为有效负载分配固定数量的预分配缓冲区中的一个来完成的(在一般情况下);将消息有效负载复制到缓冲区中,然后将消息头和指向缓冲区的指针放在发送队列中。您可以指定多个发送队列,按优先级排列。

如果使用了阻塞发送调用,则应用程序将等待消息发送后再继续;如果使用了非阻塞调用,那么一旦消息排队,应用程序就会继续正常运行。

消息然后由Poly Messenger按优先级顺序发送-也就是说,高优先级队列首先被清空,尽管如前所述,高优先级消息不会打断已经在进行中的任何低优先级消息。在接收端,为传入消息的有效负载分配缓冲区,然后将报头和指向有效负载缓冲区的指针放置在传入队列上。

请注意,如果包含消息的内存在两个通信节点之间共享,那么复制消息是相当浪费的;如果您可以“通过引用”发送消息,这意味着只通信指向消息的指针,那么效率会更高。这也被称为“零复制”操作,虽然MCAPI标准还没有正式支持零复制通信,但您可以简单地通过将指针作为有效负载传递来实现这一点。“有效负载”仍然被复制,但因为它只是一个小指针,所以可以更快地复制它。由于没有API支持,因此必须确保应用程序本身处理一些后勤工作,比如确保发送方不会在接收方处理完消息之前丢弃消息。

考虑到这是如何工作的,这意味着您需要根据优先级为每个节点指定其发送队列的深度;接收队列的深度(接收到的消息按优先级隐式存储);有效载荷的数据缓冲区数量;和与存储库关联的名称。此外,每个节点都有一组其他节点,它们通过链路直接连接或通过子网连接。声明了这些链接中的每一个,以及链接的特征。

这似乎是物理和逻辑拓扑在某种程度上交叉的一个领域。如果链路所连接的节点在另一台计算机上,则可以将链路定义为具有IP地址的TCP/IP链路。或者,同一板上不同芯片上的两个核心可以通过串行RapidIO相互连接。或者同一芯片中的两个内核可以通过某种特定于芯片的机制连接起来。共享内存是连接的另一种方式。此链路类型被指定为逻辑拓扑的一部分,以确保提供正确的驱动程序,因此,如果链路类型发生更改,对物理拓扑的更改可能需要进行逻辑更改。

所有这些拓扑定义都是使用XML完成的。虽然复杂的设计可能需要大量XML,但大多数XML是相似的,因此剪切和粘贴是编辑工作的主要内容。此外,还有一些文件定义了分派器和链接驱动程序的详细信息。现有的驱动程序目前可用于TCP/IP、共享内存和Windows管道(后者通常用于演示)。对于其他驱动程序,你可以自定义的模板是在c中提供的。运行Poly Generator使用这些文件作为输入,为每个节点创建一对文件(一个.h文件和一个.c文件),以及必要的分派器和链接驱动程序代码。

分配到核心

现在到了节点可以分配到核心的时候了。在许多嵌入式应用程序常见的静态配置中,程序被编译到核心中并留在那里;没有应用程序的实时调度。一个大的应用程序可以被分成多个子程序,每个子程序都在一个核心上执行。一旦一个应用程序被划分为它的组成子程序,每个子程序都被编译并链接为它的核心。这个相同的过程用于将节点分配给核心:那些与特定核心的任何节点关联的文件都包含在该核心的构建中。这与Poly Messenger库一起,允许在应用程序中嵌入MCAPI调用的解析。

当然,如果您有一个异构系统,涉及多个机箱中的多个操作系统,那么这样的系统可能会比这个简单图所建议的要复杂得多。这将使其他实际考虑因素发挥作用,但从概念上讲,简单模型仍然适用。

生成通信拓扑有几个可能的用例。在一种特别的方法中,应用程序作者将为他或她的应用程序创建一个Poly Generator定义,并为该应用程序使用一次。或者,系统工程师可以创建消息传递配置,然后应用程序编写人员可以广泛使用该配置,只需将其编译到应用程序中即可。

有了MCAPI API的实现,现在就到了最困难的部分——观察采用情况。向多核的转变是缓慢的,因为有许多障碍,真实的和感知的。然而,这种转变正在加速,低开销消息传递系统的可用性消除了采用的又一个障碍。

留下回复

有特色的博客
2023年2月15日
了解人工智能驱动的芯片设计仿真如何在不升级硬件的情况下解决RTL芯片设计传统功能验证工具的挑战。文章《人工智能驱动的优化如何产生更高的模拟性能》首次出现在《从硅到软件》....
2023年2月15日
加入我们下周四的现场网络研讨会,了解更多关于自推进CFD模拟:海上运输是国际贸易和全球经济的支柱。根据2022年联合国贸易和发展会议(UNCTAD)的数据,超过80%的交易量……
2023年1月19日
你是否在调整表带或更换手表电池时遇到了问题?如果是这样,我是好消息的携带者....

特色粉笔谈话亚博里的电子竞技

dsPIC33CH DSCs:单芯片上的两个dspic33c

逮老鼠的电子产品而且微芯片

在本集Chalk Talk中,Micr亚博里的电子竞技ochip公司的Vijay Bapu和Amelia Dalton探讨了双核数字信号控制器的好处。他们讨论了涉及单核和双核dsc时应牢记的关键规范,以及如何缩短开发时间,节省电路板空间和成本,并保持Microchip dsPIC33CH dsc所需的性能和隔离。

点击这里了解更多关于Microchip Technology dsPIC33CH双核数字信号控制器的信息

Baidu