在多核异构SoC平台上进行软件开发

多核异构SoC软件开发

1 概要

针对有多个不同架构的处理核心的SoC(System on Chip,片上系统),记录一些基本范畴和开发调试的心得。

2 背景介绍

一般说来,讨论一些非常规的东西,都是要交代一下背景的。一方面是方便读文章的人快速地和写东西的人合上拍子,避免鸡同鸭讲、跨服交流的尴尬局面;另一方面则是为写东西的人梳理写作内容框架预留一些缓冲区域,让写作过程更加流畅,文章的逻辑性更强。


在多核异构SoC平台上进行软件开发
这片SoC的特性如下:

同一个片上系统(SoC)内同时存在不同架构的处理器,包含ARM、MIPS、C-Sky、RSIC-V和Xtensa等多个架构,软件任务分配时可以针对单个架构处理器的特性扬长避短、在各不同处理器之间取长补短,使得计算任务的完成效率大大提高。

各处理器有不同用途,图中左侧三类架构的处理器处理器用作CPU,执行控制和逻辑运算相关的任务,右侧两种架构的处理器用作DSP,执行数值运算相关的任务。在软件设计的过程中,可以把计算量较大的任务单独拿出来,放到DSP类处理器中,用CPU类处理器做任务调度,使任务有条不紊地进行。

各处理器内部有多个核心,如ARM处理器中有四个核心,可以并行执行四个不同的任务,在软件开发过程中对应四个独立的程序(或者说,四个不同的入口函数/main函数)。

2、开发所需要的条件

  • 了解不同指令集特性

包括但不限于架构基本特点和汇编指令,这对应指令集架构(Instruction Set Architecture,ISA)的特性。我们通常把计算机架构中与编程序开发有关的部分泛称为指令集。
这部分信息可以在芯片所使用的架构的指令集参考手册(Isa reference manual)中获取,手册中一般包含了基本数据类型、汇编指令、寄存器、寻址模式 、存储体系 、中断、异常处理以及外部 I/O等内容 。


在多核异构SoC平台上进行软件开发

除此之外,还需要了解各个处理核心的地址映射情况,即每个核心的地址访问边界。以esp32-s3为例,单片SoC由两哈佛??结构的Xtensa LX7 CPU构成,两个CPU能访问的地址空间范围完全一致。

如果不一致的话,在为不同处理器分配处理任务时应当考虑到访问能力的限制。包括但不限于考虑CPU能否通过数据总线直接访问内部存储器、能否通过cache直接访问映射到地址空间的外部存储器、能否通过数据总线直接访问模块/外设、能否通过多个地址访问同一目标。下面是这几类访问方式的示意图。


在多核异构SoC平台上进行软件开发
前面提到,启动程序负责把外部存储器中的程序搬移到RAM上的指令空间中,而没有RAM的处理就需要把程序核数据搬移到规定的存储空间上。

这就涉及到指令空间的读写权限问题。假如启动时是把程序搬移到处理器自己的RAM上,那么其他处理核没有读写读写这部分空间的权限,自然不需要考虑某个处理核的指令空间被其他处理核写入覆盖的问题。而如果是第二种情况,就需要注意规避对指令空间的写入行为。

一般有两种方式,一种是通过MPU设置处理核对各存储空间各部分的访问权限,另一种则是在软件开发之前就定好各区域的读写许可级别,在编写代码时规避对禁止访问的区域的操作。

下图是读写许可级别的划分样例。

在多核异构SoC平台上进行软件开发
  • 访问顺序控制

共享内存既是核间通信的实现途径,也是多核协同易错点。以某一地址(单字节或几个字节)内容为协同标志,一般不会有访问顺序问题。而多核共享/同时读写某块内存时则需要控制访问权限(可以借助锁避免多核之间的读写冲突,也可以严格划分读写边界避免同时读写)。

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113568 人正在系统学习中

来源:断水客

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月28日
下一篇 2022年6月28日

相关推荐