XPU|听说过CPU、GPU 琳琅满目的XPU到底是什么?( 二 )


那有什么架构规则可以用来解释所有的新架构吗?有的 , 或许片上网络 (NoC)是个合适的定义。过去 , 处理器阵列通常用内存或固定网络拓扑连接(网状或环形) , 而 NoC 让分布式异构处理器能以更灵活的方式进行通信 。而将来 , 它们还可以在不使用内存的情况下进行通信 。
现在的 NoC 是针对数据的 , 而未来的 NoC 也能发命令和通知等数据 , 可以扩展到那些加速器间不只是交互数据的领域 。加速器阵列或集群的通信需求可能与 CPU 或标准 SoC 的通信需求不同 , 但 NoC 并不会将设计者限制在一个子集里 , 他们能通过满足不同加速器的特殊通信需求来优化和提高性能 。
XPU|听说过CPU、GPU 琳琅满目的XPU到底是什么?
文章图片
执行架构
另一种区分处理器的方式 , 是看它们对特定运行环境进行的优化 。例如 , 云端和微型物联网设备上可能可以跑相同的软件 , 但在不同环境中使用的架构是完全不同的 , 它们对性能、功耗、成本、极端条件下的运行能力等要求都是不同的 。
这可能是因为对低延迟的需求 , 或者是因为功耗的原因 , 一些原来针对云计算的软件 , 现在被逐渐放到设备端侧运行 。虽然是不同的硬件架构 , 但大家自然希望拥有完全相同的软件栈 , 以便软件能够在两种场合跑起来 。云端需要提供灵活性 , 因为它会跑不同类型的应用程序 , 而且用户众多 。这要求服务器硬件又要有针对应用的优化 , 又要能提供不同的规模 。
而机器学习任务也有自己的要求 , 在使用神经网络和机器学习构建系统时 , 你需要使用软件框架和通用软件栈 , 让网络编程并映射到硬件 , 然后你可以从 PPA 的角度让软件适配不同的硬件 。这推动了“让不同类型的处理和处理器适应各种硬件”的需求 。
这些需求是由应用定义的 。举个例子 , 就像一家公司设计了一个用于图形操作的处理器 , 他们优化和加速图形跟踪 , 并执行诸如图形重新排之类的操作 , 还有其他像矩阵乘法之类的加速机器学习的蛮力部分 。
而内存访问对于每个架构来说都是一个特殊的问题 , 因为当你构建加速器时 , 最重要的目标是让它尽量长时间保持满载 , 你必须将尽可能多的数据传送到 ALU , 让它尽可能多地吞吐数据 。
它们有许多共同之处 , 它们都有本地内存 , 有片上网络来进行通信 , 每个执行算法的处理器都在处理一小块数据 , 这些操作都由运行在 CPU 上的操作系统调度 。
对于硬件设计人员 , 棘手之处在于任务预测 。尽管在某些层面上会有类似的操作类型 , 但人们正在研究不同层面上差异 。为了处理神经网络 , 需要几种类型的处理能力 。这意味着你需要对神经网络的一部分进行某种方式的处理 , 然后在另一层又可能需要另一种处理操作 , 而且数据移动和数据量也是逐层变化的 。
你需要为处理管线构建一整套不同的加速器 , 而理解和分析算法并定义优化过程 , 是涉及到完整体系结构的任务 。就像对于基因组测序 , 你可能需要进行某些处理 , 但你不能用单一类型的加速器来加速所有东西 。CPU负责管理执行流水线 , 对其进行设置、执行 DMA、进行决策 。
当中可能涉及到分区执行的问题 。没有任何一种处理器可以针对每种任务进行优化——FPGA、CPU、GPU、DSP都做不到 。芯片设计商可以创建一系列包含所有这些处理器的芯片 , 但客户应用端的难点在于 , 他们要自己确定系统的各个部分要在哪些处理器上运行 , 是在 CPU 上?在 FPGA 上?还是在 GPU 上?
但无论如何 , 里面总是需要有 CPU 的 , CPU 要负责执行程序的不规则部分 , CPU 的通用性有自己的优势 。但反过来 , 如果是专门的数据结构或数学运算 , CPU就不行了 。毕竟 CPU 是通用处理器 , 它没有针对任何东西进行优化 , 没有特别擅长的项目 。
抽象层的改变
以前 , 硬件/软件边界由 ISA 定义 , 并且该内存是连续可寻址的 。而涉及到多处理器时 , 一般内存定义也是也是一致的 。但是可以想象 , 在数据流引擎中 , 一致性并不那么重要 , 因为数据会从一个加速器直接传到另一个加速器 。


推荐阅读