Cycle Accurate Simulator

硬件架构

graph TD
    A[Processor] --> B[Top Core]
    B --> C[Big Core]
    B --> D[SPM Controller]
    C --> E[Frontend]
    C --> F[Backend]
    E --> G[指令解码/分发]
    F --> H[执行单元阵列]
    H --> I[标量执行单元]
    H --> J[向量执行单元]
    H --> K[特殊功能单元]
模块功能描述适用场景
Frontend指令获取、解码、分发(支持VLIW超长指令字)多发射/多流水线架构(如VLIW)
Backend执行单元阵列管理,包含标量/向量/特殊功能单元简单顺序或单发射流水线
SPM Controller共享内存(ScratchPad Memory)管理,支持多端口并行访问
DMA Engine高速数据传输(DRAM <-> SPM)
FSM & Ctrl状态机控制模块,处理异常、中断和调试接口

指令集

指令的排布需要考虑流水线的模式,RAW 等冲突是可能存在的,例如 SMOVI 指令后可能需要跟一个 SNOP 以等待写回阶段的完成,后面的连续指令才能正常访问寄存器的值

Pybind Analyze

作用在于将 C++ 实现的函数封装为 module,供 python 代码调用。

想要理解 pybind 的封装逻辑,还需要理解 python 是如何使用 pybind 生成的内容的,即关键点在于 python 的 import 机制的基本原理。

SSH Local and Remote Port Forwarding

https://cdn.jsdelivr.net/gh/gaohongy/cloudImages@master/202411232237252.png 1

Understanding of forwarding

  1. 转发的是什么?

答:port forwarding 其中的 port 就已经指明了这一点,传输层的 port 标定了具体的 application,所以转发的实际是对于这个 application 的请求。

C++ Class Inheritance

Access Modifiers

  1. public: 成员可以被任意地方访问,包括类的外部
  2. protected: 成员可以被类本身及其子类访问
  3. private: 成员只能被类本身访问

We can use different modifier to modify super class and different modifier has different effect

Terminal

特性真实的虚拟终端 (VT)伪终端 (PTS)
硬件依赖直接与物理硬件(显示器、键盘)交互软件仿真,不直接与物理硬件交互
设备文件/dev/tty1, /dev/tty2 等/dev/pts/0, /dev/pts/1 等
使用场景物理机的控制台登录,无需图形界面图形终端仿真器、远程登录(如 SSH)会话
固定数量通常有 6 个或更多虚拟终端动态创建,按需分配
终端切换方式Ctrl + Alt + F1 到 Ctrl + Alt + F6软件仿真器或通过网络远程连接,如 ssh 登录

通过 /proc/<PID> 可以查看进程的相关信息,一些命令的实现也是基于这个文件

Linux Device Drivers

层次结构

在了解驱动程序的具体内容之前,我们可以首先从 Nvidia GPU 所提供的一些 API 层级入手来理解整体的结构,下图展示了上层应用程序在使用 cudaMalloc 时的调用流程图,其中的重点就是 Runtime API, Driver API 和 驱动程序。

0%