我看到这种元编程论点有些令人困惑,所以让我与Chisel分享我的故事。
我有一个长期运行的个人
项目 在高级数据结构方面。它'主要是个人研究和娱乐的来源,但是我对此有一些不平凡的生产经验。这个想法有点类似于Chisel / RocketChip,但是我没有生成硬件,而是'm生成特定于应用程序
数据存储和处理引擎 基于高级要求。实现非常不同,Memoria使用的是C ++ TMP,因为它的元编程核心甚至不像Chisel那样复杂。's one.
由于高昂的CPU成本,高级数据结构被认为是不切实际的。数据通常以某种压缩格式存储在内存中,因此在O估计其时间复杂度时,每个访问操作都可能具有相当大的隐藏常数。 OoO有很多帮助,但没有帮助'没有真正的不同。然而,潜力是巨大的并且非常诱人。例如,我们可以使用压缩的多维空间树(每个节点的空间复杂度为2位)来编码函数逼近,并使用它代替多层感知器(以维数为模)。感知器具有隐藏层中参数数量的线性复杂度,但是空间树具有对数复杂度。功率受限的用例的巨大差异。
计算密集型应用程序需要特殊的硬件,另一方面,这些硬件必须具有软件驱动的设计。或者
软硬件协同设计如果我不'请勿滥用此词。我尝试跳入HDL领域来为Memoria开发应用程序加速器,但实际上HDL是另一项全职+工作。和我'm已经有两个(常规工作和个人项目)。无论如何,没有带有HBM存储器的FPGA,所有这些我'我与之交谈的人受到记忆力的限制。但是最近我可以买到带有8GM HBM的Alveo U50,这对于像我这样的业余爱好者来说是一个改变游戏规则的人。另外,附庸风雅A7-100"starter kit".
长话短说,我能够在短短几个周末就在Arty A7-100上运行带有DDR3的RV64多核设置的自定义版本。零到英雄。原始的Freedom SDK不为E310软risc-v内核提供DDR3(因为它'一个MCU),我必须自己解决问题。重要的是我在设计空间内有很多自由。我可以实现单身"fat"OoO内核,甚至多核SoC,或配备专用加速器的小型多核系统(U50上的数十个以上)。
后者是最重要的。给定特定的问题类别,我可以推断出所需的硬件加速类型(矩阵乘法,FP密集型,整数密集型,内存密集型,以前的组合,某些特定的内存层次结构等),以及
产生 RVxx内核的特定加速器,以及
软件部分.
这就是软硬件协同设计(从清单上看,这就是我的看法)。 Chisel + RocketChip负责硬件部分。但是为了更好地理解该技术,应该将其置于更大的过程中,在该过程中,有多个生成器负责系统的不同方面。
作为独立技术的凿子对我自己来说也不是那么令人印象深刻。正如我上面所说的,Scala对元编程很有用,但不幸的是它's not
够好了,鉴于现代要求。斯卡拉's的构建工具仍然基于良好的旧版本"make"从80年代开始的范式,但现在"on steroids"。我们需要的是功能完备的基于数据流的数据平台,该平台具有用于外部自动化和集成的精心设计的RESTful API,将整个构建过程以及可通过该API获得的所有中间构件暴露给IDE等外部工具,我们需要在中间工具之上进行可扩展的分析数据。与今天's Scala,您将很难使RocketChip在IDE中正常工作。新兴的LanguageServer模式是正确的方法,但是它是'仍处于婴儿期。 C ++比Scala差得远,但是我'm working to
解决这种情况.
当然,Chisel的全部不是HDL本身,也不是Scala。它 's的高级软件工程实践,例如将中间表示预处理用于各种自动化任务,正在进入传统上保守的硬件设计和工程。凿子只是早起的鸟儿之一。更好的事情来了。多亏了RocketChip,我得以在短短几个周末就为我的项目快速启动了一个全新的领域。是的,它'是活着的好时机