任务管理器:性能参数详解
一、电脑的硬件组成
电脑是由多个硬件和软件组件组成的复杂系统,它们协同工作以执行各种任务。电脑的装机配件模拟选择
- 硬件组件:
- 1.1
中央处理器(CPU,Central Processing Unit)
:
功能:用于执行计算机程序中的指令,是电脑的大脑。
类型:制造商(Intel、AMD)、架构(x86、ARM)- 1.2
图形处理器(GPU,Graphics Processing Unit)
:
功能:用于处理图形和图像任务(图形渲染和加速计算)
用途:用途(集成显卡、独立显卡)、产品(RTX、GTX)- 1.3
内存(RAM,Random Access Memory,随机存取存储器)
:
功能:用于存储正在运行的程序和数据,是CPU临时性的快速存储。
类型:容量(GB)、类型(DDR3、DDR4)等。- 1.4
显卡(VRAM,Video Random Access Memory,显存 / 视频内存)
:
功能: 用于存储图形和图像数据,是GPU临时性的快速存储。
类型:容量(GB)、类型(GDDR5、GDDR6)等。- 1.5
存储设备
:
- 存储阵列:存储阵列
- 将多个硬盘驱动器组合在一起,以提供高容量、高性能和/或冗余性。
- 专门设计用于存储和管理大量数据的硬件设备。存储阵列可用于企业级数据中心、服务器和其他需要大容量和可靠性的应用场景。
- 机械硬盘:大容量、较慢的机械存储。
- 固态硬盘:小容量、高速的闪存存储。
- 移动硬盘:机械存储,大型便携,通过USB接口连接到计算机。
- 光盘驱动器:使用光学技术(激光束)来读写数据。包括CD-ROM、DVD-ROM和Blu-ray等
- U盘:闪存存储,小型便携,通过USB接口连接到计算机。
- 1.6
主板
:
功能:连接和协调所有硬件组件,提供电源和数据传输。
包括:CPU插槽、内存插槽、扩展插槽(PCIe)、输入输出端口等。- 1.7
电源供应器
:
功能:提供电能给电脑(所有硬件组件)。
包括:电源单元(PSU)和电源线。- 1.8
机箱
:
功能:容纳和保护电脑内部组件。
类型:台式机箱、小型机箱、游戏机箱等。- 1.9
冷却系统
:
功能:保持硬件温度在可接受范围内。
包括:风扇、散热器、散热片等。- 外部设备
- 2.1
输入设备
:键盘、鼠标、触摸板等。- 2.2
输出设备
:显示器、音响、耳机、打印机、扫描仪、投影仪、摄像头等。- 2.3
性能设备
:声卡、网卡等- 2.4
移动设备
:U盘、移动硬盘等- 软件组件:
- 3.1
操作系统(OS)
:
功能:管理硬件资源,提供用户界面,执行应用程序。
分类:Windows、Mac OS、Linux等。- 3.2
驱动程序
:
功能:使硬件和操作系统之间能够通信。
分类:显卡驱动、打印机驱动等。- 3.3
应用程序
:
功能:执行特定任务,如办公套件、图形设计工具、游戏等。
分类:办公软件、娱乐软件、开发工具等。
二、机械硬盘和固态硬盘
2.1、详细介绍:HDD + SSD
机械硬盘(Hard Disk Drive,HDD)和固态硬盘(Solid State Drive,SSD)是计算机存储设备的两种主要类型。
HDD | SSD | |
---|---|---|
工作原理 | 数据存储在具有磁性涂层的金属盘上,并通过安装在控制器上的磁头采用机械运动来读取或写入 | 使用闪存存储器(有一堆NAND闪存颗粒)来存储数据。数据通过电子访问存储芯片来读取或写入 |
性能 | 较慢的机械存储(机械访问导致较长的读取和写入延迟) | 高速的闪存存储(电子访问具有高速的读取速度与传输速度、更短的访问时间) |
耐久性 | 易损坏(有移动组件(即具有物理运动的组件)。在一定的冲击下会损坏;磁力会导致故障;耗电量较大) | 更耐用(没有移动部件。且在断电时也能保留电荷从而保留数据。) |
容量 | 大容量 | 小容量(上限比HDD低) |
价格 | 便宜 | 更昂贵 |
适用场景 | 适用于大容量存储、成本较低和无需数据快速访问的场景(如数据归档、备份等) | 适用于高性能、快速数据访问和响应时间的应用(如操作系统启动盘、游戏加载、视频编辑等) |
2.2、读写性能
2.2.1、(HDD)读写性能的影响因素:寻道时间 + 旋转延迟 + 数据传输时间
机械硬盘读写性能的影响因素:寻道时间 + 旋转延迟 + 数据传输时间
windows下如何查看磁盘IO性能
2.2.2、(SSD)读写性能的影响因素:读写速度IOPS + 响应时间
读写速度IOPS(关键指标)
:IOPS即每秒的读写次数(单位MB/s、GB/s)。更高的读写速度意味着更快的数据传输。响应时间(Response Time)
: 对读写请求的响应速度,通常以毫秒为单位。低响应时间表示更快的存储系统响应。闪存类型
:SSD 中使用的 NAND 闪存分为不同类型,如 SLC(Single-Level Cell)、MLC(Multi-Level Cell)、TLC(Triple-Level Cell)和 QLC(Quad-Level Cell)。SLC 通常具有更高的性能和更长的寿命,但也更昂贵。接口类型
:SSD 的接口类型包括 SATA、NVMe 和 PCIe。NVMe 和 PCIe 接口提供更高的带宽和更低的延迟。队列深度和并发访问
:支持更深的队列和更高的并发访问的 SSD 能够更好地处理多任务和大量并发请求。温度敏感
:过高或过低的温度可能会影响性能。温度过高还可能导致固态硬盘降低频率以防止过热。TRIM 支持
:用于在固态硬盘上删除无效数据的命令,有助于垃圾回收和提高写入效率。写入次数和寿命
:NAND 闪存有写入次数的限制,不同类型具有不同的寿命和写入次数限制,影响长期使用性能。
三、CPU
中央处理器(CPU)
:是计算机系统中的大脑,负责(根据指令的顺序逐步)执行各种指令来完成计算、逻辑操作、数据处理和控制流程等任务。
CPU结构的简单理解
3.1、CPU - 组成
CPU由运算器、控制器和存储器组成。
运算器(Arithmetic Logic Unit,ALU)
:负责执行算术运算(如加法、减法等)和逻辑运算(如与、或、非等),以及其他数值计算和逻辑操作。控制器(Control Unit,CU)
:负责控制数据流和指令流,以确保程序按照正确的顺序执行。如:从内存中读取数据、执行计算、存储结果等。
- 控制器从内存中读取指令,解码指令并将其发送到适当的部件执行。
存储器(Memory)
:是CPU用于存储数据和指令的地方。
- 存储器包括寄存器、缓存和主存。
寄存器(Register)
:用于存储CPU正在处理的数据和指令。—— 是最快的存储器缓存(Cache)
:用于暂存频繁使用的数据和指令。—— 是位于CPU内部的高速存储器主存(Main Memory)
:用于存储程序和数据。—— 是CPU外部的存储器
3.2、CPU - 性能指标
百度百科:CPU性能参数 (主频 + 外频 + 总线频率 + 倍频系数 + 缓存 + 工作电压 + 制程 + 超线程)
性能饱和:表示当系统的某个组件(如:CPU)达到其最大处理能力时。
3.2.1、容量
CPU容量
:是指CPU的性能和处理能力。如:处理任务的数量和复杂性。CPU容量的大小直接关系到计算机系统的整体性能。
3.2.2、利用率
CPU利用率
: 在一定时间内,CPU用于执行计算任务的时间比例,通常以百分比表示。
公式 = (计算时间 / 总时间) = (1 - 空闲时间 / 总时间)
CPU利用率由两个部分组成:
(1)系统CPU使用率
:表示CPU执行与操作系统相关的任务所花费的时间,例如管理内存、磁盘操作和网络活动。
(2)用户CPU使用率
:表示CPU执行用户的应用程序和进程所花费的时间。
100% CPU利用率
:表示CPU处于执行状态。 —— 达到了安防等级,可能导致CPU损坏或缩短寿命。0% CPU利用率
:表示CPU处于空闲状态。 —— 由于系统CPU使用率的存在,所以是达不到的。
3.3、CPU与多线程的关系
时间片(Time Slice)
:是操作系统分配给每个线程或进程的最小时间单位。
CPU并发执行
:将CPU时间划分为多个时间片,使得多个线程或进程分别在不同的时间片上同时运行,从而实现在一个CPU上并发执行。
时间片的大小
:由操作系统的调度算法和系统配置决定。通常在几毫秒到几十毫秒之间。较小的时间片可以提高系统的响应速度,但可能增加线程切换的频率;反之亦然。线程切换
:当一个线程或进程的时间片用完时,操作系统会强制进行线程切换,即暂停当前执行的线程或进程,并选择下一个可运行的线程或进程分配给 CPU 执行。通过在各个线程之间来回切换,实现了多任务的并发执行。
多线程与CPU利用率的关系
- 当CPU利用率
未达到饱和
时,多线程并行计算可以提高整体性能。- 当CPU利用率
已经饱和
时,继续增加线程将使得整体性能下降,出现 “线程切换” 和 “调度开销” 等问题。
线程切换开销
:从一个正在执行的线程切换到另一个线程的过程。在切换过程中,操作系统需要上下文切换:保存当前线程的上下文信息(寄存器状态、程序计数器等),并加载下一个线程的上下文信息,使得另一个线程可以继续执行。线程调度开销
:由操作系统执行线程调度所需的开销。开销包括 (选择合适的调度算法)决定下一个要执行的线程、管理线程队列等操作。在多线程应用中尤为显著,尤其是在高并发、线程数量众多的情况下。为了最大化性能,需要进行合理的线程管理。
(1)减小线程数量
(2)减少线程切换频率:时间片用完、适当的线程数量、线程主动让出CPU(time.sleep())、阻塞和唤醒、I/O操作
(3)使用线程池:使用 ThreadPoolExecutor 类创建线程池。可以指定线程池的大小,决定可以同时执行的线程数量。
举例说明
- 已知:若指定线程数为40,其中前25个线程的CPU利用率已经达到100%。
- 计算:前25个线程在饱和状态下争夺有限的CPU资源,而后15个线程需要等待前面的线程释放资源,故后15个线程的每个线程的执行时间较长。
四、GPU
4.1、入门知识
4.1.1、显卡 —— 是安装 GPU 的硬件设备
显卡(Graphics Card,显示适配器,Graphics Processing Unit Card,图形处理单元卡)
:是一块插在计算机主板上的扩展卡,用于输出图形信号并控制显示器的显示。
- 组成部分:显卡核心(GPU),显存、电路板(PCB)、金手指、供电 & 显示接口、以及散热器其他相关硬件。
【显卡科普】小白必看的入门显卡科普,关于显卡的原理、结构、作用
4.1.2、GPU —— 是一种专用于图形或图像计算的处理器
GPU(Graphics Processing Unit,图形处理单元)
:是一种专用于处理图形和图像相关计算的处理器。如:渲染、图像处理、计算机视觉等。
- GPU 具有大量的并行处理单元(CUDA cores 或 stream processors),这使得它们在执行大规模并行计算任务时具有显著的优势。
- GPU是图像处理芯片,因为GPU功耗很高、背面电流过大,都是焊接在显卡上。
独立显卡
:将GPU焊在显卡的电路板上。集成显卡
:将GPU和CPU集成在一起。- CPU是主板上的一块芯片。GPU是显卡上的一块芯片。
4.1.3、显存 —— 是显卡上的一种专用 GPU 内存。
显存(Graphics Memory)
:显存是显卡上的一种专用内存,用于存储图形数据、纹理、帧缓冲区等与图形处理相关的数据。
- 显存的容量决定了显卡可以处理的图形数据大小和复杂度,通常用于存储图像、纹理、帧缓冲区和其他与图形渲染相关的数据。
4.1.4、CUDA —— 用于在 GPU 上进行并行计算的编程模型
CUDA(Compute Unified Device Architecture,统一计算设备架构)
:是 NVIDIA 公司开发的,用于在 NVIDIA GPU 上进行通用计算的,一种并行计算平台和编程模型。
- CUDA 提供了一组 API 和工具,使程序员能够利用 GPU 的并行计算能力进行加速计算。CUDA 程序可以使用 C、C++、Python 等编程语言编写,并通过 NVIDIA 提供的 CUDA 编译器进行编译和优化。
- 使用 CUDA 编程,程序员可以直接操作 GPU 上的数据和执行核心,并利用 CUDA 提供的并行计算模式和优化技术实现高性能的并行计算任务。
4.2、GPU内存 —— 专用 GPU 内存 + 共享 GPU 内存
- 专用GPU内存(显存):详见上述。
- 共享GPU内存:是 win10 系统从主存中专门为 GPU 划分的内存。当显存不够使用时,超出部分将转移到共享GPU内存(即主存)中,以防止程序奔溃,但速度会明显减慢。
在使用多进程时:
(1)若迭代任务 A 的整体耗时(小于)内部每个操作的耗时之和,则多进程可以加速整个迭代过程。
(2)若迭代任务 A 的整体耗时(大于)内部每个操作的耗时之和,则多进程会增加额外的开销。此时的多进程相当于串联执行。
4.3、GPU计算流程(代码实现)
(1)将数据从主机内存(CPU)传输到设备内存(GPU)。
(2)在 GPU 上执行并行计算任务。
(3)将计算结果从设备内存传输回主机内存。
import torch
# (1)数据准备:创建两个张量,并将它们移动到 GPU 中
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x = torch.tensor([1, 2, 3]).to(device)
y = torch.tensor([4, 5, 6]).to(device)
# (2)并行计算:在 GPU 上执行向量加法
result = x + y
# (3)数据传输:将计算结果从 GPU 传输回 CPU
result_cpu = result.cpu().numpy()
print("Result:", result_cpu) # Result: [5 7 9]
4.3、GPU计算流程(异步计算 + 同步计算)
GPU函数的启动方式是异步计算:
- 异步计算:CPU不会等待GPU函数执行完毕后,才执行下一行代码。
- 同步计算:在调用的GPU函数后面添加
torch.cuda.synchronize()
—— 表示CPU需要等待GPU函数执行完毕后再计算。
import torch
import time
def async_example(x, y):
# 异步计算:在 GPU 上执行矩阵相乘
start_time = time.time()
result = torch.matmul(x, y)
end_time = time.time()
execution_time = end_time - start_time
print(f"同步计算执行时间:{execution_time: .4}", )
def sync_example(x, y):
# 同步计算:在 GPU 上执行矩阵相乘,并等待计算完成
start_time = time.time()
result = torch.matmul(x, y)
torch.cuda.synchronize() # 同步计算
end_time = time.time()
execution_time = end_time - start_time
print(f"同步计算执行时间:{execution_time: .4}", )
if __name__ == "__main__":
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
num = 20000
x = torch.randn(num, num).to(device)
y = torch.randn(num, num).to(device)
sync_example(x, y) # 执行同步计算示例
async_example(x, y) # 执行异步计算示例
"""
同步计算执行时间: 2.392 此时,计算完成,统计的是当前函数所需要完成的计算时间。
同步计算执行时间: 0.0 此时,计算未完成,相当于并没有统计计算时间,直接跳过。
"""