From Disk to Operating System

硬盘分类

接口类型全称协议类型传输速率范围连接方式主要特点典型应用场景
SATASerial ATAAHCI/NVMe1.5-6 Gbps7针数据+15针电源兼容性强,成本低,支持热插拔家用PC、普通服务器
mSATAMini-SATAAHCI1.5-6 Gbps52针接口SATA的迷你版本,无电源接口超极本、工业设备
SATAeSATA ExpressAHCI/NVMe8-16 Gbps2x SATA+PCIe兼容SATA和PCIe协议早期高性能存储过渡方案
M.2NGFF (Next Gen FF)SATA/NVMe6-32 GbpsM型/B型/M+B型键支持PCIe通道,体积小巧,可选SATA或NVMe协议笔记本、高端PC、工作站
U.2SFF-8639NVMe32-64 Gbps68针接口支持热插拔,兼容2.5寸硬盘形态企业级存储、数据中心
PCIePCI ExpressNVMe16-128 GbpsPCIe插槽直接连接CPU,超低延迟高性能计算、显卡扩展存储
SASSerial Attached SCSISCSI6-24 Gbps29针接口全双工,支持多路径访问,高可靠性企业级服务器、存储阵列
FCFibre ChannelSCSI/FCP16-128 Gbps光纤接口超长距离传输(最远10km),支持SAN架构大型数据中心、云存储
USBUniversal Serial BusUAS/BOT0.48-40 GbpsType-A/C等即插即用,广泛兼容外置存储、移动设备
Thunderbolt-NVMe over PCIe40-120 GbpsType-C接口支持菊花链拓扑,可传输视频和数据创意工作站、外置SSD
NVMe-oFNVMe over FabricsRDMA/FC/TCP25-200 Gbps多种网络介质支持远程访问NVMe设备分布式存储、超融合架构
IDE/PATAParallel ATAATA16-133 MBps40/80针排线已淘汰,并行传输2000年前的老旧电脑

上述表格总结的各类接口,还存在着各种类型的协议

CUDA Performance Analysis

学习视频参考(视频有提供ppt):https://www.bilibili.com/video/BV13w411o7cu/?from=search&seid=13327380806166965269&spm_id_from=333.337.0.0&vd_source=98d46c524d240bd89f118ad90be17aef

High Performance Code Generation for Heterogeneous Environments

确保不断演化的模型能够在新型硬件上高效运行

目前主流深度学习编译器工作流程:

  1. 将模型输入转化为计算图表示
  2. 进行图层次优化(如常量折叠、算子融合、等价替换等),生成优化后的计算图
  3. 通过子任务分割把计算拆分成一系列并行计算任务(tiling)
  4. 为不同硬件生成具体的执行代码

基于 SIMT 的计算范式在前期同构的加速器硬件上(例如只存在 Cuda Core)表现良好,但在配置异构单元的硬件上,加速收益比逐渐降低

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++ 内存流

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

0%