综合练习题

本章综合练习题涵盖计算机系统概述的所有核心知识点,分为基础、中级、高级三个难度等级。

基础练习(1-10题)

练习 1

简述计算机系统的层次结构,并说明每层的主要功能。

分层结构系统层次冯·诺依曼

解题思路:

自底向上逐层说明,指出每一层的名称、职责和一个有代表性的例子,最后归纳分层结构带来的性质。

详细步骤:

计算机系统的层次结构从下到上包括:

  1. 硬件层:

    • 提供基本的物理设备
    • 执行最基本的电子操作
    • 例子:CPU、内存、硬盘
  2. 微程序层:

    • 将机器指令分解为微操作
    • 控制硬件部件协调工作
    • 对程序员不可见
  3. 操作系统层:

    • 管理硬件资源
    • 提供用户接口
    • 例子:Windows、Linux
  4. 系统软件层:

    • 提供开发工具
    • 管理数据库
    • 例子:编译器、数据库系统
  5. 应用软件层:

    • 直接为用户服务
    • 实现特定功能
    • 例子:浏览器、Office

优势:模块化、易维护、可扩展、可移植

最终答案:

计算机系统的层次结构自下而上由硬件层、微程序层、操作系统层、系统软件层和应用软件层组成。其优点是模块化、易于维护、可扩展和可移植。

练习 2

冯·诺依曼结构的五大部件是什么?各有什么功能?

冯·诺依曼五大部件ALU控制器

解题思路:

按数据流经的顺序列出五大部件,并为每个部件附上一句话的职责说明。

详细步骤:

冯·诺依曼结构的五大部件:

  1. 运算器(ALU):

    • 执行算术运算(加减乘除)
    • 执行逻辑运算(与或非)
    • 执行移位操作
  2. 控制器:

    • 取指令、译码
    • 发出控制信号
    • 控制程序执行顺序
  3. 存储器:

    • 存储程序和数据
    • 包括内存(RAM/ROM)和外存(硬盘)
    • 提供数据读写功能
  4. 输入设备:

    • 将外部信息转换为数字信号
    • 例子:键盘、鼠标、扫描仪
  5. 输出设备:

    • 将计算结果转换为可理解的形式
    • 例子:显示器、打印机、音箱

核心思想:程序存储,指令和数据存储在同一存储器中

最终答案:

五大部件是运算器、控制器、存储器、输入设备和输出设备。它们背后的核心思想是存储程序:指令和数据共用同一存储器,由控制器按顺序取出并执行。

练习 3

什么是程序存储原理?它有什么重要意义?

存储程序程序与数据冯·诺依曼

解题思路:

用一句话表述该原理,再列出由它带来的四项推论以及它产生的历史影响。

详细步骤:

程序存储原理: 将程序指令和数据都存储在同一个存储器中,计算机按照程序指令的顺序自动执行。

重要意义:

  1. 自动执行:

    • 程序一旦加载,无需人工干预
    • 计算机自动按顺序执行指令
  2. 程序可修改:

    • 程序存储在内存中,可以修改
    • 可以实现自修改程序
  3. 通用性:

    • 同一台计算机可以运行不同程序
    • 只需更换存储器中的程序
  4. 灵活性:

    • 程序和数据统一存储
    • 程序可以像数据一样被处理

历史意义: 这是现代计算机的基础,使得计算机从专用机器变成了通用机器!

最终答案:

存储程序原理是指程序指令和数据都存放在同一个存储器中,计算机按存放的先后顺序自动执行指令。这一原理在历史上具有决定性意义,因为它把专用机器变成了通用机器,并且至今仍是每一台现代计算机的基础。

练习 4

区分主存储器和辅助存储器,并举例说明。

主存辅存RAMCache

解题思路:

从速度、容量、价格、易失性和 CPU 访问方式五个相同维度对比两类存储器,再说明计算机为何两者都需要。

详细步骤:

主存储器(内存):

特点:

  • 速度快
  • 容量较小
  • 价格较贵
  • 易失性(断电丢失)
  • CPU可以直接访问

例子:

  • RAM(DDR4、DDR5内存条)
  • ROM(BIOS芯片)
  • Cache(L1/L2/L3缓存)

辅助存储器(外存):

