找回密码
 加入我们
搜索
      
查看: 4651|回复: 24

[CPU] X86是架构还是指令集?和SSE/AVX之间是什么关系?

[复制链接]
发表于 2024-7-10 09:02 | 显示全部楼层 |阅读模式
本帖最后由 ttt5t5t 于 2024-7-10 10:55 编辑

还是说X86或者arm甚至RISCV都可以支持AVX之类的指令集?
那编译的时候有区别吗?下载源码的时候只写了X64和ARM64,也没说针对指令集编译啊?有些软件AVX512有大提升,是在编译的时候决定的吗?
我看了下12400和8CX的CPUZ 二者的指令集似乎一点交集都没有啊
发表于 2024-7-10 09:07 | 显示全部楼层
这类问题是从当前大语言模型里最容易找到答案的

然后去 wiki验证
 楼主| 发表于 2024-7-10 09:43 | 显示全部楼层
chopin1998 发表于 2024-7-10 09:07
这类问题是从当前大语言模型里最容易找到答案的

然后去 wiki验证

论坛看大手子吹水比较快乐
AI的回答没有灵魂
发表于 2024-7-10 09:54 | 显示全部楼层
x86是系列架构的名字,avx那些是指令集
至于你说的x64,这玩意其实叫AMD64又名x86_64姑且算是个扩展
是否使用某些指令集通常的编译时决定,要看编译器行为
目前msvc默认行为没记错的话如果编译x64最高用到sse2
想avx512的话/arch:AVX512,具体情况看下文
https://learn.microsoft.com/en-u ... h-x86?view=msvc-170
不过通常来说,除非你自己写汇编或者是用immintrin.h里面的东西,不然基本上不会编译出avx512f的相关玩意
发表于 2024-7-10 10:14 | 显示全部楼层
x86是基础指令集,后面的MMX、SSE、AVX、AMD64(X86-64)、AVX512、VNNI之类的都是不断对这个指令集的扩展。
发表于 2024-7-10 10:18 | 显示全部楼层
x86是指令集,286,386.486,Pentium,Core,各种lake是架构
发表于 2024-7-10 10:23 | 显示全部楼层
thinkcore 发表于 2024-7-10 10:14
x86是基础指令集,后面的MMX、SSE、AVX、AMD64(X86-64)、AVX512、VNNI之类的都是不断对这个指令集的扩展 ...

补充:
MultiMedia eXtension简称MMX
Streaming SIMD Extensions简称SSE
Advanced Vector Extensions简称AVX
名称已经包含“扩展”字眼
发表于 2024-7-10 10:30 | 显示全部楼层
目前只有Intel和zen4及之后AMD的x86支持AVX512指令集,海光x86、arm、riscv不支持AVX指令集。
发表于 2024-7-10 10:33 | 显示全部楼层
本帖最后由 Superdoll 于 2024-7-10 10:40 编辑

正常来说x86是架构, 整个处理器家族包括开始的16位实模式处理器到32位的保护模式处理器到后来的64位处理器,都叫x86架构处理器. 同样的,这些处理器分别有其对应的16位指令集和32位指令集和64位指令集, x86这个名字也可以在总体上指代这个架构处理器用的指令集.

造成混淆的原因是很多地方用x86来特指其中的32位处理器和32位指令集对应的环境 (x64同理). 比如驱动程序目录中,x86目录下对应用于(使用32位x86指令集,可能是保护模式或者兼容模式)的32位操作系统下的驱动.这个名字严格说是不对的,应该叫i386. 同理,驱动的x64目录下对应用于(使用64位x86指令集, 长模式)的64位操作系统下的驱动.这个名字严格说也不对,应该叫x86-64或者amd64甚至intel 64.


 楼主| 发表于 2024-7-10 10:53 | 显示全部楼层
Superdoll 发表于 2024-7-10 10:33
正常来说x86是架构, 整个处理器家族包括开始的16位实模式处理器到32位的保护模式处理器到后来的64位处理器, ...

好复杂 不过二者的指令集是没有交集的对吧
发表于 2024-7-10 11:01 | 显示全部楼层
x86是(基础)指令集架构  instruction set architecture (ISA)
mmx/sse/avx之类的都是x86的指令集扩展,实际上都是各种simd

arm/risc-V/mips之类的是另外的指令集架构,也都有各自的simd扩展
发表于 2024-7-10 11:11 | 显示全部楼层
ttt5t5t 发表于 2024-7-10 10:53
好复杂 不过二者的指令集是没有交集的对吧

这个简单的说是这样, 比如64位处理器是可以执行32位指令集的,但是得切换到兼容模式下执行, 在长模式下不行.  就好像32位处理器可以在虚拟8086模式下执行传统实模式程序一样.
发表于 2024-7-10 11:14 | 显示全部楼层
绝大部分情况下,处理器架构和指令集是有直接对应关系的。

但是架构不大的更改实现改指令集也是有实际例子的
最经典的就是Power、PowerPC、Z Series,一般来说Power先上市,Z和PPC基于之前的Power改出来。
如果说Power和PowerPC还能算是阉割部分功能,这Z可是CISC指令集呀。
发表于 2024-7-10 11:25 | 显示全部楼层
af_x_if 发表于 2024-7-9 22:14
绝大部分情况下,处理器架构和指令集是有直接对应关系的。

