计算机架构:漫游CPU的奥秘世界(二)

简介: 计算机架构:漫游CPU的奥秘世界

计算机架构:漫游CPU的奥秘世界(一)https://developer.aliyun.com/article/1464278


三、哈佛架构(Harvard Architecture)

3.1 哈佛架构的原理(Principles)

哈佛架构是一种计算机架构模型,它与冯诺依曼架构一样,旨在提高计算机系统的执行效率。然而,哈佛架构与冯诺依曼架构最大的不同在于其存储器的设计。在哈佛架构中,程序存储器和数据存储器分为两个独立的物理存储空间,它们分别用于存储指令和数据。

该设计的主要优点是它能解决冯诺依曼架构中存储器瓶颈的问题(即 CPU 同时读取指令和数据时由于存储器的限制造成的性能下降)。由于指令和数据是在两个独立的存储器系统中进行操作,因此,处理器可以同时读取指令并访问数据,进而缩短执行时间,提高系统性能。

哈佛架构主要应用于具有专用目的的计算机系统,尤其是嵌入式系统。此类系统的特点是资源有限,但对实时性能要求较高,因此必须采用优化的设计来提高性能。由于哈佛架构能降低存储器瓶颈问题,因此广泛应用于此类场景。

3.2 基本组成和工作流程(Structure and Workflow)

哈佛架构的计算机系统主要由五个部分组成:输入设备、输出设备、中央处理单元(CPU)、数据存储器、指令存储器和总线。

3.2.1 输入设备

输入设备负责将用户或外部环境的数据输入到计算机系统中。常见的输入设备包括键盘、鼠标、触摸屏、扫描仪等。

3.2.2 输出设备

输出设备将计算机系统处理后的结果展示给用户或发送给外部设备。常见的输出设备有显示器、打印机、投影仪等。

3.2.3 中央处理单元(CPU)

中央处理单元(CPU)是计算机系统中负责执行指令、处理数据和控制其他组件的核心部分。CPU 包括两个关键组件:算术逻辑单元(ALU)和控制单元(CU)。ALU 负责执行算术和逻辑运算,而 CU 则负责指令的解码和执行。

3.2.4 数据存储器和指令存储器

与冯诺依曼架构不同的是,哈佛架构将数据存储器和指令存储器分开。这意味着数据和指令分别存储在不同的物理内存中。这种设计能够提高计算机的运行速度,因为 CPU 可同时从指令存储器获取指令并从数据存储器读取或写入数据。

3.2.5 总线

哈佛架构的计算机系统中包含两种总线:数据总线和指令总线。数据总线用于在 CPU、数据存储器和输入/输出设备之间传输数据,而指令总线则用于在 CPU 和指令存储器之间传输指令。这种独立的总线设计同样有助于提高计算机的运行性能。

工作流程

在哈佛架构中,CPU 从指令存储器获取指令,解码并执行。在执行过程中,CPU 可以同时从数据存储器读取或写入数据,而不会干扰指令的获取。这种指令和数据并行访问的方式显著提高了计算机的运行速度。

3.3 哈佛架构的优缺点(Pros and Cons)

哈佛架构在计算机系统中采用了独立的指令存储器和数据存储器,相较于冯诺依曼架构具有一定的优缺点。

优点(Pros)

  1. 并行读取:由于指令存储器和数据存储器相互独立,CPU 可以同时从指令存储器和数据存储器中读取数据,提高了计算机系统的执行速度和吞吐量。
  2. 独立带宽:指令存储器和数据存储器各自拥有独立的地址、数据总线和控制信号,因此不会在使用过程中相互干扰,实现了并行访问。
  3. 安全性提高:指令存储器和数据存储器的独立性使得计算机系统更易于维护和修改,同时可以有效防止执行过程中的非法数据访问和修改。

缺点(Cons)

  1. 成本增加:哈佛架构需要更多的硬件资源(如总线、存储器等),这将增加计算机系统的成本。
  2. 不便于存储器共享:由于指令存储器和数据存储器独立,不同存储器之间的数据传递需要额外的数据传输机制,增加了设计复杂度。
  3. 编程困难:与冯诺依曼架构相比,哈佛架构在编程时需要考虑不同存储器的访问和使用策略,使编程变得更为复杂。

