第 6 / 26 个单元计算机与软件基础设施区
第 5 章 程序怎样借硬件变成动作
核心问题程序怎样调用处理器、内存、存储和专用部件完成动作?
一张高分辨率照片打开得很慢。手机仍有几十GB存储空间,为什么不能立刻显示?“放得下”描述长期保存,“跑得动”涉及程序执行、工作空间、数据搬运和计算速度。它们使用同一台设备,却不是同一个指标。
理解计算机硬件,不需要先背处理器型号。先看一项任务怎样在程序、处理器、内存、存储和输入输出设备之间移动。
程序要变成处理器能够执行的指令
程序是为完成任务组织起来的指令和数据。人写的高级语言、脚本或应用逻辑,不能直接以自然语言交给处理器。它们要经过编译、解释、虚拟机或其他运行机制,最终形成平台能够执行的操作。
处理器执行指令时,会取得指令和数据,完成算术、逻辑、比较、数据移动或控制转移,再继续下一步。现代处理器内部远比这条描述复杂,可能并行执行、预测分支、使用多级缓存;通识层先抓住“取指令—处理数据—产生结果”的职责。
点击照片“旋转”可以简化为:
应用接收旋转命令
→ 操作系统取得照片数据和程序资源
→ 需要处理的数据进入内存
→ 处理器或专用部件执行变换
→ 结果送往显示系统
→ 用户确认保存后写回存储
屏幕显示旋转结果与保存新文件是不同动作。应用可以只改变当前视图,也可以重写图像数据或记录旋转元数据。界面同样写着“旋转”,内部处理未必相同。
内存是运行时工作空间,存储负责长期保留
内存保存正在运行的程序和当前需要快速访问的数据。断电后,普通内存中的内容通常不会像存储设备那样长期保留。存储负责保存应用、照片、文件和系统数据,容量大,访问特性与内存不同。
“内存像工作台,存储像仓库”能帮助区分职责。工作台放不下当前材料,工作会频繁搬进搬出;仓库再大,也不能替处理器计算。类比不能继续推出所有性能结论,真实系统还有缓存、虚拟内存和不同层次的存储。[1]
当物理内存不足时,操作系统可能压缩内存、结束后台进程,或把部分内容换到存储。应用切回时需要重新加载,用户就感到卡顿。增加存储空间可以解决“装不下”,不必然解决“当前工作空间不足”。
缓存位于更靠近处理器的位置,用来保留近期或可能再次使用的数据,减少等待较慢层次的次数。缓存容量通常小得多,却会显著影响性能。硬件体系中的“快与大”往往需要分层取舍。
性能由整条路径决定
处理器频率更高,不表示所有任务按同一比例变快。任务可能等待内存、存储读取、网络、图形处理、软件锁、远端服务或用户输入。某一步耗时占比很小,再提高它的速度,对总时间帮助有限。
打开本地大照片,瓶颈可能是解码与内存;播放在线视频,网络和远端服务更重要;启动应用,可能等待存储读取和初始化;多个程序同时运行,资源竞争会让切换变慢。
诊断性能应描述具体任务和时刻:启动慢、滚动卡、保存慢、网络内容等很久、还是设备持续高温。一个“慢”字没有指明瓶颈。
购买设备也应从任务出发。大量文档与网页、视频剪辑、三维建模、模型训练,对内存、存储、处理器和图形部件的需求不同。只按某个最高参数排序,可能为无关能力付费,却没有解决真正瓶颈。
CPU、GPU和专用部件擅长不同工作
CPU擅长通用控制和多种类型任务。GPU最初围绕图形计算发展,拥有大量适合并行数值计算的处理单元,因此也常用于深度学习训练和推理。手机和现代计算设备还可能包含视频编解码器、神经网络加速器和其他专用部件。
把任务交给专用硬件,需要相应软件和数据组织。拥有GPU不表示任何程序都会自动变快;模型能否运行,还取决于内存容量、数据精度、软件支持和模型结构。
“AI芯片”描述硬件擅长的计算和用途,不会让芯片获得知识、目标或责任。模型参数仍需存储和加载,输入仍需准备,输出仍由软件和人解释。
指令集连接软件与处理器
处理器能够执行哪些基本操作,由指令集架构规定。RISC-V是一种公开指令集实例,[2] 不同设备也可能使用其他架构。应用若要在不同架构上运行,通常需要相应编译版本、解释环境或兼容层。
这解释了为什么“同一个安装包”不能保证在所有设备运行。操作系统、处理器架构、依赖库和权限都属于运行环境。软件发行者为不同平台提供不同版本,解决的正是这种差异。
面对设备故障或性能问题,可以先画一条路径:数据从哪里读入,进入哪一层工作空间,谁执行计算,结果送到哪里,是否要写回或经过网络。沿路径找等待时间,比笼统责怪处理器更有效。
处理重要数据前先留可恢复副本。设备持续过热、电池鼓包、异常断电或存储出现故障迹象时,应停止反复尝试,寻找合适的维修与数据支持。性能优化不能以损坏设备和数据为代价。
硬件角色一旦同时工作,就需要协调者安排处理器时间、内存、文件、设备和权限。这个协调者是下一章的操作系统。