- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
本文的知识点比较零散,主要是关于处理器的一些基本知识,大部分内容来源于参考资料并给出了自己的理解和整理.
先描述下一般处理器的概念, 维基百科 的定义是 “In computing, a processor is an electronic circuit which performs operations on some external data source, usually memory or some other data stream”。最为常见的处理器有 CPU (可以运行任何程序)、 GPU (图形图像处理)和 DSP (处理数字信号),还有专门用来做 DNN 应用神经网络处理器.
处理器或处理单元是对外部数据源(通常是内存或其他数据流)执行操作的电子组件(数字电路).
CPU 的主要运作原理,不论其外观,都是执行储存于被称为程序里的一系列指令。在此讨论的是遵循普遍的冯·诺伊曼结构(von Neumann architecture)设计的设备。程序以一系列数字储存在计算机存储器中。差不多所有的冯·诺伊曼 CPU 的运作原理可分为四个阶段: 提取、解码、执行和写回 .
而专用处理器就是针对 特定应用或者领域 的处理器,类似于是我们经常说的 Domain Specific Architecture 的概念.
指令集( Instruction Set Architecture , ISA )是计算机抽象模型的一部分,它定义了软件如何控制 CPU 。 ISA 充当硬件和软件的接口,指示了处理器能够实现什么功能以及如何实现。简单来说, ISA 就是传统上软件和硬件的分界线,是用户和硬件交互的唯一方式.
ISA 定义了硬件支持的数据类型、寄存器、硬件如何管理内存、关键特性(如虚拟内存)、微处理器可以执行哪些指令,以及多个 ISA 实现的输入输出模型。ISA 可以通过添加指令或其他功能或通过添加对更大地址和数据值的支持来扩展.
来源 What is Instruction Set Architecture (ISA)? - Arm 。
大多数 ISA (典型如 x86 -Intel CPU 的指令集),将程序的行为描述成每条指令都是顺序执行的,一条指令结束后,下一条在开始.
ISA 提供的主要指令可以分为四大类功能:
debug
、中断和 cache
之类的指令。 CPU 数字表示方法是一个设计上的选择,这个选择影响了设备的工作方式。一些早期的数字计算机内部使用电气模型来表示通用的十进制(基于 10 进位)记数系统数字。还有一些罕见的计算机使用三进制表示数字。几乎所有的现代的 CPU 使用二进制系统来表示数字 ,这样数字可以用具有两个值的物理量来表示,例如高低电平等等.
主频=外频×倍频。大部分的 CPU ,甚至大部分的时序逻辑设备,本质上都是同步的,即它们被设计和使用的前题是假设都在同一个同步信号中工作.
指令周期是指 CPU 要执行一条机器指令经过的步骤,由若干机器周期组成 。一般会经历“取指”,“译码”,“发射/执行”和“写回”这些操作。处理器执行程序的过程就是不断重复这几个操作.
在1978年的 Intel 8086 处理器都只能一次执行单指令。 Intel首次在486芯片中开始使用,原理是:当指令之间不存在相关时,它们在流水线中是可以重叠起来并行执行.
当一条指令,完成了“取指”操作,开始进行“译码”的时候,取指模块就可以取程序的下一条指令了,这样可以让这些模块不至于闲着没用,即 指令流水线可以两个以上的指令同时执行 (类似车间流水线)。一般的四层流水线架构如下图所示, 不同的颜色格表示不同的指令 .
同时执行多条指令。比如,一边从 memory 读数据,一边进行 fft 处理。我们经常听到的超标量( Superscalar ),超长指令字( VLIW ),乱序执行( Out-of-order execution )等等技术都是发掘指令级并行的技术.
一个人指令同时处理多个数据。我们常听到的向量处理器( vector procesor ),张量处理器( Tensor processor )多数都是利用了 SIMD ( 一条指令可以处理多个数据 ,比如一个向量乘法)技术.
并发与并行的通俗理解参考 知乎问答-指令级并行,线程级并行,数据级并行区别?线程的概念是什么? 如下:
线程级并行主要由下面两种技术的支撑:
超线程技术实现了单个物理核心同时两个线程,也就是别人常说的虚拟内核数。比如单物理核心实现的双线程,它同时可以处理两个线程,它的物理核心数其实是是1个,通过Hyperthreading技术实现的线程级并行(Thread Lever Parallelism)。至于技术细节的实现,这涉及到高速缓存的知识.
线程级并行的好处
虽然在 1960 年代已经通过操作系统已经实现了线程级并发, 但这种频繁的上下文切换意味损失了 CPU 的处理效率.
CPU 的性能和速度取决于 时钟频率 (一般以赫兹或十亿赫兹计算,即 hz 与 Ghz )和 每周期可处理的指令 ( IPC ),两者合并起来就是每秒可处理的指令( IPS )。 IPS 值代表了 CPU 在几种人工指令序列下“高峰期”的执行率,指示和应用.
最后此篇关于处理器基础知识的文章就讲到这里了,如果你想了解更多关于处理器基础知识的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
vue3 快速入门系列 - 基础 前面我们已经用 vue2 和 react 做过开发了。 从 vue2 升级到 vue3 成本较大,特别是较大的项目。所以许多公司对旧项目继续使用vue2,新项目则
C# 基础 C#项目创建 这里注意win10虚拟机需要更新下补丁,不然直接下载visual studio 2022会显示版本不支持 HelloWorld C#的类文件都是以.cs结尾,入口方法为sta
关于 iPhone 内存管理的非常基本的问题: 假设我有一个 viewController,其中有几个 subview 也由 viewController 控制。当我删除顶部 viewControll
我仍在努力适应指针。不是概念——我理解内存位置、匹配可变长度的指针增量等——这是语法。这是一个我认为是我感到困惑/无法直观把握的原因之一: int a = 42; 在一个int大小的内存空间中分配并放
1. 简介 Kafka(Apache Kafka) 是一种分布式流数据平台,最初由LinkedIn开发,并于后来捐赠给Apache软件基金会,成为了一个Apache顶级项目。它被设计用于处理大规
1.想要在命令提示符下操作mysql服务器,添加系统变量。(计算机-系统属性——环境变量——path) 2.查询数据表中的数据; select selection_lis
MySQL表的增删改查(基础) 1. CRUD 注释:在SQL中可以使用“–空格+描述”来表示注释说明 CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Dele
我有一个网页,可以在加载时打开显示模式,在这个模式中,我有一个可以打开第二个模式的链接。当第二个模式关闭时(通过单击关闭按钮或单击模式外部),我想重新打开第一个模式。 对于关闭按钮,我可以通过向具有
使用 Core Data Fetched Properties,我如何执行这个简单的请求: 我希望获取的属性 ( myFetchProp ) 存储 StoreA ,它应该这样做: [myFetchPr
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 8年前关闭。 Improve this
最近,我得到了一个现有的Drupal项目,并被要求改进前端(HTML,JavaScript,CSS)。我在Django,PHP,Ruby等方面具有大量的前端和后端开发经验,但是我没有任何Drupal经
我试图让我的用户通过使用扫描仪类来决定要做什么,但我有一个问题,代码一旦运行就不会激活,并且它不会让我跳过任何行。我的代码如下所示: Scanner input = new Scanner(S
对模糊的标题表示歉意,因为我想不出这个名字是什么。 基本上创建一个计算学生财务付款的小程序。当我运行它时,它计算对象限额没有问题。然而,无论我尝试什么,对象“助学金”似乎除了 0 之外什么也没有提出。
这是我的代码 - main() { double x; double y = pow(((1/3 + sin(x/2))(pow(x, 3) + 3)), 1/3); prin
如果我的术语在这个问题上有误,我们深表歉意。 采取以下功能: i = 1; v = i * 2; for (j = 0; j < 4; j++ ) { console.log(v);
我的应用程序中有不同的类文件。我有 5 个类,其中 2 个是 Activity ,1 个是运行的服务。其他 2 个只是类。这两个类中变量的生命周期是多少。我知道一个 Activity 可以被操作系统杀
例如,一个方法返回一个 List 类型的对象。 public List bojangles () ... 一些代码调用方法FooBar.bojangles.iterator(); 我是 Java 的新
我遇到了一个奇怪的问题,网格的大小不适合我的屏幕。当我使用 12 列大时,它只占据屏幕的 1/3 的中间,请参见图像。我不确定是什么导致了这个问题。我没有任何会导致这种情况发生的奇怪 CSS。我不会在
我尝试使用头文件和源文件,但遇到了问题。因此,我对我正在尝试做的事情做了一个简化版本,我在 CodeBlocks 中遇到了同样的错误(undefined reference to add(double
我正在为我的网格系统使用基础,但这在任何网格系统中都可能是一个问题。我基本上用一个容器包裹了 3 个单元格,但其中一个单元格应该长到页面边框(留在我的 Sampe-Image 中)但这也可能在右侧)。
我是一名优秀的程序员,十分优秀!