总的来说,哈佛架构与冯诺依曼架构各有优点及缺点,适用于不同的应用场景。在实际应用中,改进型哈佛架构等混合架构会结合这两种架构的优点,以求在性能和易用性方面达到平衡。

四、改进型哈佛架构(Modified Harvard Architecture)

4.1 改进型哈佛架构的原理(Principles)

改进型哈佛架构(Modified Harvard Architecture)在原始哈佛架构的基础上进行了改进,旨在克服哈佛架构的一些局限性。在这种架构中,指令和数据虽然在逻辑上是分开存储和操作的,但它们在物理层次上可以共享同一个存储器。为了实现这一目标,改进型哈佛架构采用了高速缓存(Cache)、存储器层次结构和其他技术进行优化。

在改进型哈佛架构中,通过引入高速缓存来实现指令和数据之间的快速切换。这使得该架构不仅能保持哈佛架构的并行优势,还能增加系统的灵活性和可编程性。

其中的关键技术有:

  1. 高速缓存(Cache):Cache 是一种位于 CPU 和主存储器之间的小型、高速存储设备,它存储了频繁使用的数据和指令。通过缓存的引入,改进型哈佛架构可以在物理层面减少同时访问指令和数据时的冲突。
  2. 存储器层次结构:存储器层次结构是一种通过多级存储器(如高速缓存、主存储器、磁盘存储器等)来优化系统资源利用的技术。通过调整存储器的速度、容量和位置,可以根据不同应用场景进行动态优化。

接下来我们将详细介绍存储器层次结构与高速缓存,以及指令流水线与超标量处理。

4.2 存储器层次结构与高速缓存(Memory Hierarchy and Cache)

在改进型哈佛架构中,存储器采用了层次结构以平衡性能和成本。根据存储器的速度、容量和距离CPU的远近,存储器被划分为不同的层级。一般而言,存储器层次结构从顶至底依次为:寄存器、高速缓存(Cache)、主存和辅助存储。

高速缓存(Cache)在改进型哈佛架构中具有重要作用,能显著提高计算机系统性能。高速缓存根据接近CPU的程度分为多级,常见的有L1高速缓存、L2高速缓存和L3高速缓存等。其中,L1 高速缓存是最接近 CPU 的缓存,通常已集成在处理器内,具有较高的访问速度,但容量较小。L2和L3高速缓存相对较远,访问速度略慢,但容量较大。

在改进型哈佛架构中,为了进一步提高指令与数据的并行处理能力,高速缓存也都被分为两部分,即指令缓存和数据缓存,它们分别用于存储指令和数据以实现指令与数据的并行访问。这可以有效缓解存储器的访问延迟,提高整个计算机系统的性能。

高速缓存采取多种替换策略,如最近最少使用(LRU)算法、先进先出(FIFO)算法等,以确保更加频繁访问的数据能保留在高速缓存中,从而提高缓存命中率。同时,高速缓存也会采用预取(prefetching)技术,提前将可能需要的数据从主存读取到缓存中,以减少访存的延迟。

4.3 指令流水线与超标量处理(Instruction Pipelining and Superscalar Processing)

4.3.1 指令流水线(Instruction Pipelining)

指令流水线是一种计算机领域的技术,用于提高 CPU 的执行效率。在指令流水线中,指令执行过程被划分为多个步骤,这些步骤在处理器上并行处理。每个步骤由特定的硬件实现,并在相邻步骤之间传递结果。这样,处理器可以同时处理多条指令,从而降低指令执行的总时间。

举一个简化的指令流水线过程示例,可以将指令执行划分为以下步骤:

  1. 从指令存储器中取指令;
  2. 指令解码;
  3. 从数据存储器中读取操作数;
  4. 执行指令;
  5. 将结果写回数据存储器。

通过将这些步骤分开并行处理,不同指令可以同时在不同阶段执行,大大提高了处理器的性能。

4.3.2 超标量处理(Superscalar Processing)

超标量处理是指同时执行多条指令的一种处理器设计方法。一个超标量处理器能在一个时钟周期内发射和执行多条指令。与指令流水线相结合,超标量处理允许处理器在同一时间内完成更多的工作。

