cpu简述--指令集架构

news2024/11/25 18:35:06

     很多初级开发者其实都对cpu了解不多,个人兴趣原因想要了解一下cpu的相关知识,所以开几篇文章记录一下吧。
    2002年8月10日,中国科学院计算技术研究所的青年科学家胡伟武带领研制组,研制出我国首枚拥有自主知识产权的通用高性能微处理芯片——“龙芯一号”,结束了我国在通用CPU领域无芯片的历史。
    龙芯当时是做了什么样的创新,才能说是具有自主知识产权的芯片呢?为何2002年就已经有了自主知识产权的芯片,而到现在还致力于自主可控的国产cpu的开发?

处理器编程模型

    早期的处理器都是面向硬件编程,同一个软件换台型号不一样的电脑就不能用了。IBM为了解决这个麻烦,让软件能够在自家公司的不同电脑上通用,就提出了ISA(Instruction Set Architecture,指令集体系结构)这个概念,用来将硬件信息抽象化,然后我们的编程模型就成了下面这个样子。
处理器编程模型    之后开发人员面向ISA编程就可以了,开发的软件可以用在其他相同ISA架构的系统上。从程序员的角度看,ISA就是一套指令集和一些寄存器。
    举个例子,个人电脑经常用的Intel跟AMD两个处理器都是基于x86指令集的,所以我们的各种游戏软件,无论是你从AMD的机器换成了intel的机器,还是从i5到i7,都可以正常安装使用。而手机上的软件到了电脑上就不能用了,因为手机cpu大部分用的都是ARM指令集,基于ARM开发的软件到x86上当然跑不通。
    ISA出现之后,处理器的外部呈现和内部实现就分离开来了,被分为三个层次,如下图:
处理器系统层次    ISA常被称为架构(Architecture),是处理器的抽象描述。ISA在处理器中的实现成为微架构(Microarchitecture),如Intel和AMD都是x86架构但是使用不同的微架构。
    通俗点说ISA是设计规范,规定了处理能做什么,微架构是设计实现,描述处理器是怎么实现功能的,物理实现就是具体的实现过程,如20nm工艺,40nm工艺。以软件开发的角度来看的话,ISA就像是需求,微架构是设计,物理实现就是具体的代码。
    微架构一般也认为是内核。下图反映了指令集,微架构,处理器的关系。

指令集,微架构,处理器关系

指令集体系结构

    2009年龙芯取得MIPS架构授权。龙芯作为我国自主研发的处理器,我们都希望其能够实现完全自我创新,不被外界控制,然而最终还是不得不使用了现存的指令集。归根结底还是因为指令集的威力太过强大,指令集的强大之处在于他的背后是一个生态链。
    指令集就像一个语言(英语)一样,定义一套语言并不难,难得是让大家都去接受你的语言。如果重新使用一套指令集,与之相匹配的编译器,操作系统,各种应用软件都要重新编写,这里的工作量是巨大的,所以当时龙芯不得不使用了现存的指令集。
    当然,随着我国的不断发展,2020年,龙芯中科推出了自研指令系统LoongArch,LoongArch指令集包括基础架构部分和向量指令、虚拟化、二进制翻译等扩展部分,近2000条指令,并完全脱离了MIPS指令集体系。根据公司的规划,2024年将实现新架构产品的全面切换完成,不再销售基于MIPS指令系统的商业产品。

指令集是干嘛的?

    早期程序员都是使用汇编语言进行编码,然而众所周知,计算机只认识0,1,所以我们就需要一条规则去把汇编语言映射为0和1的机器语言。例如,add r0 r3 r2 为一条汇编指令,add为操作码后边为操作数,处理器公司对外发布的指令集手册就是使用汇编语言的形式。我们可以为每一个操作码和寄存器地址都赋予一种0和1的组合,以一种特定的长度为一组进行编码,最终就成了计算机认识的机器语言。(当然也可以使用变长的方式进行指令编码)。当cpu遇到这组01组合时就会按照规定的方式进行解码,拆分出操作码和操作数进行执行。