特点:

  • 速度较慢
  • 容量大
  • 价格便宜
  • 非易失性(断电保持)
  • CPU不能直接访问,需要先加载到内存

例子:

  • 机械硬盘(HDD)
  • 固态硬盘(SSD)
  • U盘、光盘

为什么需要两种存储器?

  • 主存速度快但贵,适合存储正在使用的程序和数据
  • 辅存容量大但慢,适合长期存储大量数据
  • 两者配合,平衡速度和容量

最终答案:

主存速度快、容量小、价格高、易失,且可由 CPU 直接访问(RAM、ROM、Cache),而辅存速度慢、容量大、价格低、非易失,只能通过调入主存后访问(HDD、SSD、U 盘)。实际的计算机两者都需要,因为主存的速度和辅存的容量在任何其他地方都得不到。

练习 5

简述指令执行的五个阶段。

指令周期IF ID EX MEM WB取指译码执行

解题思路:

按顺序梳理指令周期,指出五个阶段及各自完成的具体工作,再说明把它们串起来的性质。

详细步骤:

指令执行的五个阶段:

  1. 取指 (IF - Instruction Fetch):

    • 从内存中取出指令
    • 根据PC(程序计数器)的值读取指令
    • 将指令存入IR(指令寄存器)
    • PC自动加1,指向下一条指令
  2. 译码 (ID - Instruction Decode):

    • 分析指令的操作码
    • 确定指令类型和操作数位置
    • 读取寄存器中的操作数
    • 准备执行所需的控制信号
  3. 执行 (EX - Execute):

    • ALU执行算术或逻辑运算
    • 计算内存地址(访存指令)
    • 计算跳转目标地址(跳转指令)
  4. 访存 (MEM - Memory Access):

    • LOAD指令:从内存读取数据
    • STORE指令:将数据写入内存
    • 其他指令:跳过此阶段
  5. 写回 (WB - Write Back):

    • 将运算结果写回目标寄存器
    • 更新状态标志(零标志、进位标志等)
    • 准备执行下一条指令

这五个阶段构成一个完整的指令周期,不断循环执行。

最终答案:

五个阶段分别是取指、指令译码、执行、访存和写回。它们共同构成一个完整的指令周期,并不断重复直到程序结束。

练习 6

已知某CPU的时钟周期为0.5纳秒,求其主频是多少GHz?

主频时钟周期CPU执行时间

解题思路:

套用主频与时钟周期的关系式,代入给定的周期,并把结果换算成 GHz。

详细步骤:

解:

根据公式:主频 = 1 / 时钟周期

主频=10.5×10−9=10.5×109=2×109 Hz=2 GHz\text{主频} = \frac{1}{0.5 \times 10^{-9}} = \frac{1}{0.5} \times 10^9 = 2 \times 10^9 \text{ Hz} = 2 \text{ GHz}

答案:2 GHz

最终答案:

Clock Frequency=10.5×10−9=10.5×109=2×109 Hz=2 GHz\text{Clock Frequency} = \frac{1}{0.5 \times 10^{-9}} = \frac{1}{0.5} \times 10^9 = 2 \times 10^9 \text{ Hz} = 2 \text{ GHz}

主频为 2 GHz。

练习 7

某程序包含以下指令:

  • 50%的指令CPI=1
  • 30%的指令CPI=3
  • 20%的指令CPI=5

求该程序的平均CPI。

CPI平均 CPI加权平均

解题思路:

对多种指令类型使用加权平均公式,按各类型指令所占比例对相应的 CPI 加权。

详细步骤:

解:

使用加权平均公式:

平均CPI=∑(CPIi×比例i)\text{平均CPI} = \sum (\text{CPI}_i \times \text{比例}_i)平均CPI=1×0.5+3×0.3+5×0.2\text{平均CPI} = 1 \times 0.5 + 3 \times 0.3 + 5 \times 0.2=0.5+0.9+1.0=2.4= 0.5 + 0.9 + 1.0 = 2.4

答案:平均CPI = 2.4

解释:这意味着平均每条指令需要2.4个时钟周期。

最终答案:

平均 CPI 为 2.4。这意味着平均每条指令需要 2.4 个时钟周期执行完毕。

练习 8

