上图的基础将会是一个OS操作系统,可以是任何具有基本资源管理的系统,大到Linux,中间plan9和鸿蒙OS,小到ucOS、RT-thread等。考虑到扩展性以及可移植性开发语言全部使用C语言,与系统OS开发,与驱动开发,与插件开发都要考虑随时随地的可移植性。
1 device
器件中包含标量(Scalar)、矢量(Vector)、矩阵(Matrix)和空间(Spatial)等不同计算架构,大致可理解为CPU、GPU、专用AI芯片和FPGA等结构的芯片,所有这些所谓的XPU,不管是指令驱动、数据驱动或者所谓的事件驱动都是可以通过编程驱动的,纵然是有指令集的情况下,也不一定非得开发编译器等复杂的工具集合,专用的器件开发专用的驱动即可,这对于初创的芯片设计来说是很大可利用的特点,这是自己的理解。
因为OS系统带来的开发便捷性,系统中是必不可少CPU器件的,一般来说大的社区这个也不必担心,譬如RISC-V社区或是ARM的生态。其它的器件,已经商业化的亦或是开源的芯片产品,集成进来软硬件都是可行的。
2 driver
除了CPU这类特殊器件必须有完备的生态外(这样可以减少大量软硬件适配的工作),其它所有XPU针对相应的硬件规格需要对应的底层驱动开发,这部分工作可有硬件开发团队给予大部分支持,结合嵌入式硬件开发者完善,需要提供硬件基本的信息,比如计算性能(某些特殊算法的)、可用存储、总线吞吐等。
3 runtime interface
运行时接口在驱动层的基础上进一步的抽象,以功能操作的集合为主,为统一的API提供一致性的访问接口,大部分可以使用系统中专用器件驱动带有的运行库为主,这里主要起到隔离具体器件详细参数的配置等,但与器件绑定还是比较紧密的一组接口。
4 PI plugin
运行时插件接口与器件硬件无关的部分和控制器件执行特定的运行时接口层之间的接口。这些接口更多的是提供给算法开发者使用的,完全隔绝硬件层面的细节,但会开放硬件指向性的语句,以及各自硬件参数的获取、设定以及各项的控制,在这一层将体现不同的计算给最合适的计算结构,在这一层之上的算法开发者可以制定和指定算法的具体实现攻略,本层负责将相应的计算映射至合适的计算结构,当然也可以在这一层实现自主的资源管理和分配,结合嵌入式软件开发者完善。同时这一层的实现中还要担任不同器件的计算加载和链接关系。
5 runtime library
运行时库以算法开发者提供的最优算法执行攻略为主,当然也会有不同器件版本的算法最优实现,比如GPU可实现ANN和HPC等,DSP器件也是可以实现数字信号处理和部分的BLAS库,这一层不光体现最优算法执行攻略,也会体现不同器件下实现相同算法的性能、能耗等参数。
6 developer interface
结合算法开发者提供的各项功能和参数,应用或者框架的开发者根据各自领域完善科学计算、神经网络、加解密等软件开发套件SDK。同时这一层有MPI的开发库,这里尚未进行互联总线等描述,不过软件层面大致有RDMA网络抽象层和通道抽象层。
7 optimized application
各个领域专家依据各自领域的SDK实现各自问题的最优方案,这里包括单计算节点和专用超级计算集群的方案。
8 阶段开发的技术思路
方案进阶中,欢迎大佬讨论。