在超标量处理中,处理器可以并行地执行多个动作,如获取、解码、执行、访问内存等。处理器内部的多个功能部件会<algorithm></strategy>将指令分组为独立并行的子集,从而允许每个部件在同一时钟周期内处理一条或多条指令。

要实现超标量处理,处理器需要具备以下功能:

  1. 对多条指令进行并行的读取和解码。
  2. 快速识别指令之间的依赖关系。
  3. 为独立并行执行的指令动态分配处理器资源。
  4. 在每个时钟周期内执行多个指令。

指令流水线和超标量处理技术对现代计算机性能的提升起到了关键性的作用。它们使得改进型哈佛架构成为高性能计算机系统中处理器设计的主要选择。

五、多核与并行计算(Multicore and Parallel Computing)

5.1 多核处理器架构(Multicore Processor Architecture)

多核处理器架构指的是在一个单一的处理器芯片中集成多个处理器核心(Core),从而提供更强大的计算能力。每个处理器核心都可以独立地执行指令流,使得多个任务能够同时进行,提高了系统的整体性能。

多核处理器架构具有以下特点:

  1. 降低功耗:多核处理器通过在较低的时钟频率下运行多个独立的处理器核心,实现相对较低的功耗和热设计功耗(TDP)。
  2. 提高性能:多核处理器在面对多任务环境和可并行任务时可以大幅提高性能。系统可以在不同的核心中分配不同的任务或子任务,实现任务间或任务内的并行处理。
  3. 共享资源:多核处理器中的各个核心可以共享一定程度的资源,例如高速缓存(Cache)和内存控制器等,降低了成本并提高了资源利用率。

多核处理器常见于现代消费类计算机系统,例如台式机、笔记本、服务器等。

5.2 并行计算模型与编程(Parallel Computing Models and Programming)

并行计算是指在计算机系统中,同时执行多个计算任务以提高计算速度和处理能力。随着多核处理器和分布式计算技术的发展,有效地利用并行计算已经成为提高软件性能的关键。为了实现并行计算,我们需要理解并行计算模型和编程技巧。

5.2.1 并行计算模型

并行计算模型为程序员提供了一个抽象层次,用以描述如何在硬件上分配计算任务和管理进程间的通信。以下是一些常见的并行计算模型:

  1. 数据并行(Data Parallelism):数据并行模型关注于如何将数据集分解成较小的部分,以便于各个计算任务(通常是相同的操作)可以并行地应用于这些部分。这种模型在多核处理器和 SIMD 指令集中广泛应用。
  2. 任务并行(Task Parallelism):任务并行模型关注于将一个问题的不同子任务分配给多个并发执行单元。这种模型在多线程编程和分布式计算等领域得到了广泛应用。
  3. 流水线并行(Pipeline Parallelism):流水线并行模型从生产过程的流水线概念中获得灵感,可将一个问题的不同阶段分配给不同的执行单元。当每个单元处理完当前阶段任务后,将结果传递给下一个单元,同时处理下一个任务的当前阶段,从而实现并行。
  4. 分布式内存模型(Distributed Memory Model):分布式内存模型中,各个计算节点拥有独立的内存和处理器,节点之间通过消息传递方式互相通信。这种模型极度适用于大规模并行计算,例如,在计算机集群和超级计算机中实现并行。

5.2.2 编程技巧与并行计算框架

为了解决并行计算中涉及的底层细节,程序员可以使用不同的编程方法、库和框架实现有效的并行代码。以下是一些常见的并行计算库和框架:

  1. OpenMP(Open Multi-Processing):OpenMP 是一种基于共享内存并行计算的编程接口,允许在C/C++和Fortran代码中插入指令,以适应多核处理器的并行计算需求。
  2. MPI(Message Passing Interface):MPI 提供了一套通信接口和协议,用于在分布式内存系统中实现进程间通信。MPI 提供了多种点对点和集体通信操作,支持任务并行编程模型。
  3. CUDA(Compute Unified Device Architecture):CUDA 是一种并行计算平台和编程模型,专门针对 NVIDIA 的图形处理器(GPU),用于将计算任务分配给 GPU 的并行处理单元上运行。
  4. OpenCL(Open Computing Language):OpenCL 是一种基于 C 语言的循环库,用于编写可以在穿梭多种平台的设备上运行的并行程序,可用于处理器、图形处理器等硬件设备上实现并行计算。