某程序包含200万条指令,平均CPI为3,CPU主频为2.5GHz。求CPU执行时间。

CPU执行时间CPI指令数

解题思路:

把指令数、CPI 和主频代入 CPU 时间公式。

详细步骤:

解:

使用CPU时间公式:

CPU时间=指令数×CPI主频\text{CPU时间} = \frac{\text{指令数} \times \text{CPI}}{\text{主频}}CPU时间=2,000,000×32.5×109\text{CPU时间} = \frac{2,000,000 \times 3}{2.5 \times 10^9}=6,000,0002,500,000,000=0.0024 秒=2.4 毫秒= \frac{6,000,000}{2,500,000,000} = 0.0024 \text{ 秒} = 2.4 \text{ 毫秒}

答案:CPU执行时间 = 2.4毫秒

最终答案:

CPU 执行时间为 2.4 ms。

练习 9

什么是ISA(指令集体系结构)?它的作用是什么?

ISA指令系统硬件接口

解题思路:

把指令系统定义为一种接口,列举它所约定的内容,再说明存在统一指令系统带来的三项后果。

详细步骤:

ISA(Instruction Set Architecture,指令集体系结构):

定义: 软件和硬件之间的接口,定义了计算机的指令格式、功能和执行方式。

主要内容:

  1. 指令格式:指令的编码方式
  2. 指令功能:每条指令做什么
  3. 寄存器:数量、大小、用途
  4. 数据类型:支持的数据格式
  5. 寻址方式:如何访问数据

作用:

  1. 软硬件接口:

    • 软件按ISA编写程序
    • 硬件按ISA执行指令
  2. 兼容性:

    • 同一ISA的不同CPU可以运行相同程序
    • 例如:所有x86 CPU都能运行Windows
  3. 标准化:

    • 促进软硬件独立发展
    • 硬件升级不影响软件

常见ISA:

  • x86/x86-64:Intel、AMD的PC处理器
  • ARM:手机、平板、嵌入式设备
  • RISC-V:开源指令集,新兴架构

最终答案:

ISA 是软件与硬件之间的接口,它规定了处理器的指令格式、寄存器、数据类型和寻址方式。它的存在使针对该指令系统编写的软件能够在不同实现之间保持可移植,也使硬件可以替换而不必重写程序。

练习 10

为什么现代CPU要设计多级缓存(L1/L2/L3)?

Cache 层次L1 L2 L3局部性原理

解题思路:

从三个角度论证缓存的必要性:速度差距本身、使缓存有效的局部性原理以及各级容量的调优方式,然后说明效果并给出一个具体类比。

详细步骤:

原因:

  1. 速度差距:

    • CPU主频:3-5GHz(每秒几十亿次)
    • 内存访问:10-100ns(相对很慢)
    • 如果每次都访问内存,CPU大部分时间在等待
  2. 局部性原理:

    • 时间局部性:刚访问的数据很可能再次访问
    • 空间局部性:访问某数据后,很可能访问附近的数据
  3. 多级缓存设计:

L1 Cache:

  • 最快(1-2个时钟周期)
  • 最小(32-64KB)
  • 每个核心独立

L2 Cache:

  • 较快(10-20个时钟周期)
  • 较大(256KB-1MB)
  • 每个核心独立或共享

L3 Cache:

  • 相对慢(30-50个时钟周期)
  • 最大(8-36MB)
  • 所有核心共享

效果:

  • 命中率90%以上时,平均访问时间接近L1
  • 大大提升CPU性能

类比: 就像你的书桌(L1)、书架(L2)、图书馆(L3)、网上书店(内存)

  • 常用的书放桌上,拿取最快
  • 不常用的放书架,稍慢
  • 很少用的去图书馆,更慢
  • 没有的才去网上买,最慢

最终答案:

现代 CPU 采用多级 Cache,原因有三:处理器速度已远远超过存储器速度;程序访问的局部性原理使缓存行之有效;把缓存分级可以让每一级都在容量与延迟之间取得最佳折中。其结果是平均访问时间接近 L1,同时仍能支撑远大于 Cache 本身的工作集。

中级练习(11-15题)

练习 11

比较两个CPU的性能:

