RISC-V规范中提到“hart”这个词 - 它的意思是什么?

49

我在RISC-V 2.1规范的第35页找到了对hart的提及。但是,在这个文档中我找不到hart的定义。 hart是指硬件线程还是指更邪恶的东西?


6
没问题,"hardware thread" 确实是正确的术语 - 可以参考例如 https://en.wikipedia.org/wiki/RISC-V。 - jasonharper
5
啊,没错……'hart'在其他RiscV规范(riscv-privileged-v1.9.1)中有详细的解释。当涉及到 'hart'时,用户级规范(第一卷)应该引用特权规范(第二卷)。也许最好是按顺序阅读这些规范,从第二卷开始阅读?谢谢。 - daveW
@daveW 顺便说一下,该手册是在 GitHub repo 上维护的,您可以提交 PR 或问题!更新:已经有一个 issue 哈哈 - Rick
4个回答

51

是的,hart是一种硬件线程。


23
非常感谢,有点难找。 - Marc43

24

一个与RISC-V兼容的内核可能通过多线程支持多个RISC-V兼容的硬件线程(harts)。

RISC-V指令集手册
第一卷:非特权ISA文档版本20191214-draft
第2页


12
简单来说,"hart"是指包含完整的RISC-V体系结构寄存器并独立于RISC-V系统中其他"harts"执行其程序的RISC-V执行上下文。"RISC-V系统"的组成取决于软件执行环境,但对于标准用户级别程序来说,它意味着用户可见的"harts"和内存(即多线程Unix用户进程)。“独立执行”意味着每个"hart"都将按程序顺序最终获取和执行其下一条指令,而与其他"harts"的活动无关(至少在用户级别)。这是我花费大量时间理解"hart"是什么后得到的最接近答案。https://groups.google.com/a/groups.riscv.org/forum/#!topic/sw-dev/QKjUDjz_vKo

你是在暗示hart可能是内核的幻觉,或者其他什么,并且只运行用户空间软件线程吗?我很难想象任何可以适当称为硬件线程的东西,在内核软件看来不像一个完整的CPU,因此例如两个单独的harts上的代码可以同时运行内核代码。我可以看到在物理核心上只有一个hart实际上处理外部中断,尽管对于抢占式多任务处理,您需要每个hart能够接收定时器中断或类似的东西。 - Peter Cordes
听起来"hart"只是试图捕捉每一个可能的SMT和相关的东西(https://en.wikipedia.org/wiki/Simultaneous_multithreading),这个概念在其他ISA上被描述为"逻辑核心"。 - Peter Cordes
@PeterCordes RISC-V为每个hart定义了一个独立的地址空间,其中包含4096个控制状态寄存器(CSR)的地址空间。此外,这些CSR不是内存映射的,因此不需要通过LD/STORE进行读取/修改,而是由机器代码原子性地读取/修改。因此,在软件中,hart和线程完全不同,当您考虑上下文切换时,harts无法同时运行。特权规范第9章对此进行了解释。它既不是传统的硬件线程也不是软件线程,而是一种特殊的类型。 - RRON
这只是一个 RISC-V 执行上下文。 - RRON

7

来自RISCV规范v2.2第20页:

我们使用术语hart来明确、简洁地描述硬件线程,而不是软件管理的线程上下文。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接