但是架构不大的更改实现改指令集也是有实际例子 ...

因为Z又挂了许多coprocessor来加速,DB2可以直接利用这些指令
发表于 2024-7-10 11:30 | 显示全部楼层
当年AMD也是X64的Zen1和ARMv8的K12一起开发,共用基本设计,准备改一改出俩。
当然因为最后没成,不好作为代表性例子。
发表于 2024-7-10 11:46 来自手机 | 显示全部楼层
af_x_if 发表于 2024-7-10 11:30
当年AMD也是X64的Zen1和ARMv8的K12一起开发,共用基本设计,准备改一改出俩。
当然因为最后没成,不好作为 ...

反正x86有解码器,直接解码成arm是吧。反正内核早就是risc了。
发表于 2024-7-10 11:47 | 显示全部楼层
x86属于ISA(指令集架构,Instruction Set Architecture), 类似于一种规范。大英家的xxLake跟农企的Zen *两类处理器微架构都是对这个规范的实现。

在这个统一规范的前提下操作系统只需要保持对x86 ISA保持兼容性即可,不需要特别去适配intel_x86, amd_x86这种情况,除非有用到某家的扩展指令集。
发表于 2024-7-10 13:08 | 显示全部楼层
aibo 发表于 2024-7-10 11:46
反正x86有解码器,直接解码成arm是吧。反正内核早就是risc了。

现代ARM处理器也是走解码器然后微码控制的。
发表于 2024-7-10 14:03 | 显示全部楼层
X86通常用来指代一种计算机处理器的架构,它最初由Intel推出,后来被AMD等其他制造商采纳。X86架构定义了处理器的基本设计、功能和指令集。X86指令集是一组定义了处理器可执行的操作的指令。在X86架构下,包含了众多指令集,例如SSE(Streaming SIMD Extensions)、AVX(Advanced Vector Extensions)等。

SSE和AVX是X86指令集的一部分,它们是为了优化处理器在执行多媒体和向量化计算时的性能而引入的。SSE指令集最早出现于Intel的Pentium III处理器中,用于执行单指令多数据(SIMD)操作,以加速多媒体数据处理。AVX则是在SSE的基础上发展而来,引入了更广泛的向量化指令,能够更高效地利用处理器的并行性能,提高计算速度。

因此,SSE和AVX是X86架构下的特定指令集扩展,它们的引入旨在提高处理器在执行特定类型计算时的效率,并加速多媒体处理、科学计算、图形处理等应用。
发表于 2024-7-10 15:53 | 显示全部楼层
本帖最后由 ouqihang 于 2024-7-10 15:59 编辑

AVX2用来卡国产CPU,如果不支持AVX那运行速度会很慢,甚至打不开(某些游戏)。可以看看AVX和AVX2是什么时候的指令集了,很多软件都需要。SSE更老但国产CPU有。
好像AVX开放了但都是10几年的东西了,新的AVX2 国产应该还没。
发表于 2024-7-10 17:20 | 显示全部楼层
ttt5t5t 发表于 2024-7-10 10:53
好复杂 不过二者的指令集是没有交集的对吧

除了sse以外,i和a的两家的其他指令集严格上不互相兼容
发表于 2024-7-11 00:13 | 显示全部楼层
CPU-Z的描述其实不完整的,比较详尽的我建议:
1. AIDA64/HwInfo 处理器特性
2. Sysinternals Suite的Coreinfo 命令行工具(微软商店可下)
3. Linux内核的/proc/cpuinfo

x86(x86-64/amd64)有一套基础指令和各种可选的拓展指令,我们通常关心的是AVX、AVX2、AVX512-XXX,对于有做相应汇编优化的程序,一般是会在运行时检测这些指令的支持情况,例如支持时使用AVX2提高性能,不支持时使用SSE2(SSE2是所有x86-64处理器都支持的扩展指令集)

可以通过编译器编译选项控制最低要求的扩展指令集,例如MSVC的/arch选项,GCC的-march/-mcpu选项,gc的GOAMD64环境变量,例如设置GOAMD64=v3编译的golang程序会拒绝在不支持AVX的处理器上运行。

通常会将一组扩展指令打包起个版本号,例如不是很流行x86-64 Microarchitecture Level https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels Golang在用。

ARM也有这种东西,例如 ARMv8.0/8.1/8.2/9.0/9.1
发表于 2024-7-11 06:25 | 显示全部楼层
ricercar 发表于 2024-7-10 10:18
x86是指令集,286,386.486,Pentium,Core,各种lake是架构

x86 既是架构、也是指令集的名称

Core 等是硬件架构的开发代号。
发表于 2024-7-11 06:25 | 显示全部楼层
x86 既是架构、也是指令集的名称
发表于 2024-7-11 09:01 | 显示全部楼层
rubycon2008 发表于 2024-7-11 06:25
x86 既是架构、也是指令集的名称

因为架构这个词本来就是泛指,指令集,产品迭代都是具体所指
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2025-4-28 14:22 , Processed in 0.014014 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表