CPU A:主频2.5GHz,CPI=2.5,执行程序需要1200万条指令 CPU B:主频3.5GHz,CPI=3.5,执行同一程序需要1000万条指令

哪个CPU执行这个程序更快?快多少?

CPU执行时间加速比性能比较

解题思路:

由指令数、CPI 和主频分别算出两个处理器的 CPU 时间,再取比值得到加速比。

详细步骤:

解:

CPU A的执行时间:

时间A=12,000,000×2.52.5×109=30,000,0002,500,000,000=0.012 秒=12 毫秒\text{时间}_A = \frac{12,000,000 \times 2.5}{2.5 \times 10^9} = \frac{30,000,000}{2,500,000,000} = 0.012 \text{ 秒} = 12 \text{ 毫秒}

CPU B的执行时间:

时间B=10,000,000×3.53.5×109=35,000,0003,500,000,000=0.01 秒=10 毫秒\text{时间}_B = \frac{10,000,000 \times 3.5}{3.5 \times 10^9} = \frac{35,000,000}{3,500,000,000} = 0.01 \text{ 秒} = 10 \text{ 毫秒}

加速比:

加速比=时间A时间B=1210=1.2\text{加速比} = \frac{\text{时间}_A}{\text{时间}_B} = \frac{12}{10} = 1.2

答案:CPU B更快,快20%(或快2毫秒)

分析:

  • CPU B虽然CPI更高(效率更低),但主频更高且指令数更少
  • 编译器优化减少了约17%的指令,这是关键因素
  • 这说明:性能不只看硬件,软件优化同样重要!

最终答案:

CPU B 更快,快 20%(即 2 ms)。

分析:

  • CPU B 的 CPI 更高(也就是效率更低),但它的主频也更高,指令数也更少
  • 编译器优化去除了约 17% 的指令,而这才是关键因素
  • 这说明性能不只取决于硬件,软件优化同样重要!

练习 12

某程序70%的代码可以并行化。如果使用8个处理器,根据Amdahl定律,理论加速比是多少?

阿姆达尔定律加速比并行性

解题思路:

用给定的并行比例套用阿姆达尔定律,再求处理器数量趋于无穷时的加速比极限。

详细步骤:

解:

Amdahl定律公式:

加速比=1(1−P)+PN\text{加速比} = \frac{1}{(1-P) + \frac{P}{N}}

其中 P = 0.7(可并行部分),1-P = 0.3(串行部分),N = 8

加速比8=10.3+0.78=10.3+0.0875=10.3875≈2.58\text{加速比}_8 = \frac{1}{0.3 + \frac{0.7}{8}} = \frac{1}{0.3 + 0.0875} = \frac{1}{0.3875} \approx 2.58

理论极限(无限个处理器):

加速比∞=10.3≈3.33\text{加速比}_{\infty} = \frac{1}{0.3} \approx 3.33

答案:

  • 8个处理器:加速约2.58倍
  • 理论极限:3.33倍

分析:

  • 30%的串行部分限制了加速比
  • 即使有无限个处理器,最多也只能快3.33倍
  • 这就是为什么要优化串行部分!

最终答案:

  • 8 个处理器:加速比约为 2.58
  • 理论极限:3.33

分析:

  • 占 30% 的串行部分决定了加速比的上限
  • 即使处理器数量无限,程序最多也只能快 3.33 倍
  • 这正是必须优先优化串行部分的原因!

练习 13

解释什么是”冯·诺依曼瓶颈”,以及如何缓解?

冯·诺依曼瓶颈总线带宽哈佛结构

解题思路:

先给出瓶颈的定义,再展示它的两个具体表现,最后列出各种缓解手段及其各自的实现机制。

详细步骤:

冯·诺依曼瓶颈:

定义: 程序指令和数据都存储在同一存储器中,并通过同一总线传输,导致CPU和存储器之间的数据传输成为性能瓶颈。

具体表现:

  1. 总线带宽限制:

    • CPU速度远快于内存
    • 总线成为瓶颈
  2. 指令和数据冲突:

    • 取指令和取数据竞争总线
    • 不能同时进行

