Runtime Library
程序运行的基本步骤:
- 操作系统创建进程,将控制权移交给程序的入口(一般为运行库的某个入口函数)
- 入口函数执行初始化
- 入口函数负责调用 main 函数执行程序主体
- main 执行完毕后,返回入口函数,进行清理工作,通过系统调用结束进程
_start
-> __libc_start_main
-> main
程序运行的基本步骤:
_start
-> __libc_start_main
-> main
分类 | 方法/函数 | 头文件 | 用途 | 示例代码 | 适用场景 |
---|---|---|---|---|---|
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::stringstream | C++ 内存流 |
有时候涉及到文件流和字符串流综合运用的场景
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[特殊功能单元]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 以等待写回阶段的完成,后面的连续指令才能正常访问寄存器的值
作用在于将 C++ 实现的函数封装为 module,供 python 代码调用。
想要理解 pybind 的封装逻辑,还需要理解 python 是如何使用 pybind 生成的内容的,即关键点在于 python 的 import 机制的基本原理。