两种指令集

    早期程序员都是用汇编语言编程的,自然希望指令集中的指令数量越多越好,这也造成了指令数量越来越多。然而,社会80%的财富集中在20%的人手里。IBM的John Cocke证明这同样适用于指令集——20%的简单指令会被经常用到,占程序指令的80%,而其余20%的复杂指令则只占程序指令的20%。于是一些人开始重新设计指令集和处理器,只保留简单的指令,这样处理器就不用浪费大量晶体管去做哪些很复杂又很少使用的功能。
    世上本没有东汉西汉,只是后来人对他们的称呼罢了。指令集也是这样,由于新的指令集更精简,为了同之前的指令集作区分,使用新的指令集的计算机就叫做RISC(Reduced Instruction Set Computer,精简指令集计算机),相应的,之前的老的指令集就叫做CISC(Complex Instruction Set Computer,复杂指令集计算机)。
    早期 CPU,CISC 是主流,可以使用较少的指令来完成更多的操作。CISC 的主要特征为: 指令系统庞大,指令功能复杂,指令格式、寻址方式多; 绝大多数指令需多个机器周期完成; 各种指令都可访问存储器; 采用微程序控制; 设置专用寄存器、专用指令完成特定功能。
    限于 CISC 的复杂性,除 x86 外,基本上现代的指令集架构都选择了 RISC架构。RISC的主要特征为:统一指令编码,精简了指令数目和寻址方式,可快速解译; 大量采用寄存器操作指令,使指令系统更为简洁;复杂寻址模式以简单计算指令序列取代; 采用高效的流水线操作,提高数据处理和指令的速度; 指令格式的规格化和简单化。RISC 指令集实现更容易,指令并行执行程度更好,编译器的效率更高,能够以更快的速度执行操作。。。。。。。2020国产嵌入式处理器发展综述。。。。。。

几种指令架构介绍

x86

    不管喜不喜欢,x86都是指令集中的巨无霸。几乎所有个人计算机都在使用x86架构的计算机,如intel和AMD。在RISC兴起的时候,intel也尝试做RISC,但由于兼容性问题当时的市场并不买账。于是后来intel提出了一种类RISC的内核,采用 micro-op模式进行翻译,将x86的指令解码为类RISC指令后由RISC内核执行,到目前为止x86使用的仍旧是这种处理器结构。

ARM

    X86和ARM可谓是处理器上两个最成功的架构,一个霸占了个人计算机,一个则牢牢的抓住了手机市场。ARM之所以如此成功,是因为他一开始就将低功耗,低成本的优先级放在了高性能前面,所以在与x86残酷的市场竞争中存活下来并逐渐壮大。
    ARM公司自己不生产芯片,而是向半导体公司提供指令集授权,内核授权,其他公司使用ARM的处理器内核设计生产自己的处理器芯片。华为麒麟处理器、苹果的A系列处理器、高通骁龙处理器无一例外的采用了ARM架构。当美国禁售令颁布以来,ARM中断了与华为业务的往来,华为的麒麟,凌霄处理器均无法拿到最新的架构授权,发展都收到了相应的影响。

MIPS

    MIPS 架构也被称为最遵守RISC设计准则的一种架构。MIPS全称为无内部互锁流水级的微处理器 ( Microprocessor without Interlocked Piped Stages)。MIPS 与当前商业化最成功的 ARM 架构相比具有以下优势:有专门的除法器,可以执行除法指令。MIPS 的内核寄存器比 ARM 多一倍,在同样的性能下功耗会比 ARM 更低,同样功耗下性能比 ARM 更高。MIPS 指令比ARM 更多,执行部分运算更为灵活。MIPS 在架构授权方面更为开放,允许授权商自行更改设计。。。。。2018中国国产化处理器进展综述。。。。
    但由于之前MIPS长期以来侧重于高性能,面向服务器和工作站市场,收到了x86的猛烈冲击,等他回头做低功耗时,已经无法撼动ARM在嵌入式中的地位了。目前MIPS公司商业模式与ARM类似,通过出售指令集授权和处理器内核授权盈利。

Alpha

    Alpha 是 RISC 处理器中最快的一种,而且是唯一得到 WindowsNT 继续支持的 RISC 处理器。在2001年Alpha就被宣布放弃,之后江南计算所就购买了alpha所有资料,基于这个基础开发了一代代的申威处理器。

国产芯片发展以及使用的架构

    现在国产化趋势越来越明显,中国对自己完全自主可控的芯片需求也越来越高,所以这里还是了解一下国产的一些比较成熟的处理器所使用的体系结构以及发展现状。

最早使用ARM架构的国产CPU——飞腾

    飞腾处理器是由国防科学技术大学自主研发的高性能处理器。2014年飞腾在天津成立,公司先使用SPARC架构,而后迅速转向Arm架构,2014 年获得 ARMv8 架构的永久授权,自主研发微内核,提供了对 ARMv8 架构的良好兼容。在2015年3月发布了第一款面向PC和服务器的Arm核CPU芯片。
    “飞腾-1000”CPU,成功应用于我国第一台千万亿次服务器“天河 1 号”;“飞腾-1500”CPU 应用于超级计算机天河二号,在2012-2015年间超级计算机TOP500榜单中排名第一。