缓解方法:

  1. Cache技术:

    • 在CPU和内存间加入高速缓存
    • 减少对主存的访问
  2. 哈佛结构:

    • 指令和数据分开存储
    • 使用独立的总线
    • 可同时取指令和数据
  3. 流水线技术:

    • 指令执行分阶段
    • 多条指令并行执行
  4. 多级存储:

    • 寄存器、L1/L2/L3 Cache、内存、硬盘
    • 平衡速度和容量
  5. 预取技术:

    • 预测将要访问的数据
    • 提前加载到Cache
  6. 增加总线带宽:

    • 更宽的数据总线
    • 更高的总线频率
    • 例如:DDR5比DDR4快

现代解决方案: 现代CPU综合使用以上所有技术,大大缓解了冯·诺依曼瓶颈。

最终答案:

冯·诺依曼瓶颈是指指令和数据共用同一个存储器与同一条总线所引发的争用,以至于决定整体节奏的不是 CPU 本身,而是 CPU 与存储器之间的传送。缓解手段包括 Cache、哈佛式的指令与数据通路分离、流水线、多级存储体系、预取以及更宽或更快的总线——现代处理器正是把这些技术组合起来使用的。

练习 14

某程序原始执行时间为20秒,其中:

  • 访存操作占50%的时间(10秒)
  • 计算操作占50%的时间(10秒)

有两种优化方案:

  • 方案A:优化访存,使访存时间减少60%
  • 方案B:优化计算,使计算时间减少80%

哪个方案效果更好?

阿姆达尔定律加速比瓶颈

解题思路:

分别算出每种方案的新总时间和加速比,再比较各自节省的绝对时间。

详细步骤:

解:

方案A(优化访存):

  • 访存时间:10秒 × 40% = 4秒(节省6秒)
  • 计算时间:10秒(不变)
  • 总时间:4 + 10 = 14秒
  • 加速比:20 / 14 ≈ 1.43

方案B(优化计算):

  • 访存时间:10秒(不变)
  • 计算时间:10秒 × 20% = 2秒(节省8秒)
  • 总时间:10 + 2 = 12秒
  • 加速比:20 / 12 ≈ 1.67

答案:方案B效果更好(快2秒)

分析: 虽然方案A的优化幅度小(60% vs 80%),但因为两部分占比相同(都是50%),所以优化幅度大的方案B效果更好。

结论:

  • 当各部分占比相近时,优化幅度大的效果好
  • 当占比差异大时,优化占比大的部分效果好
  • Make the common case fast!(优化常见情况)

最终答案:

方案 B 的效果更好(快 2 秒)。

分析: 方案 A 采用的比例改进幅度较小(60% 对 80%),但由于两部分所占份额相同(各占 50%),因此改进幅度更大的方案胜出。

结论:

  • 当各部分份额相近时,比例改进幅度更大的方案胜出
  • 当各部分份额相差很大时,优化占比更大的部分胜出
  • 让最常见的情况变快!

练习 15

比较CISC和RISC两种指令集架构的特点。

CISCRISC指令系统

解题思路:

把两种体系结构都看作一组取舍:各有所得也各有所失,最后说明当前业界的做法。

详细步骤:

CISC(Complex Instruction Set Computer,复杂指令集):

特点:

  • 指令数量多(几百条)
  • 指令功能强大(一条指令完成复杂操作)
  • 指令长度不固定
  • 寻址方式多样

优点:

  • 程序代码短
  • 编译器设计简单
  • 兼容性好

缺点:

  • 硬件复杂
  • 指令执行时间不一致
  • 流水线效率低

代表:Intel x86、x86-64

RISC(Reduced Instruction Set Computer,精简指令集):

特点:

  • 指令数量少(几十条)
  • 指令功能简单
  • 指令长度固定
  • 寻址方式简单

优点:

  • 硬件简单
  • 指令执行时间一致
  • 流水线效率高
  • 功耗低

缺点:

  • 程序代码较长
  • 编译器设计复杂

代表:ARM、RISC-V、MIPS

现状: 现代处理器多采用混合设计,外部是CISC(兼容性),内部转换为RISC微操作(性能)。

最终答案:

CISC 以复杂的译码和不均衡的时序为代价,换取较高的代码密度以及对庞大指令集的兼容性;RISC 以代码长度和编译器复杂度为代价,换取简单、统一、对流水线友好的执行。现代设计通过对外提供 CISC 接口、执行 RISC 核心的方式,同时兼取两者的优势。

