Bootstrap

电脑硬件性能:HDD + SSD + CPU + GPU

任务管理器:性能参数详解

2023英伟达显卡排名天梯图(已更新)

一、电脑的硬件组成

电脑是由多个硬件和软件组件组成的复杂系统,它们协同工作以执行各种任务。电脑的装机配件模拟选择

电脑的硬件组成(图解)

  • 硬件组件:
  • 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)是计算机存储设备的两种主要类型。
在这里插入图片描述

HDDSSD
工作原理数据存储在具有磁性涂层的金属盘上,并通过安装在控制器上的磁头采用机械运动来读取或写入使用闪存存储器(有一堆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利用率在一定时间内,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计算流程(代码实现)

numba.cuda的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       此时,计算未完成,相当于并没有统计计算时间,直接跳过。
"""
;