最早拥有自主知识产权的国产CPU——龙芯

    2002年8月10日,中国科学院计算技术研究所的青年科学家胡伟武带领研制组,研制出我国首枚拥有自主知识产权的通用高性能微处理芯片——“龙芯一号”,结束了我国在通用CPU领域无芯片的历史。龙芯公司在获得 MIPS 授权后,先后研制了 LS2 /LS3 等通用 CPU。在消化吸收的基础上,推出了自主兼容LoongArch 指令集,该指令集完全兼容 MIPS,融合了 x86、ARM、RISC-V 等指令系统的主要功能,生态不断完善。龙芯处理器分为小中大( 龙芯 1、2、3) 3 个系列,分别面向低端嵌入式、高端嵌入式/低端桌面、桌面/服务器 3 个应用领域。在嵌入式通用处理器系列中,龙芯 LS2K1000 已经广泛应用于高性能嵌入式计算机中。面向桌面和高端嵌入式应用,龙芯研发了第三代多核龙芯处理器 LS3A4000。龙芯有一个特点,就是核心 IP 都是自己做。针对生态建设道路,做 CPU 没有生态是不行的,比如现在很热的机器学习,如果只是单个的芯片肯定活不长,必须建设芯片生态。

唯一基于Alpha架构的国产CPU-申威

    江 南 计 算 技 术 研 究 所 研 发 的 申 威 处 理 器 源 自于 DEC 的 Alpha 21164 , 采 用 基 于 RISC 的自 主 指 令 集 、Alpha 架构,具 有 自 主 知 识 产 权 ,代表性应用为申威太湖之光,在2016-2017年为世界超级计算机排名榜单TOP500第一名。申威系列 CPU 的指令集是基于 Alpha 进行扩展的,技术来源是 Alpha 21164。目前 Alpha 的指令集和微结构都已不再更新,技术专利大多已过期或快过期。申威是 Alpha 阵营中仅存的硕果,但拥有自己的指令集、微结构、CPU、编译器和操作系统。

参考文献:
《国产嵌入式处理器发展综述》 邓豹,孙靖国 2020
《中国高端处理器芯片的发展战略分析》 魏肖 2017
《主流处理器体系结构与架构发展现状综述》寇晓斌 ,杨 琴 ,王亮亮 2014
《大话处理器》万木杨
《国产处理器研究与发展现状综述》芮雪 ,王亮亮 ,杨琴 2014

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MindOpt安装配置教程(Windows系统)

1 前言 官网有很多的说明文档、教程,但是可能有些地方(这里仅仅补充安装配置部分,其他操作建议自行去官网进行探索)不是很详细,踩了一些坑,所以进行了一些总结。 2 下载安装 url:求解器SDK下载…

Nginx基础02:配置文件nginx.conf(Part1)

我们使用Nginx主要是通过其配置文件nginx.conf来实现的。按照一定的规则,编写特定的指令,可以帮助我们实现对Web服务的控制!所以,学习Nginx的用法,几乎就是学习nginx.conf!如何使用本篇文章本文作为一篇高度…

【博客590】iptables raw表的特殊作用

iptables raw表的特殊作用 1、iptables四表五链: 2、raw表的优先级 从上图中可以看到raw表作用于prerouting和output链,且在这两个链中的几个表中拥有最高优先级,并且是高于连接跟踪的,这个也是raw表用于优化性能的一个重要前提 …

Leetcode链表专题专练-万字总结

文章目录 系列:链表专练 语言:java & go 题目来源:Leetcode 常考点: 单链表 & 双链表 &双指针 思路和参考答案文章目录链表专题总结链表专练链表专题总结 链表是一种通过指针串联在一起的线性结构,每一个…

【计算机网络】传输层协议-------TCP详解

文章目录1. TCP 协议概述2. TCP原理2.1 保持可靠性的机制2.1.1 确认应答2.1.2 超时重传2.1.3 连接管理机制(安全机制)2.1.3.1 三次握手2.1.3.2 四次挥手2.1.4 滑动窗口2.1.5 流量控制2.1.6 拥塞控制2.1.7延时应答2.1.8 捎带应答2.1.9 粘包问题2.1.10 TCP异常2.1.11 TCP vs UDP1…