为了编写高效的并行代码,开发人员需关注以下几点:正确地分解任务以平衡计算负载、有效地管理并行线程或进程、减少数据冲突以及降低通信成本。利用已有的通用框架能减轻并行编程的复杂性。

5.3 针对并行计算的优化技术(Optimization Techniques for Parallel Computing)

为了充分利用多核处理器的并行计算能力,一些优化技术在软件开发过程中被广泛应用。这些优化技术可以帮助开发者更好地处理当一个程序被多个处理器同时执行时可能遇到的问题,并提高程序的执行速度。

  1. 负载均衡(Load Balancing):负载均衡是一种确保处理器在工作时保持均衡负载的策略。负载均衡有助于实现高效的并行执行,因为在多核处理器中,当某一个处理器上的任务耗时过长而其他处理器空闲时,整体效率会受到影响。通过均衡地分配任务给每个处理器,负载均衡可以避免这种情况。
  2. 数据并行(Data Parallelism):数据并行是一种并行计算模型,其中相同的操作会应用于数据的不同部分。数据并行允许多个处理器同时处理同一段数据,从而提高处理速度。例如,矩阵运算、图像处理等运算密集型任务适用于数据并行。
  3. 任务并行(Task Parallelism):任务并行是一种并行计算模型,其中不同的处理器执行不同的任务。任务并行允许多个处理器同时执行多个任务,从而更好地利用多核处理器的性能。任务并行尤其适用于那些涉及多个独立功能模块的复杂数字系统。
  4. 并行循环(Parallel Loops):在很多情况下,应用程序可能需要执行大量的相互独立的迭代操作。在这种情况下,可以考虑将循环操作并行化,让多个处理器同时执行循环中的不同迭代。这种技术可以显著提高程序的执行速度。
  5. 通信和同步(Communication and Synchronization):在多核处理器环境中,处理器之间的通信和同步至关重要。通过设计高效的通信和同步策略,可以确保并行执行的正确性并提高处理器利用率。然而,过度的同步可能导致性能下降,因此需要在同步和性能之间找到平衡。

在应用这些优化技巧时,开发者需要评估不同技术对应用性能的潜在提升,并根据应用的特点选择合适的技术。这些技术通常需要在algorithm设计、数据结构选择以及并行计算编程模型中进行综合运用。

六、计算机架构的未来发展(Future Developments in Computer Architecture)

6.1 新型存储技术(Emerging Memory Technologies)

随着计算机技术的不断发展,存储技术也在不断进步。为了满足性能需求和低功耗要求,现代计算机系统需要采用新型存储技术。以下几种存储技术正在改变计算机架构的未来:

  1. 非易失性存储器(Non-volatile Memory, NVM):与传统的易失性存储器(如DRAM)相比,非易失性存储器在断电后仍能保持数据。常见的非易失性存储器包括闪存(如 NAND Flash)、磁阻存储器(Magnetic Random Access Memory, MRAM)、相变存储器(Phase Change Memory, PCM)等。由于非易失性存储器能实现数据的长期保存,将非易失性存储器与易失性存储器(如DRAM)结合使用,可以创建具有更快速度、更低能耗和更高容量的存储系统。
  2. 3D存储技术:3D存储技术通过垂直堆叠存储器单元,在有限的物理空间中实现更大的存储容量。例如,3D NAND技术通过多层的垂直堆叠,提高了闪存的存储密度,降低了成本。类似地,3D印刷电路板(Printed Circuit Boards, PCBs)可以在有限空间内集成更多的存储组件。
  3. 新型存储类存储器(Storage Class Memory, SCM):存储类存储器介于传统的内存(如DRAM)和存储(如硬盘、固态硬盘)之间,具有较高的速度和非易失性数据存储特性。例如英特尔的3D XPoint技术,它旨在提供高性能、高速度、高存储密度,但能耗更低的存储解决方案。这种存储器技术有望在计算机架构发展中发挥重要作用。

随着这些新型存储技术的不断发展和推广,计算机架构将迈向一个更加高效、快速、低能耗的未来。

6.2 光计算与量子计算(Optical Computing and Quantum Computing)

