Chinaunix首页 | 论坛 | 博客
  • 博客访问: 847460
  • 博文数量: 286
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1980
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-04 16:41
文章分类

全部博文(286)

文章存档

2020年(2)

2018年(5)

2017年(95)

2016年(69)

2015年(15)

2014年(100)

我的朋友

分类: 嵌入式

2014-09-10 11:05:51


    许多人在选择 CPU,或了解 CPU 性能时,常常忽略指令集这个指标,甚至认为它无关紧要的。
    其实,指令集对于 CPU 来讲,是相当重要的。
    举个常见的例子吧,有些使用老机子的人,在玩 3D、视频、音频、图像、游戏等多媒体文件时,常常会感到效果不好。 速度慢、卡、甚至无法处理等。这其中最重要的一个原因,就是老机子的 CPU 缺少先进的指令集。
    本文就是力图用最通俗的语言,给非专业人士说说 CPU 的指令集。都是从网上学来的,纯属个人理解,绝非权威观点。由于尽量不使用那些艰涩难懂的专业术语,所以难免有不严谨之处。就当扫盲吧。

CPU 指令集浅

啥是指令集?

    我们对电脑下达的每一个命令都需要 CPU 根据预先设定好的某一条指令来完成。
    这些预先设定好的指令是预存在 CPU 中的。 CPU 依靠外来指令“激活”自己内存的指令, 来计算和操控电脑。
    每款 CPU 在设计时就规定了一系列与电脑其它部件相配合的指令系统。
    预先存储的指令越多,CPU 越“聪明”。可以做的“动作”越多。预先存储的指令越先进,CPU 就越高级。就好比大人脑袋里的知识多,所以比小孩聪明。
    多个指令集中在一起,通常叫指令集。

基本指令集与扩展指令集

    CPU 都有一个基本的指令集,在基本功能方面,它们的差别并不太大。 没有基本指令集的 CPU,就是“傻子”一样的摆设。
    为了提高 CPU 在某些方面的性能,就必须增加一些特殊的指令满足特殊的需求,这些新增的指令就构成了扩展指令集。也就是常说的指令集。

精简指令集与复杂指令集

    不管是基本指令集还是扩展指令集,都有精简与复杂之分。
    千万不要认为精简一定不如复杂。恰恰相反的是,目前的精简指令集比复杂指令集好得多。所以精简指令集基本用于中、高档服务器中。尤其是高档服务器,使用的都是精简指令集。而且,精简指令集有不断向个人电脑领域发展的趋势。
    从长远上讲,精简指令集是以后高性能 CPU 的发展方向。预计总有一天会一统江湖。
    说到这,您一定会明白一个事实,那就是,目前绝大部分个人电脑都是使用复杂指令集的。

精简指令集(RISC)

    精简指令集(RISC)有人又叫“简单指令集”。它是从复杂指令集(CISC)脱胎出来的。
    在使用复杂指令集(CISC)的实践中,人们发现大部分程序(大约 80%)通常只使用复杂指令集(CISC)中的很少部分指令(大约 20%)就能正常工作,其它的指令很少用到。于是就在这 20%的常用指令的基础上,开发出了精简指令集(RISC)。
    我们来看看下面复杂指令集与精简指令集的主要比较吧。


无法摆脱的 x86 指令集

    x86 是一种复杂指令集(CISC),一直被 Intel 和 AMD 两大 CPU 开发商所垄断。
    x86 指令集是 Intel 开发的,后来增加了 x87 指令集,现在将 x86 和 x87 指令集统称为 x86 指令集。并将使用 x86 指令集的系统统称为 x86 架构。
    虽然随着 CPU 技术的不断发展,Intel 陆续研制出更新型的 CPU,而且每种新的 CPU,都会有自己新的指令。但 Intel 不得不考虑这样一个事实,相当丰富的软件资源都是以 x86 指令集为基础编写的(例如:Win  XP操作系统就是 x86 架构的) 。 为了保证电脑能继续运行以往开发的各类应用程序, 以保护和继承丰富的软件资源,所以 Intel 公司所生产的 CPU 仍然继续使用 x86 指令集, 仍然属于 x86 架构。 AMD 也是购买了 x86 指令集的使用权,来开发自己的 x86 架构的 CPU。
    这样就形成了如今庞大的 x86 系列 CPU。其被大量应用于个人电脑。可以这样说,目前绝大部分个人电脑都是 x86 架构的。
    x86 指令集是由基本指令集和扩展指令集组成的。其最常见的扩展指令集如下。