高级练习(16-20题)

练习 16

一台计算机的配置为:Intel i7-13700K CPU、32GB DDR5内存、1TB NVMe SSD。请分析这台计算机的五大部件分别是什么,并评估其性能。

五大部件Intel Core i7存储器层次

解题思路:

把规格中的每一项对应到五大部件之一,再评价由此构成的机器擅长什么、又在哪些方面存在短板。

详细步骤:

五大部件分析:

  1. 运算器:

    • Intel i7-13700K CPU内部的ALU
    • 16核心(8性能核+8能效核)
    • 每个核心都有独立的ALU
    • 支持AVX-512指令集(高级运算)
  2. 控制器:

    • Intel i7-13700K CPU内部的控制单元
    • 每个核心都有独立的控制器
    • 负责取指令、译码、发出控制信号
    • 支持超线程技术(24线程)
  3. 存储器:

    • 主存:32GB DDR5内存
      • 速度:DDR5-4800或更高
      • 易失性存储
    • Cache:CPU内置
      • L1:约1.25MB
      • L2:约16MB
      • L3:30MB
    • 辅存:1TB NVMe SSD
      • 读写速度:3000-7000MB/s
      • 非易失性存储
  4. 输入设备(配置未列出,常见的有):

    • 键盘、鼠标、麦克风、摄像头
  5. 输出设备(配置未列出,常见的有):

    • 显示器、音箱、打印机

性能评估:

这是一台高性能PC,适合:

  • 游戏(需配独立显卡)
  • 视频编辑
  • 3D渲染
  • 软件开发
  • 多任务处理

优势:

  • CPU性能强(16核24线程)
  • 内存大且快(32GB DDR5)
  • 存储快(NVMe SSD)

可能的瓶颈:

  • 如果用于游戏或3D渲染,需要配独立显卡
  • 对于专业视频编辑,可能需要更大内存(64GB)

最终答案:

CPU 封装同时提供运算器和控制器,32 GB DDR5 内存条与片上 Cache 配合 NVMe SSD 构成存储体系,而未列出的外设将提供输入和输出功能。这台机器是一个强大的通用平台,其限制在于图形处理能力,以及在处理繁重视频任务时的内存容量。

练习 17

为什么说”程序和数据在本质上是相同的”?这个概念有什么实际应用?

存储程序程序与数据自修改代码

解题思路:

用四项共性回答“为什么”,再说明这一思想在哪些地方被有意利用、又在哪些地方演变成安全问题。

详细步骤:

为什么程序和数据本质相同:

  1. 存储形式相同:

    • 程序和数据都以二进制形式存储
    • 都存储在同一个存储器中
    • CPU无法区分某个二进制数是指令还是数据
  2. 可互相转换:

    • 程序可以作为数据被读取、修改
    • 数据可以作为程序被执行
  3. 统一处理:

    • 都可以被加载到内存
    • 都可以被CPU处理
    • 都可以被存储到硬盘

实际应用:

  1. 编译器和解释器:

    • 编译器读取源代码(数据)
    • 生成可执行程序(程序)
    • 源代码既是数据也是程序
  2. 动态加载:

    • 程序运行时加载插件
    • 插件是数据文件,加载后变成程序
  3. 自修改代码:

    • 程序运行时修改自己的指令
    • JIT编译器(Java、JavaScript)
  4. 病毒和安全:

    • 病毒伪装成数据文件
    • 执行后变成恶意程序
    • 这也是为什么不要随便执行未知文件
  5. 虚拟机:

    • 虚拟机把程序当作数据
    • 模拟执行其他平台的程序

哲学意义: 这个概念体现了计算机的通用性——同一台机器可以通过改变存储的内容来执行不同的任务。这是现代计算机革命性的创新!

最终答案:

程序和数据本质上是同一种东西,因为二者都是存放在同一存储器中、由同一个处理单元处理的位模式,因此 CPU 本身无法区分它们。正是这一概念使编译器、JIT 编译、动态加载和虚拟机成为可能——也正是它要求现代操作系统必须把内存区域标记为可执行或不可执行。

练习 18

某公司需要购买服务器,有两个选择:

