`

CPU学习

阅读更多
这是作者学习硬件基本知识过程中的笔记,由于以前很少接触这方面的知识,又缺乏系统
的学习,难免会出现错误,希望得到大家指正。
一、Intel CPU的主要部件:

1. CPU内核:

是真正意义上的处理器,用于执行指令和处理数据,其计算能力与CPU的速度密切相关。

2. L1 Cache

CPU内部集成的L1 Cache(一级高速缓存),又被称为主缓存,用于暂存部分指令和数据。它和
CPU同频运行,是所有Cache中速度最快的。它一般由SRAM组成,造价昂贵而且结构复杂,由于
CPU体积有限,所以L1 Cache的容量一般不会太大。CPU的L1 Cache又分为D-Cache(Data Cache,
数据高速缓存)和ICache(Instruction Cache,指令高速缓存)。这种双路高速缓存架构减少
了争用高速缓存所造成的冲突,有效提高处理器性能。不过Pentium 4处理器放弃了ICache而采
用了更高效的T-Cache(Trace Cache)。

3. L2 Cache

即二级高速缓存。高速缓存器,提供CPU计算所需的指令和数据。通常由三个部件组成:L2 Cache
Controller、Cache SRAM和Cache tag RAM。分别用作控制器、存储器和缓存检索表。
由于L1 Cache 的成本昂贵,所以CPU内部集成了L2 Cache 以弥补L1Cache 较小的容量。L2 Cache
一般选用SDRAM。目前CPU内部集成的L2 Cache,英文叫On-die,一般都是L1 Cache的两倍或者是四
倍,甚至更多。在早期,二级缓存芯片多是放置在主板上,英文叫On-board,而不是集成在CPU内部的。

4. BSB (Backside Bus):

通常称之为后端总线。互连CPU内核和二级缓存的总线。主要负责向CPU提供L2 Cache所存储的指令
和数据。BSB提供了66MHz、半速、全速三种速度。BSB速度决定了CPU访问Cache的速度。由于CPU所
需的指令和数据主要来自于L2 Cache,所以BSB速度对系统性能有非常重要的影响。

5. FSB (Frontside Bus):
即通常所说的前端总线。互连CPU和主板芯片组的总线,一般用于互连CPU和内存控制器。
FSB的速度即是通常所说的外频。FSB速度的高低影响CPU对主内存的存取。

二、相关名词:

外频:

CPU访问内存的带宽。

Cache Line:

The smallest unit of memory than can be transferred between the main memory and the cache.
Rather than reading a single word or byte from main memory at a time, each cache entry is
usually holds a certain number of words, known as a "cache line" or "cache block" and a
whole line is read and cached at once. This takes advantage of the principle of locality
of reference: if one location is read then nearby locations (particularly following locations)
are likely to be read soon afterwards. It can also take advantage of page-mode DRAM which
allows faster access to consecutive locations.

主存和cache之间数据传输的最小单位。每次CPU访问内存时,以Cache Line为单位,请求一个或多
个Cache Line。Intel的P5和P6类CPU来说,一个Cache Line由32字节的数据或指令组成,也就是一
个Cache Line共256位,当CPU向L2 Cache请求1个Cache Line时,那么将从BSB上向CPU传输256位数
据或指令,如果BSB为64位宽,那么至少要分4次传输,如果每次传输能在1个Clock内完成,则传完
一个Cache Line至少需要4个Clock;若BSB数据宽度为256位,则只需在1个Clock内完成。

write through:

A cache architecture in which data is written to main memory at the same time as it is cached.

write back:

A cache architecture in which data is only written to main memory when it is forced out of the cache.

ATC:

Intel的一种BSB总线技术,称为Advanced Transfer Cache简称ATC。

MIPS:

MIPS(Million Instructions per Second)是处理器每秒中能执行几百万条指令的表示单位。这是
一种过时的而且不科学的衡量处理器速度与性能的度量单位。


SSE

SSE 指令集是Intel 为其Pentium Ⅲ系列处理器所开发指令集,它包括8条连续数据块传输内存优
化指令、12条MMX整数运算增强指令和50条SIMD浮点运算指令。这些指令能够强化系统对图形、视
频和音频的处理。SSE2 比起上一代增加了144条指令。


ALU

ALU(Arithmetic Logic Unit,算术逻辑单元)是CPU内部处理所有数据的部分,用来进行数学逻辑运算。

FPU

FPU(Floating-Point Unit,浮点运算单元)是目前专门进行浮点运算的单元。在Intel 80486 之前,
FPU作为一块特殊设计的独立芯片插装在主板上。它曾被称作数字协同处理器或浮点运算处理器。
在Intel 80486 之后,CPU一般都内置了FPU。

MMU

MMU(Memory Management Unit,存储器管理单元)是用来管理虚拟内存的系统组件。MMU 通常是CPU
的一部分,本身有少量的存储空间用来存放从虚拟地址到物理地址的匹配表TLB(Translation Look-aside
Buffer,或叫交叉转换表)。所有数据请求都送往MMU,由它来确定数据是在RAM内还是大容量存储设备内。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yayong/archive/2005/04/17/351514.aspx

一、Cache Coherence

在2004年写的一篇文章X86汇编语言学习手记(1)中,曾经涉及到gcc编译的代码默认16字节
栈对齐的问题。之所以这样做,主要是性能优化方面的考虑。

大多数现代CPU都One-die了L1和L2Cache。对于L1 Cache,大多是write though的;L2 Cache
则是write back的,不会立即写回memory,这就会导致Cache和Memory的内容的不一致;另外,
对于MP(Multi Processors)的环境,由于Cache是CPU私有的,不同CPU的Cache的内容也存在
不一致的问题,因此很多MP的的计算架构,不论是ccNUMA还是SMP都实现了Cache Coherence
的机制,即不同CPU的Cache一致性机制。


Cache Coherence的一种实现是通过Cache-snooping协议,每个CPU通过对Bus的Snoop实现对
其它CPU读写Cache的监控:

首先,Cache line是Cache和Memory之间数据传输的最小单元。

1. 当CPU1要写Cache时,其它CPU就会检查自己Cache中对应的Cache line,如果是dirty的,
就write back到Memory,并且会将CPU1的相关Cache line刷新;如果不是dirty的,就Invalidate
该Cache line.

2. 当CPU1要读Cache时,其它CPU就会将自己Cache中对应的Cache line中标记为dirty的部分
write back到Memory,并且会将CPU1的相关Cache line刷新。

所以,提高CPU的Cache hit rate,减少Cache和Memory之间的数据传输,将会提高系统的性能。

因此,在程序和二进制对象的内存分配中保持Cache line aligned就十分重要,如果不保证
Cache line对齐,出现多个CPU中并行运行的进程或者线程同时读写同一个Cache line的情况
的概率就会很大。这时CPU的Cache和Memory之间会反复出现Write back和Refresh情况,这种
情形就叫做Cache thrashing。

为了有效的避免Cache thrashing,通常有以下两种途径:

1. 对于Heap的分配,很多系统在malloc调用中实现了强制的alignment.
2. 对于Stack的分配,很多编译器提供了Stack aligned的选项。

当然,如果在编译器指定了Stack aligned,程序的尺寸将会变大,会占用更多的内存。因此,
这中间的取舍需要仔细考虑,下面是我在google上搜索到的一段讨论:

One of our customers complained about the additional code generated to
maintain the stack aligned to 16-byte boundaries, and suggested us to
default to the minimum alignment when optimizing for code size. This
has the caveat that, when you link code optimized for size with code
optimized for speed, if a function optimized for size calls a
performance-critical function with the stack misaligned, the
performance-critical function may perform poorly.


二、gcc的对齐参数

-mpreferred-stack-boundary在X86汇编语言学习手记(1)中已经提及,另外,在google上还搜
索到了一个关于栈对齐讨论的邮件,与大家分享:


----- Original Message -----
From: "Andreas Jaeger"
To: gcc@gcc.gnu.org
Cc: "Jens Wallner" wallner@ims.uni-hannover.de
Sent: Saturday, February 03, 2001 2:37 AM
Subject: Question about -mpreferred-stack-boundary


>
> We (glibc team) got a bug report that the stack is not aligned
> properly - and I'm a bit confused by the documentation of
> -mpreferred-stack-boundary which is:
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> @item -mpreferred-stack-boundary=@var{num}
> Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
> byte boundary. If @samp{-mpreferred-stack-boundary} is not specified,
> the default is 4 (16 bytes or 128 bits).
>
> The stack is required to be aligned on a 4 byte boundary. On Pentium
> and PentiumPro, @code{double} and @code{long double} values should be
> aligned to an 8 byte boundary (see @samp{-malign-double}) or suffer
> significant run time performance penalties. On Pentium III, the
> Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar
> penalties if it is not 16 byte aligned.
>
> To ensure proper alignment of this values on the stack, the stack boundary
> must be as aligned as that required by any value stored on the stack.
> Further, every function must be generated such that it keeps the stack
> aligned. Thus calling a function compiled with a higher preferred
> stack boundary from a function compiled with a lower preferred stack
> boundary will most likely misalign the stack. It is recommended that
> libraries that use callbacks always use the default setting.
>
> This extra alignment does consume extra stack space. Code that is sensitive
> to stack space usage, such as embedded systems and operating system kernels,
> may want to reduce the preferred alignment to
> @samp{-mpreferred-stack-boundary=2}.
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> Who has to align the stack for calls to a function - the caller or the
> callee? In other words: Does this mean that the stack has to be
> aligned before calling a function? Or does it have to be aligned when
> entering a function?
>
> Andreas
> --
> Andreas Jaeger
> SuSE Labs aj@suse.de
> private aj@arthur.inka.de
> http://www.suse.de/~aj
I believe the preferred alignment for long double is a 16 byte boundary, and
the stack (and instruction) alignments must be so set before entering a function.
Pentium 4 increases preferred data alignments to 32 bytes in some situations,
as well as increasing the number of situations (SSE2 instructions) where 16 byte
alignment is needed.


从这里可以看到,栈对齐是在调用函数之前就必须保证的:


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yayong/archive/2005/04/17/351550.aspx
分享到:
评论

相关推荐

    opencpu学习记录及其AT指令(中文版) 移远bc26等模块

    opencpu学习记录及其AT指令(中文版) 移远bc26等模块opencpu学习记录及其AT指令(中文版) 移远bc26等模块opencpu学习记录及其AT指令(中文版) 移远bc26等模块

    中央处理部件CPU学习教案.pptx

    CPU,即中央处理部件,是计算机的核心组件,负责执行计算机程序中的指令...总结来说,这个CPU学习教案深入地探讨了微指令和微程序的概念及其在CPU设计中的应用,帮助读者理解计算机如何通过微操作层面来执行高级指令。

    嵌入式系统/ARM技术中的CPU学习 (Cache Coherence)

    嵌入式系统和ARM技术中的CPU学习,特别是关于Cache Coherence这一重要概念,涉及到多处理器系统中的性能优化和数据一致性问题。Cache Coherence是解决CPU内部L1、L2 Cache与主内存间以及多处理器环境下各CPU缓存之间...

    计算机组成原理CPU学习视频(内含九个视频).zip

    01.功能与结构 02.指令执行过程1 03.指令执行过程2 04.控制器与数据通路1 05.控制器与数据通路2 06.控制器与数据通路3 07.控制器与数据通路4 08.控制器与数据通路5 09.指令流水线

    CPU自制入门_cpu内部_cpu自制入门_自制cpu书籍_

    通过深入学习这本书,你不仅能够理解CPU是如何工作的,还能尝试设计自己的简单CPU,从而对计算机科学有更深层次的理解。这是一段富有挑战且充满乐趣的旅程,期待你在这个过程中收获知识与成就感。

    深度学习+pytorch安装(CPU)

    深度学习是一种人工智能领域的技术,它基于神经网络模型对大量数据进行建模,以解决复杂的预测和分类问题。PyTorch是Facebook的AI研究团队开发的一个开源机器学习库,广泛用于深度学习研究和应用。PyTorch以其动态...

    伯克利大学CPU设计经典教程

    伯克利大学CPU设计经典教程,适合想从事CPU学习和ASIC和SOC设计者阅读。

    一种具有自学习功能的CPU流控模式探索.pdf

    【标题】:“一种具有自学习功能的CPU流控模式探索” 【描述】:该文档探讨了一种在分布式交换机系统环境下具有自学习能力的CPU流控模型和算法,旨在改善传统算法完全依赖经验数据的问题,并考虑了算法在嵌入式设备...

    基于CPU的LPDDR4学习笔记

    基于CPU的LPDDR4学习笔记

    深度学习大作业,使用PyTorch深度学习框架和CPU实现CIFAR100分类模型搭建项目代码

    深度学习大作业,使用PyTorch深度学习框架和CPU实现CIFAR100分类模型搭建项目代码,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为毕设、...

    cpuFPGA学习例程

    在"cpuFPGA学习例程"中,我们可以探索如何将CPU与FPGA协同工作,构建高性能、低延迟的系统。这样的组合常见于嵌入式系统设计,例如在FPGA中实现数据预处理或加速特定算法,而CPU则负责复杂的决策和控制任务。 学习...

    例程 CPU Demo.zip_CPU卡_DEMO_Demo读卡_dbgconf stm32_单片机 CPU卡

    标题中的“例程 CPU Demo.zip_CPU卡_DEMO_Demo读卡_dbgconf stm32_单片机 CPU卡”指的是一个包含CPU卡相关示例程序的压缩文件,主要用于演示如何在STM32单片机上进行读卡操作。其中,“dbgconf”可能是指调试配置,...

    自己动手画CPU.zip

    《自己动手画CPU》是基于计算机组成原理的学习资源,它旨在通过实践教学的方式帮助学习者深入理解CPU的工作原理。这个压缩包包含了一系列关卡和练习,以文本形式提供,旨在帮助用户逐步掌握CPU的设计和工作流程,...

    CPU设计_基于QuartusII的CPU设计_

    总之,基于Quartus II的CPU设计是一个涉及硬件描述语言编程、逻辑设计和硬件测试的综合项目,对于希望进入嵌入式系统或数字逻辑设计领域的学习者来说,这是一个很好的起点。通过这样的实践,不仅可以深入了解CPU工作...

    单周期cpu设计实验报告

    单周期CPU设计实验报告 单周期CPU设计实验报告是计算机组成原理与接口技术实验的一部分,旨在掌握单周期CPU数据通路图的构成、原理及其设计方法...实验报告的内容丰富、详细,为学习单周期CPU设计提供了有价值的参考。

    面向CPU-GPU集群的分布式机器学习资源调度框架研究.pdf

    在深入探讨《面向CPU-GPU集群的分布式机器学习资源调度框架研究》这篇论文的知识点之前,我们需要明确分布式机器学习资源调度的核心问题。分布式机器学习通常指的是在多个计算节点上并行处理机器学习任务的过程。...

    CPU226接线图

    总的来说,理解并掌握CPU226接线图是学习西门子PLC的基础,它涉及到工业自动化控制系统的硬件连接和信号传输,对于从事自动化工程或设备维护的人来说,这是不可或缺的知识。通过深入学习和实践,可以提高故障排查和...

    LS-CPU-EXB-003cpu设计与体系结构实验指导手册v1.0(教师版)_201710131

    本手册涵盖了多个层次的实验,从基础的数据运算到复杂的CPU实现,逐步引导学习者理解并掌握CPU的工作原理。 首先,熟悉实验箱LS-CPU-EXB-002及其配套软件平台至关重要。该实验箱提供了硬件平台,让学生能够亲手操作...

    易语言取CPU信息

    易语言是一种基于中文编程的计算机程序设计语言,其设计目标是让编程更加简单、直观,适合初学者和专业开发者。在“易语言取CPU信息”这个...通过学习和实践,可以掌握这些技能,编写出高效、稳定的CPU信息获取程序。

Global site tag (gtag.js) - Google Analytics