话说CPU(不谈硬件)

2023-11-03 02:00
文章标签 cpu 硬件 不谈

本文主要是介绍话说CPU(不谈硬件),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

105915_Fc8m_3241202.png

话说CPU:

    当下的人类环境,计算机离我们有多近,可见一斑。上至眼睛老花的长者,下至1~2岁的“北鼻”,早上起床后到晚上睡觉前,都会忍禁不住喵一眼?。有人会说,你错了,你说的那是手机?。同志们呐,现在的手机不是一台计算机(电脑)吗?有些手机的价格比笔记本电脑还贵,内部配置比较台式机也不相上下。

    提及计算机,首先提到的就是CPU,(有些非“挨踢”行业童鞋们,可能对于内存空间和硬盘空间大小是混淆的,不过不影响使用就行),CPU这个名词连老人都不会弄错了,地球人都知道CPU越快越好.....这里对于硬件相关的制造工艺、针脚、硬件布线、频率、cache...在此我们都不做介绍,这些对消费者和使用者来说,也许是商家的营销标语或是区别不同代产品的标示,有兴趣的童鞋可以自行查阅一些相关资料。

大家或许听过这样的话:“做图,用苹果电脑最好....”,作为一个敬业的IT屌丝,我禁不住问,why?

多数人:“处理快,显示好,外观好看.....”

好吧,外观和显示问题,先不说了,这个不涉及计算机的处理,我们单说“处理快”。所谓处理快,字面理解那应该是一款软件处理图像的能力很强,效率很高吧,这些东西,统统都离不开CPU的处理,那就不得不说说CPU那点事了。

在这里我们着重说一下CPU的指令,为什么要说指令呢?隔壁老王都一直在说“频率快,有能力”呢?

因为跟我们生活和工作最密切相关的就是程序(操作系统其实也是一种程序),简单的理解程序有两个部分组成:

  1. 指令(软件处理图像的各种操作,后台就是发给CPU的一个个指令)
  2. 数据 (需要处理的图像)

这里我们先说指令,程序就是一组只读的指令组成,将这些指令交由CPU处理,就能得到我们想要的结果。其实这也是一系列指令转换的过程,比如,由高级语言(c语言)编写的一个程序,程序员在写程序时就使用了c语言的相关指令,但是这些指令cpu并不认识,需要层层转换为cpu可以运算的指令。

抽象的过程:

人类比较容易识别的指令(高级语言,c语言指令)-->半人类识别指令(低级语言,汇编指令)-->机器语言(硬件指令,比如cpu指令)

这里就说一下机器语言-cpu指令,从指令集说起:

CPU指令集(架构之分)

主要分为两种:

  1. RISC(Reduced Instruction Set Computing,精简指令集计算机)
  2. CISC(Complex Instruction Set Computer,复杂指令集计算机)

以上两种时当前CPU的两种架构,它们的区别在于不同的CPU设计理念和方法。大家不要以为先有的RISC,事实上先有的CISC。为什么叫做精简指令,因为是在复杂指令集的基础上,精简出一些必须用到,单个指令只能实现简单功能,但是多个指令的组合可以实际多种功能。

举个例子,作为强大的吃货,复杂指令就属于比较方便快捷的食品那种,拿北方面食为例,复杂指令集里面已经有了面条、包子、饺子、大饼、馒头...,貌似很方便提供的食物比较丰富,但是我们会发现,饺子或许一个月就吃几次,面条和馒头每天都在吃;饺子对应的指令,利用率很低,也有可能发现,现成的这些食物口味和口感并不是自己想要的,就算面条,可能每个地域的人喜欢的也都不一样,比如南方人喜欢碱水面,北方人可能喜欢拉面、刀削面、拉条子等等。

而作为精简指令集,可能就只提供面粉,至于怎么做,看个人的喜好,味道如何看自己的手艺;这样就能吃到妈妈的味道,在饭店永远也吃不到家里妈妈的味道,也是这个情况。

 CISC和RISC的区别详见下表:

指令系统                         复杂,庞大                     简单,精简  
指令数目                         一般大于200                  一般小于100  
指令格式                         一般大于4                      一般小于4  
寻址方式                         一般大于4                      一般小于4  
指令字长                         不固定                           等长  
可访存指令                      不加限制                        只有LOAD/STORE指令  
各种指令使用频率             相差很大                        相差不大  
各种指令执行时间             相差很大                        绝大多数在一个周期内完成  
优化编译实现                    很难                             较容易  
程序源代码长度                 较短                             较长  
控制器实现方式                 绝大多数为微程序控制     绝大多数为硬布线控制  
软件系统开发时间              较短                             较长

 

CISC和RISC对应的硬件:

一般来说RISC多数用在小型机主机上,IBM的 Power PC为RISC CPU的结构,HP的PA-RISC CPU,CISCO 的CPU也是RISC的结构。 


经常见到的PC中的CPU使用的大都是CISC,Pentium-Pro(P6)、Pentium-II,Cyrix的M1、M2、AMD的K5、K6实际上是改进了的CISC,也可以说是结合了CISC和RISC的部分优点。

题外话:

早期Macintosh,Apple公司的主机使用的是RISC指令集,使用IBM-power pc CPU,算是桌面服务器比较特殊的,一直公认apple power系列处理图像等运算比普通pc好很多,原因也在与此。同样的频率下,使用RISC性能会优于CISC。

从侧面也说明,CPU性能按照业界公布出来的所谓频率....为主要指标,也是忽悠广大群众的,因为CISC的CPU研发周期相对短些,自然整出些指标来宣示自己的进步。大家是否发现,pc已经更新这么高的配置,微软的系统依然还是那样的速度,office依然还是卡顿,动不动还是会hung;

CPU指令(使用权限之分)

上面说了CPU指令集,这个是对硬件或事整体对外的情况,我们说一下指令使用方面的分类:

我们需要提及“环”(Ring)的概念,这个就像孙大圣保护唐僧画的一个圈圈⭕️,叫啥名字多个版本,也能算是个结界。CPU有四个环,0、1、2、3: 其中

环1、环2:保留不用

环0:这是特权环指令,直接由内核接管,也叫内核空间,负责与硬件相关的操作。

环3:这个是用户空间,主要是应用程序调用的普通指令。

x86的保护环

 

题外话:

    可以想象如果环0开放,分分钟黑客可以让全球的电子设备化为乌有......那就天下大同了。

转载于:https://my.oschina.net/xinghaitao/blog/988744

这篇关于话说CPU(不谈硬件)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/334809

相关文章

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C