6.2.1 光计算(Optical Computing)

光计算是一种利用光子(而非电子)传输和处理信息的技术。与传统的基于电子的计算机架构相比,光计算具有更高的数据传输速率、更低的能耗以及更高的带宽等优势。光计算技术主要包括光交换、光存储、光逻辑运算等方面。

光计算技术的关键组件是光子器件,例如光开关、光平面波导、光存储器等。实现光计算的难点在于光子与光子之间不能直接发生作用,因此需要借助其他方法来实现光子的操作与传输。

光计算目前还处在研究和实验阶段。随着光子器件的研究取得突破和新材料的开发,光计算技术有望在未来的计算机组织结构中发挥重要作用。

6.2.2 量子计算(Quantum Computing)

量子计算是一种基于量子力学原理进行信息处理的技术。与传统的基于比特的计算机架构相比,量子计算使用量子比特(qubit)作为基本信息单位。每个量子比特可以同时处于0和1的叠加态,这使得量子计算能够实现极高的计算速度,并能够处理在传统计算机上难以解决的复杂问题。

量子计算的关键组件是量子门和量子纠缠,实现量子计算的难点在于保持量子比特的相干态和减少失真。目前,业界已经实现了一些小规模的量子计算原型,但量子计算在实际应用中仍面临一系列挑战。随着量子计算技术的孵化和量子门、量子比特的研究取得突破,量子计算是计算机架构未来的发展方向之一。

6.3 人工智能与神经处理器(Artificial Intelligence and Neural Processors)

随着人工智能(AI)技术的快速发展,计算机架构也在逐步演进以满足这些应用的特殊需求。神经处理器是一种专门针对人工智能应用和深度学习领域能够提供高效性能的处理器。

神经处理器的设计和传统处理器有显著不同,它们主要聚焦于以下方面:

  1. 并行处理能力:深度学习和其他AI应用通常涉及大量的矩阵和向量运算。神经处理器被设计成能并行处理这些运算,从而大大提高计算效率。
  2. 低精度计算:相对于传统的高精度计算,神经处理器通常采用低精度数据表示(例如 8 位或 16 位浮点数)。这种表示方法可以降低存储需求和运算复杂度,同时,在许多AI应用场景中,低精度计算已经足够满足需求。
  3. 高能效比:由于AI应用中的计算负载极大,神经处理器需要有高能效比以降低功耗和散热问题。神经处理器利用了多种硬件和软件优化技术,以降低能量消耗,提高计算能效。

神经处理器的应用领域广泛,包括云计算、边缘设备、自动驾驶汽车等。许多业界巨头,如 NVIDIA, Google, Apple 等,都投入了大量资源研发神经处理器。从传统的图形处理单位向用于深度学习的专用加速器发展,神经处理器的技术不断演进,为计算机架构的未来发展提供了新的可能。

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
存储 缓存 人工智能
计算机的CPU
计算机的CPU
21 1
|
1天前
|
存储 算法 Linux
【计算机操作系统】深入探究CPU,PCB和进程工作原理
【计算机操作系统】深入探究CPU,PCB和进程工作原理
|
2月前
|
存储 人工智能 缓存
计算机架构:漫游CPU的奥秘世界(一)
计算机架构:漫游CPU的奥秘世界
62 0
|
3月前
|
存储 缓存 Linux
CPU高速缓存架构
CPU高速缓存架构
|
4天前
|
Linux
Linux rsyslog占用内存CPU过高解决办法
该文档描述了`rsyslog`占用内存过高的问题及其解决方案。
24 4
|
27天前
|
移动开发 运维 监控
掌握Linux运维利器:查看CPU和内存占用,轻松解决性能问题!
掌握Linux运维利器:查看CPU和内存占用,轻松解决性能问题!
|
28天前
|
监控 Python
【python】实现cpu/内存监控的功能(非常简单)
【python】实现cpu/内存监控的功能(非常简单)
|
29天前
|
Linux
Linux 查看进程PID和线程CPU和内存占用情况
Linux 查看进程PID和线程CPU和内存占用情况
22 0
|
2月前
|
运维 监控 网络协议
JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC
JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC
62 0
|
2月前
|
JSON Java Serverless
nacos常见问题之cpu和内存占用高如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
211 0