记录每日LeetCode 112.路径总和 Java实现

题目描述: 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶…

马蜂窝如何利用 APISIX 网关实现微服务架构升级

作者:董红帅,马蜂窝微服务体系建设以及基础服务能力建设专家。 马蜂窝作为旅行社交平台,是数据驱动的新型旅行电商。基于十余年的内容积累,马蜂窝通过 AI 技术与大数据算法,将个性化旅行信息与来自全球各地的旅游产品供…

Water Pamola通过恶意订单对电商发起攻击

自2019年以来,趋势科技的研究人员一直在追踪一个被称为“Water Pamola”的攻击活动。该活动最初通过带有恶意附件的垃圾邮件攻击了日本、澳大利亚和欧洲国家的电子商务在线商店。 但是,自2020年初以来,研究人员注意到Water Pamola的活动发生…

(二十三)Collecttion集合

目录 前言: ①Collecttion集合的体系结构 ②Collecttion集合的遍历方式 方式一:迭代器 方式二:foreach/增强for循环 方式三:Lambda表达式 ③常见数据结构 前言: Collection: 是所有集合的顶级接口,里面规定了集合操作元素的相关功能方法集合与数组一样,用于存储一组…

使用Sa-token实现单点登录

使用Sa-token实现单点登录单点登录需求为何选择Sa-Token简单使用sa-token接口如何保持登录态使用拦截器实现鉴权聊聊Sa-Token的理解聊聊遇到的一些问题单点登录需求 其实一直想写一个单点登录系统,现在的现状是公司内部有非常多项目的,然后每个项目一套登…

数据分析面试题--数理知识点1

目录标题1,python统计一段话每个单词出现的次数2,SQL中如何利用replace函数统计给定重复字段在字符串中的出现频率?3,常见的统计分析方法有哪些?拿到数据如何分析4,参数估计和假设检验的联系和区别5&#x…

网络实验之OSPF路由协议(一)

一、OSPF路由协议简介 开放式最短路径优先(Open Shortest Path First,OSPF)路由协议是用于网际协议(IP)网络的链路状态路由协议。该协议使用链路状态路由算法的内部网关协议(IGP),在…

NIO笔记

一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 st…

SAP ABAP 代码修改自动比较对象版本一致

第一步,找到SE38/SE37代码修改的出口 SMOD中查找 第二步,实施增强 CMOD中添加增强并激活,如下图 第三步,添加代码 如上图两个双击添加并修改代码 ZXSEUU08中与 ZXSEUU01代码一致,如下 *&----------------------…

【年度总结】我的2022年-职业生涯大转折

【年度总结】我的2022年-职业生涯大转折2022总结大厂的苦与乐找工作的焦虑再起启航2023展望持续刷题持续学习捡起博客在漩涡中疯狂挣扎的一年 2022总结 大厂的苦与乐 上半年主要在搞中台,需要对接的其他团队比较多,每天都在对接需求、优化需求。同时还…

Python NumPy 创建数组(ndarray)

前言NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。本文主要介绍使用Python NumPy 创建…

鉴源论坛 · 观辙丨基于机器学习的汽车CAN总线异常检测方法

作者 | 张渊策 上海控安可信软件创新研究院研发工程师 来源 | 鉴源实验室 目前机器学习是研究车辆网络入侵检测技术的热门方向,通过引入机器学习算法来识别车载总线上的网络报文,可实现对车辆已知/未知威胁的入侵检测。这种基于机器学习的异常检测技术普…

chrono_duration(一)

文章目录chrono简介std::chrono::durationduratio基本介绍基本概念使用引入std::ratio 参数深入特化的duratio改造之前的代码静态成员函数 count原型例子构造函数支持加减乘除运算编译细节支持比较运算符查询范围类型转换例子引入修改seconds的范围浮点类型系统特化的duratio自…

os模块的使用方法详解

os模块os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;即os模块提供了非常丰富的方法用来处理文件和目录。使用的时候需要导入该模块:import os常用方法如下:方法名作用os.remove(‘path/filename’)删除文件os.re…

Unidbg模拟执行某段子so实操教程(一) 先把框架搭起来

一、目标 最近又开始研究Unidbg了,费了好大劲,没有跑起来。今天就先找个软柿子捏捏看。 今天的目标是 之前研究的 某段子App签名计算方法(一) 某段子App版本 5.5.10 二、步骤 先搭起框架来 在 /unidbg/unidbg-android/src/test/java/ 下面新建一个 …