前面说了那么多片上网络,但都还是不全的。自从2000年左右,由Hemani教授和Axel教授首先在论文中使用了Network on Chip这样一个概念以后,有关Network on Chip的论文可以说是汗牛充栋。在IEEE 数据库上面搜索Network on Chip这个关键词,可以搜索到会议论文20171篇,期刊论文4472篇,还有即将出版的论文75篇。考虑到实际上还有大批的论文是在ACM以及Elsevier旗下的期刊发表的,实际上整个数量还要多。
但纵观整个NoC圈子里的论文,是做仿真的多,做实现的少;做架构的多,做电路的少;建模型的多,做出来的少。当我读完了近300篇论文之后发现,大部分的文章是在Architecture上打转。正如王博所说,很多都是什么改改微架构,bypass一下电路,或者是做点什么bus和NoC混合的架构出来。对于绝大多数这样的论文,不要说常年做数字设计的人,就我这样常年看数字设计的人一眼就能发现有若干不靠谱的地方。从架构层面上多几个框框,加几根线,然后用system c或者C++仿真一下,看起来都没问题。但这帮人多半不会真的去考虑RTL级实现,他们的RTL代码也主要就是写来给综合工具跑一下,得出一点什么功耗、面积、速度之类的参数用来秀一下自己的结果。至于代码本身功能是不是正确,who care……甚至更多的,压根就没往综合上面去搞,也就是跑跑仿真,数数cycle数,算算latency就完了。
在读了这么多论文以后我不得不痛苦的承认,在NoC这个领域做出来的真正比较有实用价值的或者是用于全系统的实现的NoC,基本上都是棒子做出来的。尤其是是棒子的思密达研究院那帮人做出来的。而且思密达研究院还为了NoC找到了真正的killer App:图像/视频处理。
为什么这个是killer App?我在这里来分析一下NoC based的CMP。1、对于CMP来说,NoC是作为Memory的附庸存在的,是作为一种访存方式,而CMP的访存的时候需要解决问题还多得很,NoC反而就显得没有那么急迫了;2、CMP不过是做并行机的人换了个地皮,从原来的板级或者说机柜级并行往片上并行转换,实际上对于真正搞并行计算的人来说,片上搞上十几个甚至几十个核不过是小case,老子几千个处理器都搞过的还在乎你这点?3、现在正在的大数据、云计算这类的应用,还根本关心不到片上多核这个层面上来,在这类应用里面更多的是数据的输入输出受限(或者说叫所谓的IO密集型),有兴趣的可以看看现在数据中心网络或者说数据中心的hardware方面的研究主要是关心的什么方面。综上所述,NoC based 的CMP一直处于是不尴不尬的境地,也就是王博之前说的有一大帮搞CMP的人也在喷说用NoC做啥主要原因……
那作为NoC based的MPSoC呢?或者说是面向嵌入式应用的复杂SoC呢?著名的科普作家G. 伽莫夫在他的著名科普作品《从一到无穷大》的第一章末尾感慨:我们现在几乎有了无尽的计数能力,但却发现没有多少可以让我们数的。而这句话对于复杂SoC也非常的适用:我们几乎拥有了超强的计算能力,却发现没有多少值得我们去算的。现在MPSoC里面玩的那些Mapping benchmark,什么H.264啊,PIP,MPEG4啊;说老实话根本用不着什么多核……功能强大点的DSP一个核最多两个核搞定,实在不行用个什么硬件加速器也搞定了。那接下来运算量大一点的就是通信和网络了。网络方面有之前介绍的194个核的NP,但网络最大的问题和CMP类似:真正复杂的网络要解决的问题不在这上面,而是别的地方。通信呢?通信信号处理前面大家也有例子看了,802.11n的Mapping。问题在于:通信信号处理的并行性不够。通信信号处理是一种非常适合于流水线操作的运算,信号进来基本上就是一条道走到黑,数据类似于排队枪毙一样,进来一个处理一个。这种结构实际上是非常适合用FPGA/ASIC而非基于多核MPSoC来实现的,因为没有非常复杂的数据交互。虽然有时候为了提升性能而不得不做一点并行展开,也可以看做是多条独立的流水线并行操作而已。并且大多数的操作是否有必要展开到那么大还是值得商榷的。
如此算下来,图像/视频就成了一个非常难得的killer app.这里的图像/视频不是指之前提到的H.264之流传统的视频编解码,而是指机器视觉、图像识别、运动检测等一系列高级的、带有人工智能性质的图像/视频处理。而思密达研究院所做的那些NoC,大部分都是针对这个应用领域。对于这些应用而言,其满足以下几个特征:1、数据量足够大,对于图像处理而言,一帧图像1024*768算是很低清的了,但仔细算算这里面多少个点了,每个点就算用8位RGB表示,一帧图像的数据量为1024*768*24.2、图像/视频处理可以非常方便的做数据并行或者是分割处理,对于一个处理单元而言可以只处理图像中的一小部分即可;3、图像/视频处理需要涉及到复杂的数据交互,然后我们可以把图像分割为若干子图,但子图处理后的结果需要汇总之后再次处理,甚至需要多次汇总分级处理,这个时候任务之间的链接关系就变得复杂起来了;4,图像/视频处理对实时性-运算能力的要求非常高,以机器视觉为例:目前机器视觉的一个大的应用方向就是基于图形图像的缺陷/故障检测,试想在生产线上面某个有缺陷的产品到了,要求其必然要在尽可能短的时间内完成检测。 以上的这些特点都使得基于NoC的MPSoC设计成为一直必要的基础平台。而这相关的论文在JSSC、ISSCC、Micro等顶级期刊和会议上均可以查阅到。
NoC提出10多年来,各种研究层出不穷。但我们需要仔细的想一想NoC提出的目的是什么。NoC毕竟不是纯粹的Network,它不过是解决片上互联的一种手段而已。当扒开它身上那层所谓的Network的光环回归它本质的时候,我们应该更多的思考这个问题:如何去做能够接地气的NoC.