查看“Central Processing Unit CPU”的源代码
←
Central Processing Unit CPU
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只对以下1个用户组开放:
用户
。
您可以查看并复制此页面的源代码:
==基本原则== 处理器架构(CPU architecture)基本原则: (1)向下兼容原则,或称为向后兼容(backward compatibility)。 (2)效率IPC (Instructions per cycle) 和 能耗(Energy-efficient )。 ==处理器的微架构== 微架构(Micro-architecture)使得指令集架构(Instruction Set Architecture, ISA)可以在处理器上被执行。 指令集架构可以在不同的微架构上执行。 处理器的结构设计是研究微架构与指令集两者之间协作的技术。 ===流水线 === 管线化的结构(Pipelined Architecture)允许多个指令在同一时间执行,不同的指令在微架构不同的位置执行。 管线(Pipeline)分为几个不同的阶段(Stage),这些阶段包含取指令,指令解码,执行指令,以及写回结果。管线是微架构其中一项主要的工作。 ===超标量 === 超标量(Super-scalar)体系结构的CPU在一个时钟周期可以同时分派(dispatching)多条指令在不同的执行单元中被执行,这就实现了指令级的并行。超标量能够在相同的CPU主频下实现更高的CPU吞吐率(throughput)。处理器的内核中一般有多个执行单元(或称功能单元),如算术逻辑单元、位移单元、乘法器等等。超标量体系结构可以视作多指令多数据(MIMD, Multiple instruction multiple data)。 Super-scalar CPUs add the possibility to issue more then one instruction per cycle. As long as these instructions are independent, each of them is dispatched into one of several parallel pipelines. Therefore, a super-scalar CPU can achieve an IPC (Instructions Per Cycle) higher than 1. ===执行单元 === 执行单元(Execution units)也是微架构的基本元件。执行单元包含算术逻辑单元(ALU),浮点运算器(FPU),Load/Store单元(LSU),分支预测(branch prediction),以及SIMD。这些单元在处理器内进行计算。执行单元的数量和时延(latency)(内存存取结果的时间)及吞吐率(throughput)(将结果存到或是读取出内存的速度),影响微架构的效能。 ====算术逻辑单元 ==== 算术逻辑单元(Arithmetic Logic Unit, ALU )对两个储存于暂存器的数字进行add,subtract,multiply,divide, 将结果放到一个暂存器内。 执行位操作,对储存于两个寄存器内的两组数字(由零与一构成)执行逻辑与和逻辑或,或者对寄存器的每一位执行逻辑非操作;(Bitwise logical operations or Bitwise shift operations) 比较两个寄存器中的数据(例如是大于或者相等); ====SIMD ==== SIMD (Single instruction multiple data ) 单指令多数据流处理器单元。 Each core has a SIMD unit in a CPU SIMD execution model (a) Scalar mode: one operation produces one result. (b) SIMD mode: one operation produces multiple results. ===缓存设计=== 缓存分为(Cache)片内缓存(on-chip cache memory)和片外缓存,可以有效加快指令的执行速度。 当处理器发出内存访问请求时,会先查看缓存内是否有请求数据。如果存在(命中),则不经访问内存直接返回该数据;如果不存在(失效),则要先把内存中的相应数据载入缓存,再将其返回处理器。 缓存之所以有效,主要是因为程序运行时对内存的访问呈现局部性(Locality)特征。这种局部性既包括空间局部性(Spatial Locality),也包括时间局部性(Temporal Locality)。有效利用这种局部性,缓存可以达到极高的命中率。 在处理器看来,缓存是一个透明组件。因此,程序员通常无法直接干预对缓存的操作。但是,确实可以根据缓存的特点对程序代码实施特定优化,从而更好地利用缓存。 ===分支预测=== 分支预测( branch prediction )是在分支指令执行结束之前猜测哪一路分支将会被运行,然后投机执行(speculative execution)这一路的指令,以提高处理器的指令流水线的性能。 条件分支指令通常具有两路后续执行分支。即不采取(not taken)跳转,顺序执行后面紧挨JMP的指令;以及采取(taken)跳转到另一块程序内存去执行那里的指令。是否条件跳转,只有在该分支指令在指令流水线中通过了执行阶段(execution stage)才能确定下来。 如果没有分支预测器,处理器将会等待分支指令通过了指令流水线的执行阶段,才把下一条指令送入流水线的第一个阶段—取指令阶段(fetch stage)。这种技术叫做流水线停顿(pipeline stalled)或者流水线冒泡(pipeline bubbling)或者分支延迟间隙。 分支预测器猜测两路分支中哪一路最可能发生,然后投机执行这一路的指令,来避免流水线停顿造成的时间浪费。如果后来发现分支预测错误,那么流水线中投机执行的那些中间结果全部放弃,重新获取正确的分支路线上的指令开始执行,这招致了程序执行的延迟。 ===乱序执行(out-of-order execution)=== 微处理器中来利用指令周期以避免特定类型的延迟消耗的方法。这种方法中,处理器在一个由输入数据可用性所决定的顺序中执行指令,而不是由程序的原始数据所决定。 在这种方式下,可以避免因为获取下一条程序指令所引起的处理器等待,取而代之的处理下一条可以立即执行的指令。 ===寄存器重命名=== 计算机的CPU往往用寄存器(Register)来保存指令的操作数与结果。x86指令集体系结构有8个整数寄存器,x86-64指令级体系结构有16个整数寄存器。 寄存器重命名(renaming)是的微结构(Microarchitecture)中的一种技术,避免了机器指令不必要的顺序化执行,从而提高了处理器的指令级并行的能力。 ===硬件多线程(Multithreading)=== 当处理器的一个程序需要从速度较慢的内存读取数据时,可以将处理器切换到另一个程序运行,避免不必要的处理器停顿(stalling)。多线程技术不会加快单个程序的处理速度,但是可以有效提升整个系统的工作量。 ==处理器的指令集架构 == 指令集架构(Instruction Set Architecture,ISA),又称指令集或指令集体系,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集,寄存器,寻址模式,存储体系,中断,异常处理以及外部I/O。 指令集架构包含一系列的opcode即操作码(机器语言),以及由特定处理器执行的基本命令。 * 复杂指令集运算(Complex Instruction Set Computing,CISC) * 精简指令集运算(Reduced Instruction Set Computing,RISC) * 显式并行指令集运算(Explicitly Parallel Instruction Computing,EPIC) * 超长指令字指令集运算(Very long instruction word, VLIW) ==英特尔处理器 == 服务器和桌面电脑的处理器主要采用英特尔处理器,英特尔处理器占据了绝大多数市场。 ===英特尔处理器的微架构=== Intel Nehalem Intel Sandy Bridge Intel Ivy Bridge Intel Haswell Intel Skylake ===英特尔处理器的指令集=== * x86 x86是一个指令集架构家族,最早由英特尔在1978年面市的“Intel 8086”CPU上开发出来。 * x86-64 x86-64(简称x64)是64位版本的x86指令集,向后兼容于16位及32位的x86架构。x64于1999年由AMD设计,AMD首次公开64位集以扩充给x86,称为“AMD64”。其后也为英特尔所采用,现时英特尔称之为“Intel 64”. * BMI{1,2} BMI(Bit Manipulation Instructions Sets)是x86指令集的扩展,用于加快bit级操作的速度。 Intel 将 POPCNT 指令作为 SSE4.2指令集的一部分, 而LZCNT 作为 BMI1指令集的一部分. * MMX MMX(Matrix Math eXtensions)是由英特尔开发的一种SIMD多媒体指令集,共有57条指令。它于1996年集成在英特尔奔腾(Pentium)MMX处理器上,以提高其多媒体数据的处理能力。其优点是增加了处理器关于多媒体方面的处理能力,缺点是占用浮点数寄存器进行运算。 * SSE {1, 2, 3, 4.1, 4.2} SSE(Streaming SIMD Extensions) 是继MMX的扩充指令集。SSE加入新的8个128位寄存器(XMM0~XMM7)。 * AVX AVX指令集(Advanced Vector Extensions,即高级向量扩展指令集),是Intel的SSE延伸架构,把寄存器XMM 128bit提升至YMM 256bit,以增加一倍的运算效率。 AVX2指令集将整数操作扩展到了256位,并引入了FMA指令集作为扩充。AVX-512则将指令进一步扩展到了512位。 * FMA FMA指令集(Fused-Multiply-Add)是Intel的AVX扩充指令集,如名称上熔合乘法累积(Fused Multiply Accumulate)的意思一样。 FMA3:是一种三元运算指令集。 FMA4:是一种四元运算指令集。 * Intel-VT 英特尔虚拟化技术(IVT,Intel Virtualization Technology)是由英特尔开发的一种虚拟化技术,利用IVT可以对在系统上的客操作系统,通过虚拟机查看器(VMM,Virtual Machine Monitor)来虚拟一套硬件设备,以供客操作系统使用。 IVT不仅需要处理器的支持,也需要芯片组、BIOS的支持,有时也许还需要软件的支持。 VT-d技术,“直接输入/输出虚拟化”(Virtualization for Directed I/O)。 VT-x技术,IA-32的IVT扩展指令集。 ===Intrinsic instructions=== 内置函数是编译器支持的。比如,微软和英特尔的 C/C++ compilers,以及GCC 实现的 intrinsics 内置函数,直接转换intrinsics 内置函数为 x86 SIMD 指令 (MMX, SSE, SSE2, SSE3, SSSE3, SSE4)。 ====Intel intrinsic instructions ==== C语言的风格函数,可以直接在源代码中调用的英特尔处理器指令。(C style functions that provide access to many Intel instructions) [https://software.intel.com/sites/landingpage/IntrinsicsGuide/ Intel intrinsic instructions] 可调用的指令集包括:SSE, AVX, AVX2, FMA. ====Java Intrinsics ==== Java语言的intrinsic函数,由Java编译器 HotSpot JVM,转换为处理器的内置的指令。 Java的intrinsic函数,包括: Long.bitCount , Integer.bitCount Integer.reverseBytes , Long.reverseBytes Integer.numberOfLeadingZeros , Long.numberOfLeadingZeros Integer.numberOfTrailingZeros , Long.numberOfTrailingZeros System.arraycopy ==超微半导体AMD == Barcelona 微架构, Bulldozer 微架构,Zen 微架构 AMD Barcelona-based processors AMD Piledriver-based processors AMD Steamroller-based processors AMD Excavator-based processors AMD Bobcat-based processors AMD Jaguar- and Puma-based processors AMD Zen-based processors ==ARM处理器 == 手机等移动设备的处理器大多采用ARM处理器。ARM处理器主要以IP授权为主,目前生产ARM处理器的有高通、华为等大量公司。 ===ARM架构=== ARM 高级精简指令集机器(Advanced RISC Machine) ===ARM微架构=== 流水线:较早的设计具备三阶段的流水线:提取指令、解码,并运行。较高性能的设计,如ARM9,则有更深阶段的流水线: Cortex-A8有13阶段的流水线。 Advanced SIMD (NEON) is a combined 64- and 128-bit SIMD instruction set that provides standardized acceleration for media and signal processing applications. VFP (Vector Floating Point) technology is an FPU(Floating-Point Unit) coprocessor extension to the ARM architecture 具体微架构: ARMv8-A、ARMv8.1-A、ARMv8.2-A ===ARM指令集=== ARM指令集: AArch64/A64、AArch32/A32 ARMv8架构,是在MIPS64架构上增加了ARMv7架构中的TrustZone技术、虚拟化技术及NEON advanced SIMD技术等特性。 64位ARMv8架构中包含两个执行状态:AArch32(也就是常说的ARMv7)和AArch64(ARMv8)。 AArch64执行状态针对64位处理技术,引入了一个全新指令集A64(也就是基于收购的MIPS64架构) AArch32执行状态将支持现有的ARM指令集。所以64位的ARM处理器中同时包含着32位的ARMv7和64位的ARMv8两种架构。 ARMv8指令集既支持未来的64位程序,也向下兼容现有32位程序。有了ARMv8的支撑,64位手机操作系统,如android L 64bit都可以简单、高效地支持现有的32位App. 程序编译时需要选择ARM架构的名称,有armeabi-v7a, armeabi, arm64-v8a armeabi就是arm v5 cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm v7 cpu。armeabi-v7a是32位ARM设备,而arm64-v8a是64位ARM设备。 ===编译器支持=== Most efficient 64-bit ARMv8-A processor with full ARMv7-A compatibility ARMv8.3-A architecture is now supported by the GCC 7 compiler. ==PowerPC处理器== IBM 和摩托罗拉的处理器架构和指令集。用于通信控制芯片中。 Power联盟是PowerPC处理器的生态链的联合体。
返回
Central Processing Unit CPU
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
实践教学
个性化3D设计与实现
人工智能实践教学
区块链技术及应用
虚拟现实技术与内容制作
超越学科界限的认知基础课程
电子工艺实习
Nand2Tetris Engine Curriculum
TULLL Creative Learning Group
Wiki上手说明
Wiki账户创建
最近更改
工具
链入页面
相关更改
特殊页面
页面信息