服务器A:

  • CPU:Intel Xeon,主频3.2GHz,24核
  • 内存:128GB DDR4-3200
  • 价格:$5000

服务器B:

  • CPU:AMD EPYC,主频2.5GHz,48核
  • 内存:256GB DDR4-3200
  • 价格:$8000

公司的主要工作负载:

  • 80%是Web服务(高并发,可并行)
  • 20%是数据分析(部分可并行)

你会推荐哪个?请说明理由。

服务器选型阿姆达尔定律工作负载

解题思路:

先刻画工作负载,再据此衡量两台服务器各自的优势并估算其并行性能,最后才考虑成本因素。

详细步骤:

分析:

工作负载特征:

  • Web服务(80%):高并发,可充分利用多核
  • 数据分析(20%):部分可并行,也需要单核性能

服务器A的优势:

  • 单核性能强(3.2GHz)
  • 价格便宜$3000
  • 适合单线程任务

服务器B的优势:

  • 核心数多(48核 vs 24核)
  • 内存大(256GB vs 128GB)
  • 适合高并发场景

性能估算:

Web服务性能(假设可完全并行):

  • 服务器A:24核 × 3.2GHz = 76.8 GHz·核
  • 服务器B:48核 × 2.5GHz = 120 GHz·核
  • 服务器B快约57%

数据分析性能(假设50%可并行): 根据Amdahl定律,多核优势会打折扣,但服务器B仍有优势

推荐:选择服务器B

理由:

  1. 工作负载匹配:80%是高并发Web服务,充分利用48核
  2. 内存优势:256GB内存对Web服务和数据分析都重要
  3. 未来扩展:业务增长时,多核和大内存更有价值
  4. 性价比:虽然贵$3000,但性能提升超过50%

但如果:

  • 预算紧张:选A
  • 主要是单线程任务:选A
  • 需要最高单核性能:选A

结论:没有绝对的”最好”,要根据实际需求选择!

最终答案:

应选择服务器 B。它与负载相匹配:80% 的流量是高并发的 Web 服务,需要用满全部 48 个核心;256GB 内存既能支撑 Web 层也能支撑分析任务;它为后续增长留出了更大余量;而且虽然价格高出 $3000,性能提升却超过 50%。如果预算紧张、或者工作负载以单线程为主、或者追求最高的单核性能,那么服务器 A 才是更好的选择。这里并不存在绝对意义上的“最优”——只有对既定需求而言更合适的选择。

练习 19

某程序原始性能:执行时间10秒,其中CPU时间8秒,I/O时间2秒。

现在有三种优化方案:

  • 方案A:升级CPU,使CPU时间减少50%
  • 方案B:升级SSD,使I/O时间减少80%
  • 方案C:同时升级CPU和SSD

分别计算三种方案的加速比,并分析哪种方案最划算(假设A和B成本相同)。

阿姆达尔定律CPU执行时间瓶颈

解题思路:

分别算出每种方案的新总时间和加速比,再比较每单位成本带来的收益。

详细步骤:

解:

方案A(升级CPU):

  • CPU时间:8秒 × 50% = 4秒
  • I/O时间:2秒(不变)
  • 总时间:4 + 2 = 6秒
  • 加速比:10 / 6 ≈ 1.67

方案B(升级SSD):

  • CPU时间:8秒(不变)
  • I/O时间:2秒 × 20% = 0.4秒
  • 总时间:8 + 0.4 = 8.4秒
  • 加速比:10 / 8.4 ≈ 1.19

方案C(同时升级):

  • CPU时间:4秒
  • I/O时间:0.4秒
  • 总时间:4.4秒
  • 加速比:10 / 4.4 ≈ 2.27

答案:

  • 方案A:加速1.67倍(最划算)
  • 方案B:加速1.19倍
  • 方案C:加速2.27倍(最快,但成本双倍)

分析:

这是Amdahl定律的实际应用:

  1. 方案A效果最好:

    • CPU时间占80%,是主要瓶颈
    • 优化主要瓶颈效果最明显
    • Make the common case fast!
  2. 方案B效果有限:

    • I/O时间只占20%
    • 即使优化80%,总体提升也有限
  3. 方案C效果最好但成本高:

    • 如果预算充足,这是最佳选择
    • 但性价比不如方案A

