【精品博文】失控----FPGA去中心化设计 <二>
资源是有限的,怎样才能做到资源利用率最大化?
FPGA里面有个RAM,一般的RAM最大只有两个读取口,但是现在我希望有RAM能支持上千的读取口。
可能会问会有这种需求吗?服务器的数据库就是需要这种短时并发查询的,过年刷红包,就是每秒上亿次并发查询。
接上文,这篇博客非独立文章,可能您需先读上一篇。(请看昨天微信推文)
SOC图 EOC NOC 图对比
EoC NoC 的方式就可以很简单的实现这种并发设计,上千个master对一个slaver,速度可以和单口时一样快,至少我可以设计得一样快,而且是流水设计(不是指reg级别,而是模块基本,这个模块的输出是下一模块的输入),如果按200M时钟计算,那么就是5ns一次查询,每秒就是2亿次查询,开玩笑的说腾讯只需要一个K7的板就行了。(RAM不会存详细数据,只需要存数据表的外键映射就行,再不结果输出分发出去,其实数据很大,放到DDR也是可以的,速度会降一个数量级,设计难度也会升高),最大的问题不是RAM能不能存这么多数据,而是服务器没有到FPGA合理的IO能力,简单的说就是我FPGA可是可以达到这个速度,但是你服务器倒是能不能按这个速度给我发数据,和接受我的数据?
再说一个例子,比如最近热门的词“蓝鲸游戏”,腾讯需要从每天的和过去的QQ群海量聊天数据中筛选出信息,来锁定某些问题群。因为是突发问题,直接在服务器端做实时统计也只能筛选未来的数据,对以前的数据无效,如果用服务器简单的对以前的数据做筛选,又太耗费时间(不能快速锁定)和资源。这个时候可以尝试用FPGA的方式,把数据导给FPGA,FPGA在按自己的并行流水工作方式,来处理,只要发现问题就给服务器反馈。
这个速度又能到多少呢?,一个DDR3 1600M DIMM条的理论计算带宽是102G/bps,按内存60%利用率计算(保守计算),工作带宽就是60Gbps,一半带宽做服务器数据接收口,一半做处理口,那么处理的能力也就能达到十分恐怖的30Gpbs,完全轻轻松松处理P级的数据(1Pbit = 1KTbit = 1MGbit)。完全得益于EOC NOC的分布式设计对资源利用率的控制。我们熟悉的VDMA也是EOC NOC的一种,VDMA对DDR的利用率也是很高的,可惜的是无论Altera 还是Xilinx,都把VDMA至于CPU ctrl的淫威下。
回头想想,挺有趣的,NOC,EOC 的设计初衷只是Network,互联。资源利用率并不是考量,至少不是主要考量。虽然没有刻意去设计,但是这种方式确实有最佳的利用率。KK在《失控》也说----“只是提供合适环境,阳光,时间,这个生态系统就自己完成其他工作,你不知道它什么时候建成的,又是怎么工作的,只知道它已经在那里了”。实际工程中,我做Ethernet设计,当时只是考虑用NOC EOC的方式实现不同协议和应用路由,速度只要到75%带宽就行。最后设计到的带宽是93%,网络能到的理论带宽就是93%,也就是说,NOC EOC已经撑满整个网络!!
为什么是FPGA
CPU速度太太太慢
GPU可能有点慢,功能定制能力可能有点弱
ASIC,基本不可能为了筛选一个词“蓝鲸游戏”去开发一款IC,即使是做一款筛选不定关键词的IC,你的量又有多大?还有就是可配置性,你这个IC,有没有数据库查询功能?