扩展指令集

    目前常提到的扩展指令集大都是专门为多媒体应用的指令集。主要功能提高 CPU 处理 3D 图形、视频、音频、图像等的能力,提高 CPU 的处理速度等。
    非专业人士并不一定非要详细了解这些指令集的一些专业知识的。只要记住, CPU 可以支持的指令集越多,指令集的版本越高,就越好。
    属于 Intel 的这类指令集主要有 MMX、SSE、SSE2、SSE3 等,属于 AMD 的有 3D Now!等。
    随着 64 位 CPU 的问世,双方又都推出了一些 64 位系统的指令集。
    目前最新的 Intel 的 CPU 可以支持 SSE、SSE2、SSE3 指令集。随着 Intel 的逐步授权,  AMD 的 CPU 不仅进一步发展了自己的 3D Now!指令集,并且可以支持 Inel 的 SSE、SSE2、SSE3 指令集。
    MMX(Multi Media Extensions,多媒体扩展)指令集。包含 57 条指令。
    SSE(Streaming SIMD Extensions,单指令多数据流扩展)指令集。包含70条指令。 
    SIMD(Single Instruction Multiple Data,单指令多数据)。
    由于 MMX 指令并没有带来 3D 游戏性能的显著提升,Intel  推出了 SSE 指令集。
    SSE 指令集兼容 MMX 指令,它可以通过 SIMD(单指令多数据)技术和单时钟周期并行处理,有效地提高运算速度。
    SSE2  (Streaming SIMD Extensions 2)指令集
    包含 144 条新指令,扩展了 MMX 技术和 SSE 技术,在运行 MPEG-2、MP3、3D 图形等之类的软件时性能有所增强。
    SSE3(prescott new instructions,简称 pni)指令集
    包含 13 条新指令,可以提升多媒体和游戏性能。
    AMD 所支持的 SSE3 与 Intel 的 SSE3 不完全相同,主要是删除了针对 Intel 超线程技术优化的部分指令。
    SSE4 指令集
    它实际上分为 SSE4.1 和 SSE4.2,用于 Intel 公司“显著视频增强”平台。
    SSE4.1 包含 50 条新指令,有助于编译、媒体、字符/文本处理和程序指向加速。
    SSE4.2 包含 57 条新指令(其中 50 条与 SSE4.1 相同) 。
    AVX 指令集
    针对 AMD 抢先宣布了 SSE5 指令集,Intel 终止了 SSE 的更新,转而公布了 AVX  (Advanced Vector Extensions,高级矢量扩展)指令集规范,并不断进行更新,AVX 将 SIMD(单指令多数据)技术由 128 位扩展到 256 位,同时数据传输也获得了提升,所以从理论上看,可以使 CPU 运算性能提升 1 倍。
    3D Now !指令集
    AMD 的 3D Now!指令集应该说是先于 Intel 的 SSE 指令集出生。共有 21 条指令。
    由于 MMX 指令并没有带来 3D 游戏性能的显著提升,3D  Now!指令集主要针对三维建模、坐标变换、效果渲染等三维应用场合,在软件的配合下,可以大幅度提高 3D 处理性能。但对其图形应用处理支持不足。
    3DNow!+指令集
    AMD 后来开发了 Enhanced(增强型)3D Now!指令集,指令增加至 52 个,与后来的 Intel 的 SSE 具有相同效能。
    有人也许会问,既然 AMD 有自己的指令集,为啥还要兼容 Intel 的 SSE、SSE2、SSE3 指令集呢?
    告诉您,主要因为目前许多软件都是以 SSE、 SSE2、 SSE3 指令集为基础开发的。 AMD 无法忽视这个庞大的市场,所以只好屈尊兼容 Intel 的技术了。

向着 64 位前进

    随着 64 位 CPU 的问世, 32 位的 x86 架构或 IA-32 架构(实际上也属于 x86 架构)已经不能适应 64 位 CPU了。于是,一些新的指令集应运而生。注意,这些指令集主要不是为了增强多媒体功能的扩展指令集。但其仍属于复杂指令集(CISC) 。
    EPIC(Explicitly Paralle lInstruction Computers,精确并行指令计算机)指令集为了摆脱臃肿的 x86 架构,雄心勃勃的 Intel 为 64 位 CPU 设计了 EPIC 指令集,并将使用这种指令集的架构定名为 IA-64(Intel Architecture-64,英特尔 64 架构) 。
    IA-64 突破了传统 IA-32 架构的许多限制,在数据的处理能力,系统的稳定性、安全性、可用性等方面获得了突破性的提高。
    但是,IA-64 架构的 CPU 最大缺陷是不能很好地兼容 x86 指令,致使大批使用 x86 指令的软件资源受到限制。为此,Intel 为 IA-64  CPU 引入了 x86-to-IA-64 的解码器,能够把 x86 指令翻译为 IA-64 指令。但效果并不理想。结果是 AMD 另辟蹊径,生出了 x86-64。
    x86-64(AMD 64)
    AMD 加强了 x86 指令集的功能,加入了 64 位扩展指令,使 CPU 既能在 64 位运行,又兼容 x86-32 架构。
    IA-32E(EM64T)
    EM64T(Extended Memory 64 Technology,64 位内存扩展技术)
    由于 IA-64 架构无法完美地兼容 x86 架构,Intel 改弦更张,不是抛弃 x86 架构,而是对 IA-32(属于 x86)架构进行改装,引入了 EM64T (64 位内存扩展技术),很快地弄出了 IA-32E 架构。实际上也是加入了 64 位扩展指令。只有在运行 64 位操作系统下的时候,才将会激活 IA-32E。 
阅读(1184) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~