异构计算简介
Avaota SBC 的部分平台内具有小核心 CPU,与大核心一起组成了异构计算的功能。
在异构多处理系统中,主核心和辅助核心的存在旨在共同协作,以实现更高效的任务处理。这种协作需要系统采取一系列策略来确保各个核心能够充分发挥其性能优势,并实现有效的通信和协同工作。这就形成了一种称为异构多处理系统(AMP系统)的架构。
在AMP系统中,通常采用主-从结构。主核心作为系统的控制中心,负责启动和管理辅助核心。一旦辅助核心启动完成,主核心和辅助核心之 间会建立通信通道,以便进行数据交换和协同计算。这种通信通常通过IPC(Inter Processor Communication,处理器间通信)方式进行,而RPMsg则是其中一种常用的通信协议之一。
一项关键的任务在于确保两个核心之间的数据共享和同步。为此,系统通常会采用共享内存的方式,使得两个核心能够访问相同的数据空间。此外,系统还需要设计合适的中断机制,以便在必要时触发核心间的通信和同步操作。
异构系统的通讯
异构系统通讯在硬件上使用的是 MSGBOX,在软件层面上使用的是 AMP 与 RPMsg 通讯协议。其中大核心上基于 Linux 标准的 RPMsg 驱动框架,小核心是基于 OpenAMP 的异构通信框架。
AMP 与 RPMsg
主核心与辅助核心是完全不同的两个核心,为了最大限度的发挥他们的性能,协同完成某一任务,所以在不同的核心上面运行的系统也各不相同。这些不同架构的核心以及他们上面所运行的软件组合在一起,就成了 AMP 系统 (Asymmetric Multiprocessing System, 异构多处理系统)。
由于两个核心存在的目的是协同的处理,因此在异构多处理系统中往往会形成 Master - Remote 结构。主核心启动后启动从核心。当两个核心上的系统都启动完成后,他们之间就通过 IPC(Inter Processor Communication)方式进行通信,而 RPMsg 就是 IPC 中的一种。
在AMP系统中,两个核 心通过共享内存的方式进行通信。两个核心通过 AMP 中断来传递讯息。内存的管理由主核负责。
异构多处理系统的设计需要充分考虑到主核心和辅助核心的异构性质,以及它们之间的通信和协作方式,从而实现任务的高效分配和处理。
AMP 系统在每个通信方向上都有两个缓冲区,分别是 USED
和 AVAIL
,这个缓冲区可以按照 RPMsg 中消息的格式分成一块一块链接形成一个环。
当主核需要和从核进行通信的时候可以分为四步:
(1)主核先从USED中取得一块内存(Allocate)
(2)将消息按照消息协议填充
(3)将该内存链接到 AVAIL 缓冲区中(Send)
(4)触发中断,通知辅助核有消息处理
反之,从核需要和主核通信的时候也类似:
(1)从核先从AVAIL中取得一块内存(Allocate)
(2)将消息按照消息协议填充
(3)将该内存链接到 USED 缓冲区中(Send)
(4)触发中断,通知主核有消息处理。