结论:

  • 如果预算有限:选方案A
  • 如果追求极致性能:选方案C
  • 方案B不推荐(性价比最低)

启示: 优化性能时,要先找到主要瓶颈,优化占比大的部分效果最好!

最终答案:

  • 方案 A:加速比 1.67(性价比最高)
  • 方案 B:加速比 1.19
  • 方案 C:加速比 2.27(最快,但成本翻倍)

分析: 这就是阿姆达尔定律在实际中的体现。方案 A 的收益最好,因为 CPU 时间占总时间的 80%,是主要瓶颈,而优化主要瓶颈的效果最为明显——让最常见的情况变快!。方案 B 效果有限,因为 I/O 时间只占总时间的 20%,即使该部分改进 80%,对总时间的影响也微乎其微。方案 C 总体最快,但单位收益的成本比方案 A 更差。

结论:

  • 预算有限时:选择方案 A
  • 以绝对性能为目标时:选择方案 C
  • 不推荐方案 B(性价比最差)

启示:优化性能时应先找出主要瓶颈——优化占比最大的部分才能取得最好的效果。

练习 20

设计一个简单的性能测试方案,用于比较两台计算机的整体性能。要求:

  1. 列出需要测试的性能指标
  2. 说明测试方法
  3. 如何综合评估
性能测试基准测试加权评分

解题思路:

把测试方案分为四部分:测试指标、各项的测量方法、结果汇总方式,以及一个按指标设定权重的汇总算例。

详细步骤:

性能测试方案:

一、测试指标

  1. CPU性能:

    • 单核性能
    • 多核性能
    • 浮点运算能力
  2. 内存性能:

    • 读写速度
    • 延迟
    • 带宽
  3. 存储性能:

    • 顺序读写速度
    • 随机读写速度
    • IOPS(每秒I/O操作数)
  4. 图形性能(如果有独显):

    • 3D渲染性能
    • 游戏帧率
  5. 整体性能:

    • 系统响应时间
    • 多任务处理能力

二、测试方法

  1. CPU测试:

    • 工具:Cinebench R23、Geekbench
    • 方法:
      • 单核测试:运行单线程基准测试
      • 多核测试:运行多线程基准测试
      • 记录分数
  2. 内存测试:

    • 工具:AIDA64、MemTest
    • 方法:
      • 测试读写速度
      • 测试延迟
      • 记录带宽
  3. 存储测试:

    • 工具:CrystalDiskMark、AS SSD
    • 方法:
      • 顺序读写测试
      • 4K随机读写测试
      • 记录速度和IOPS
  4. 图形测试:

    • 工具:3DMark、Unigine
    • 方法:
      • 运行标准测试场景
      • 记录帧率和分数
  5. 实际应用测试:

    • 方法:
      • 视频编码:测试编码1GB视频的时间
      • 文件压缩:测试压缩大文件的时间
      • 程序编译:测试编译大项目的时间

三、综合评估

  1. 加权评分:

    • 根据使用场景设定权重
    • 例如:游戏用户,图形性能权重高
    • 例如:开发者,CPU和内存权重高
  2. 性价比计算:

    性价比=综合性能分数价格\text{性价比} = \frac{\text{综合性能分数}}{\text{价格}}
  3. 实际体验:

    • 系统启动时间
    • 应用打开速度
    • 多任务流畅度
  4. 能效比:

    能效比=性能功耗\text{能效比} = \frac{\text{性能}}{\text{功耗}}

四、评估示例

假设两台电脑测试结果:

指标电脑A电脑B权重
CPU单核1500分1800分20%
CPU多核12000分15000分30%
内存速度50GB/s60GB/s15%
存储速度3000MB/s5000MB/s20%
图形性能8000分10000分15%

综合分数计算…

结论: 根据测试结果和使用需求,给出推荐建议。

最终答案:

一份完整的测试方案应当涵盖 CPU、存储器、存储设备、图形性能和端到端响应速度,在相同条件下用标准基准测试工具测量每一项,再通过一个反映预期使用场景的加权分数综合各项结果,并用每美元性能和能效加以校验。最终给出的建议应当说明哪台机器适合哪类负载,而不只是哪台机器的数字更大。

发现内容有问题?

告诉我们哪里需要改进。