Runtime Library

程序运行的基本步骤:

  1. 操作系统创建进程,将控制权移交给程序的入口(一般为运行库的某个入口函数)
  2. 入口函数执行初始化
  3. 入口函数负责调用 main 函数执行程序主体
  4. main 执行完毕后,返回入口函数,进行清理工作,通过系统调用结束进程

_start -> __libc_start_main -> main

IO

分类方法/函数头文件用途示例代码适用场景
C++ 流式读写std::ifstream文本/二进制读cpp std::ifstream fin(“a.txt”); fin » x;类型安全的高层读写
std::ofstream文本/二进制写cpp std::ofstream fout(“a.txt”); fout « x;
std::fstream文本/二进制读写cpp std::fstream file(“a.bin”, std::ios::binary|std::ios::in|out);需要随机访问的二进制文件
C 标准库fopen() + fread()/fwrite()<stdio.h>二进制读写c FILE* f = fopen(“a.bin”, “rb”); fread(&x, sizeof(int), 1, f);跨平台二进制操作
fopen() + fscanf()/fprintf()<stdio.h>格式化文本读写c fprintf(f, “%d”, x);结构化文本文件
fgets()/fputs()<stdio.h>行式文本读写c fgets(buf, 100, f);逐行处理文本
POSIX 系统调用open() + read()/write()<fcntl.h>低层二进制读写c int fd = open(“a.bin”, O_RDWR); read(fd, &x, sizeof(x));需要精细控制(如非阻塞IO)
mmap()<sys/mman.h>内存映射文件c void* p = mmap(…, fd, …);大文件随机访问
内存文件fmemopen() (POSIX)<stdio.h>将内存模拟为文件c FILE* memf = fmemopen(buf, size, “r+”);内存数据流处理
std::stringstreamC++ 内存流

有时候涉及到文件流和字符串流综合运用的场景

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

0%