当前位置: 首页 > news >正文

spatial芯片设计语言 学习笔记

Spatial 芯片设计语言是斯坦福 PPL 研究组在特定领域(高级硬件/加速器设计)的研究成果和实践平台。

斯坦福 PPL 是斯坦福计算机科学系下的一个研究实验室,全称是 Pervasive Parallelism Laboratory 普及并行实验室。由著名计算机科学家 Kunle Olukotun 教授和 Christos Kozyrakis 教授共同领导。研究目标: 其核心使命是让并行计算(Parallelism)变得“普及”(Pervasive),即让开发各种并行系统(从多核CPU到大型数据中心)变得像开发串行程序一样简单高效。他们关注的是并行编程的抽象、模型、语言和运行时系统。

关键思想: 他们倡导一种称为 “以领域为中心的计算”(Domain-Centric Computing) 的架构范式。认为未来的计算效率提升不在于通用处理器,而在于为特定领域(如机器学习、科学计算、数据处理)定制专用的领域专用架构(DSA) 和硬件加速器。

  • Spatial 是一种高级硬件构造语言(High-Level Synthesis, HLS Language)。

  • 设计目标: 它的目的是让硬件设计师和软件工程师能够用高级的、类似软件的抽象(如函数、面向对象、强大的类型系统)来描述复杂的硬件加速器,然后由编译器自动生成低级的、可综合的硬件描述(如 Verilog/VHDL)。

  • 核心特性: Spatial 提供了高层次的抽象,例如:

    • 内存层次抽象: 允许程序员声明片上缓存、寄存器文件、流缓冲区等,而无需手动管理数据移动的细节。

    • 并行原语: 内置了对流水线(Pipelining)、并行化(Parallelization)等并行模式的支持。

    • 面向主机-加速器架构: 天然支持将程序的一部分在主机CPU上运行,另一部分在FPGA或ASIC加速器上运行

 

Spatial 是一种scala的方言,就是外壳看起来就是scala,语法什么的都满足scala的要求,新增了一些语义概念,用于支持并行计算和芯片设计,所以它只是一个看起来像scala的芯片设计语言,而不是常规意义上的scala可执行的代码。它的代码的含义和执行方式跟常规scala代码有很大的区别。Spatial跟Chisel在很多地方类似。都是采用scala方言的方法。都是可以生成verilog。不过侧重点有所不同。

  • Spatial:算法级/架构级语言

    • 关注点: 描述的是计算本身和内存架构。你思考的是“我要做什么计算?数据如何在片外DRAM、片上SRAM和寄存器之间流动?如何并行化这些计算?”

    • 抽象对象: 控制器(顺序、并行、流水线)、内存层次(DRAM、SRAM、寄存器文件)、数据流。

    • 好比: 你在用高级语言(如Python)规划一个算法的流程图和数据结构。

  • Chisel:高级的寄存器传输级语言

    • 关注点: 描述的是数字电路在时钟周期内的精确行为。你思考的是“这个寄存器在下一个时钟周期应该锁存什么值?这个组合逻辑如何生成?”

    • 抽象对象: 寄存器、连线、多路选择器、状态机。它生成的是高度优化的、可综合的RTL。

    • 好比: 你在用C++或Java等强大的系统级语言,精确地实现那个算法,但依然比手写汇编(Verilog)更高效。

  • Chisel 的哲学: “给我更好的工具来建造已知的电路模块。” 它强调可重用性和参数化,底层还是RTL思维。

  • Spatial 的哲学: “告诉我你要算什么,我来帮你自动生成最合适的硬件架构。” 它试图将设计师从RTL细节中解放出来,直接思考架构问题。

spatial 基本上使用了scala语法的壳子,也就是语法结构和浅层的语义,同时利用了scala的宏机制来生成仿真程序和verilog代码。

在网络上 spatial的大本营是 https://github.com/stanford-ppl/spatial-lang

有一个可下载的版本

官网是 spatial-lang.org

手册 https://spatial-lang.readthedocs.io/en/legacy/tutorial.html

但是总体来说,资料很少。

另据中科院香山处理器团队的经验,用chisel生成的verilog代码很难读,后面自己又做了一些加强。估计spatial也会有类似的问题。

另外,不排除将来用spatial来生成chisel. 考虑到ppl希望固化并行编程的结果,而不仅仅是提高设计的抽象层次和提高设计效率,因此目前是直接生成verilog的。

scala有一些比较好的本底,比如很强的静态类型检查,纯函数的支持能力,组合复杂数据结构的能力,编译时宏的设计能力,使得它成为高正确性要求编程的首选。

c++也有类似的能力,但是由于历史包袱很重,因此,语法变得极其复杂难懂,且不简练。需要完成类似的功能,需要非常深的理解和魔术般的技巧。

但是scala的主要问题是,生态很弱,编译,下载,库,什么的,都不大方便。国内虽然有一些镜像,比如阿里,清华的镜像,但是总的来说,很难做到开箱即用。这大大影响了这种语言以及相关工具的采用和发展。

总的说来,spatial不论是其语言或者是其思想,都是值得关注的一个方向,是很有潜力的一个方向。

 

http://www.gsyq.cn/news/12808.html

相关文章:

  • 非诚勿扰 —— 大龄单身男,找人生合伙人,有意者邮件联系
  • soul 这款APP太差劲了,天天都有婚介加我,怎么个事情,还能不能好好的解决解决个人问题了
  • 【项目实战 Day7】springboot + vue 苍穹外卖架构(微信小程序 + 微信登录模块 完结)
  • LGP9755 [CSP-S 2023] 种树 学习笔记
  • Spring知识点(2)
  • 超越实习期的AI自动化工具:播客工作流与Slack导出器实战
  • 浅谈dsu on tree
  • 【转】中国信通院《低代码产业发展研究报告(2025年)》核心解读
  • python开始exe应用程序初级教程
  • 深入解析:cocos 添加背景,帧动画,贴图
  • 基于Python+Vue开发的反诈视频宣传管理系统源码+运行步骤
  • 大模型agent综述:A Survey on Large Language Model based Autonomous Agents - 详解
  • 微服务去掉认证的功能
  • INNER JOIN LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN
  • 思想
  • P3197fwx - FanWenxuan
  • 开启我的Java旅程
  • 完整教程:9. NumPy 线性代数:矩阵运算与科学计算基础
  • 用 Crystal 实现英文数字验证码识别工具
  • 完整教程:编程语言综合教程:Java、Python、C++、Go 全面解析
  • PHP 8.2 vs PHP 8.3 对比:新功能、性能提升和迁移技巧
  • 使用油猴脚本去除浏览器搜索的URL后缀,减少广告
  • 使用Tabs选项卡组件快速搭建鸿蒙APP框架
  • 2025.9.27——1橙
  • 深入解析:UE5GAS GameAbility源码解析 CommitAbility
  • 确定Ceph集群中OSD组件与具体物理磁盘的关联
  • 深入解析:Jenkins+Tomcat持续集成教程
  • 实用指南:鸿蒙NEXT安全控件解析:实现精准权限管控的新范式
  • 实用指南:集成学习全解析:Bagging、Boosting、Stacking原理与实战(2025版)
  • 队列+宽搜(BFS)-662.二叉树最大宽度-力扣(LeetCode) - 指南