自从我作为一个眼睛明亮、尾巴浓密的年轻人开始阅读科幻小说以来,我就接触到了可以“思考”的机器人的概念,因为它们可以感知周围的世界并做出相应的反应。
我对艾萨克·阿西莫夫故事中的机器人印象特别深刻我的机器人,其余的机器人,钢铁洞穴,赤裸的太阳.正如我之前提到的,在阿西莫夫之前,大多数机器人故事都是弗兰肯斯坦的怪物,沿着“人类创造生物,然后生物横行,给人类带来糟糕的一天。”
说句题外话,说到糟糕的发型,在我年轻的时候,我炫耀着一头飘逸的头发,从来没有想过有一天我会以现在这种悲伤的状态结束,我们可以慷慨地称之为“反向莫西干”。但我们离题了……
我只想说,一旦阿西莫夫编纂了他的机器人三定律,大多数以机器人为中心的故事变得更加微妙。
我回想起上世纪90年代我第一次接触到现实世界中的人工智能(AI)和机器学习(ML)的概念。其中一种就是所谓的“专家系统”。这些系统需要做很多工作来实现,而且它们真的不是那么好。另一个问题是,流氓市场营销者很快就接受了AI的绰号,并在他们能接触到的任何东西上盖章“AI Inside”。
今天,同样的事情正在发生,“无麸质”的声明与从未含有任何麸质的产品联系在一起。结果是,到20世纪90年代末,“AI”这个词在每个人的嘴里都留下了不好的味道(由于命运的某种奇怪的怪僻,今天的大多数无麸质产品也可以这样说)。
直到2010年代中期,人工智能才成为学术界的主要兴趣。Gartner是一家知名的、受人尊敬的技术研究和咨询公司,他们出名的原因之一是他们的Gartner炒作周期.
让我们感兴趣的是,2014年版本的Gartner炒作周期根本没有提到AI或ML。仅仅一年后,2015年的炒作周期显示,ML已经达到了膨胀预期的顶峰。
当然,现在人工智能就在我们身边。例如,一个最近受到广泛关注的应用程序的名字很乏味ChatGPT,这是聊天生成预训练变压器的简称。就像我写的使用ChatGPT编写BASIC解释器在我的博客上,我的朋友Joe Farr提出了一个问题,“你能用c#写一个程序来充当BASIC的解释器吗?”乔接着说,”然后它给了我一个完整的c#程序清单。不是一个片段或片段,而是一个完整的程序清单以及它的工作示例。你可以看到这个该死的东西在你眼前实时地输入代码。看着真的很吓人。”
当然,像ChatGPT这样的超级复杂的人工智能应用程序在云中运行在巨大的服务器集群上。目前有一种趋势是在边缘执行AI和ML,这是互联网与现实世界相遇的地方。一些低端Edge AI可以在传统的微控制器单元(mcu)上执行。中端边缘AI可能需要带有神经处理单元(npu)的mcu。高端Edge AI可能需要特殊的片上系统(SoC)设备,拥有专用的AI/ML加速器。
说到特殊的soc,在我的专栏里如何构建一个数十亿晶体管的SoC,我们向大家介绍了MLSoCSiMa.ai该公司的目标是在嵌入式边缘提供轻松的机器学习。在16nm技术节点上创建的整个MLSoC由数十亿个晶体管组成。
作为该专栏的一部分,我们讨论了用于实现SoC的IP块相互连接的各种方式。20世纪90年代使用的主要互连技术是总线。到21世纪初,许多soc都是基于交叉开关的互连。现在,在21世纪20年代初,soc正在炫耀基于片上网络(NoC)的互连。
不同的SoC互连策略(来源:Max Maxfield)
在我们开始之前,我们应该写“a NoC”还是“an NoC”?事实上,两者都是正确的,这取决于一个人在说话时如何说“NoC”,或者在阅读时如何“听出来”。如果你把NoC拼成“N-o-C”,那么“an NoC”就是正确的选择。然而,如果你说“NoC”与“sock”押韵,那么“a NoC”是合适的形式(后一种方式是我思考事物的方式)。
我们习惯于把IP看作是在硅芯片表面占据正方形或矩形区域。你需要花点心思来理解一个事实,即NoC也是一种IP形式,但在这种情况下,它是横跨整个芯片的IP。
如果你是一个设计新SoC的团队的一员,你当然可以设计自己的NoC,但为什么要这样做呢?从头开始创建一个NoC可能需要六名工程师工作两年左右。难道你不想让那些工程师为你的秘密IP工作吗?
我想起了那本书如何削铅笔:为作家,艺术家,承包商,法兰车工,盎格鲁工匠和公务员削铅笔的手工工艺的实践和理论论文大卫·里斯著。书的封底上有伊丽莎白•吉尔伯特(Elizabeth Gilbert)的一句话:“我能自己削铅笔吗?当然可以!我也可以自己做牙医,自己补鞋,自己做罐头——但为什么不把这些事情留给真正的工匠呢?我只把我定制的铅笔交给大卫·里斯。”确实是很高的评价。我只希望我能请得起像大卫这样的工匠给我削铅笔。
当涉及到国家石油公司时,事实上的行业标准是不一致的FlexNoC缓存是连贯的Ncore连接IP从Arteris IP.
谁需要NoC?老实说,事情的发展方式,我想说的是,几乎每个设计新的SoC的人都需要使用这些小流氓之一。我相信您已经见过如下图所示的微处理器趋势数据的不同方面的表示。
50年的微处理器趋势数据。
观察到,尽管这张图的某些方面随着时间的推移而逐渐消失,但晶体管的数量继续以指数方式增长(记住,纵轴是使用对数刻度绘制的)。关键是soc的趋势数据非常相似,在我看来,管理这种复杂性的设计的唯一方法就是使用NoC。
说了这么多,我又知道什么呢?我最后一次设计ASIC是在20世纪80年代初(当时没有人听说过SoC这个术语)。为了确保我没有说什么愚蠢的话(或者,至少没有比平时更愚蠢),我要求与Arteris的副总裁兼首席架构师Michael Frank进行视频聊天。在这次聊天中,我问Frank:“SoC设计师需要使用NoC的所有原因是什么?”
没过多久,我就后悔问了这个问题,因为迈克尔给了我一大堆想法,让我的脑袋像陀螺一样旋转。我仍在从那次经历中恢复过来,但令人高兴的是,我还有足够的力量来总结迈克尔的意识流反应如下:
- 当前soc的复杂性
- 今天的soc由大量购买和内部开发的IP块组成。
- 使用标准的布线(交叉条)拓扑使许多代理与内存和彼此通信是占用区域的。
- 来自不同供应商和/或从以前的设计中继承的IP块可能使用不同的接口标准(ACE, AXI, AHB, APB, CHI, OCP等)。NoC通常使用内部协议进行通信,以“包装”各个接口标准功能,并隐藏这些功能,以支持标准化的“处理”。
- 硅技术继续遵循摩尔定律
- 芯片上可能的组件数量增加了,这允许构建由更多处理器和加速器组成的更复杂的系统。计算中的并发性越高,内存中的流量和并发事务就越多。
- 时钟速度提高了,这意味着单位时间内处理的数据更多。更快的内存标准(DDR…DDR5)意味着整体内存带宽增加。内存延迟不能扩展(内存墙),因此,为了克服延迟,系统需要在运行中有更多的内存事务。
- 从多个源(启动器)到多个接收器(目标)的流量聚合/分配是一个已经在其他网络中解决的问题,首先是在电信网络中,然后是在计算机网络中,通过使用分组协议。同样的解决方案也适用于国家石油公司。
- 在非noc实现中管理并发过于复杂,很难验证和证明正确。NoC协议允许分离请求、内存访问和返回数据。
- 服务质量(QoS)
- 根据(2.2),多个并发代理具有不同的带宽需求和不同的延迟容忍。
- 在分组网络中为“流”实现QoS在计算机和电信网络中是已知的(即使它通常仍然是一门艺术),从而允许提供服务保证,这在交换连接上(几乎)是不可能的。
- 缓存的介绍
- 共享内存资源需要芯片上的本地存储(带宽倍增,延迟减少)来解耦外部内存(例如DRAM)和内部处理器/加速器。
- 引入缓存带来了一致性问题(一致性是保证所有数据共享者总是能够访问最新版本的契约)和内存一致性问题,所有这些都需要关于修改内存位置的顺序和可见性的规则。
- 在NoC上实现具有多个参与者的基于消息的缓存协议很简单(有点),但是使用传统的(遗留的)互连策略非常复杂,性能也很低。
- 避免系统死锁
- 共享缓存的一致性处理会导致单个事务请求衍生出数量可变的消息(例如,窥探、数据干预)。对于NoC来说,在没有死锁的情况下跟踪和管理这些活动的流程更简单(这可以得到正式验证)。
- 例如,通过使用重试或基于信用的系统简化了资源管理(缓冲区等)。
- 电线成本
- 工艺缩放显然更倾向于晶体管/栅极而不是电线。因此,栅极与互连的相对密度变得不平衡,导致金属层数(成本)显著增加。电线更昂贵,在拓扑选择上受到限制。
- NoC在(虚拟)连接之间共享电线,从而提高电线利用率(电线成本回报)。
- Noc封装是灵活的。较少拥塞的路由的线路计数可以基于预期的流量通信模式进行优化。
- 设计简化和可调试性
- 单一的共享协议栈减少了验证工作,并支持通过遥测(性能计数器)和实时调试(流量跟踪捕获)进行检查。
- 使用NoC可以将本地传输/流量管理的设计与全局传输解耦。
- 层次结构的支持
- 将设计划分为独立的、层次分明的块,而不是将复杂的设计构建在一块。
- 每个块可以有独立的时钟和电源控制,只检查边界。这将产生更多/更好的电源管理功能。
- 错误处理
- NoC通过提供可使用的备用/冗余路由来支持错误检测和恢复/弹性的实现。
- 定时关闭和拓扑创建
- 网络中的单个路径可以通过不同的时钟域,可能以不同的频率工作。
- 通过流水线重新安排单个片段的时间是很简单的。
天哪,莫利小姐!你可以想象,上面的列表反映了一个很长的对话。我希望你能听到它,尤其是我不需要把这些都写下来。我只想说,对于“谁需要NoC”这个问题,我确信答案是“每个人!(当然,这是假设我们谈论的是那些正在开发soc的人——例如,从事古代折纸艺术的人,几乎可以肯定在没有noc的环境中继续这样做。)你说呢?你有什么想法想和我们分享吗?