首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SIMD、MMX、SSE、AVX、3D Now!、NEON

这些XMM寄存器用于4个单精度浮点数运算的SIMD执行,并可以与MMX整数运算或x87浮点运算混合执行。...2001年在Pentium 4上引入了SSE2技术,进一步扩展了指令集,使得XMM寄存器上可以执行8/16/32位宽的整数SIMD运算或双精度浮点数的SIMD运算。这使得 SIMD技术基本完善。...SSE2 SSE2是 Intel在Pentium 4处理器的最初版本中引入的,但是AMD后来在Opteron 和Athlon64处理器中也加入了SSE2的支持。...SSE2指令集添加了对64位双精度浮点数的支持,以及对整型数据的支持,也就是说这个指令集中所有的MMX指令都是多余的了,同时也避免了占用浮点数寄存器。这个指令集还增加了对CPU快取的控制指令。...AMD对它的扩展增加了8个XMM寄存器,但是需要切换到64位 模式(x86-64/AMD64)才可以使用这些寄存器。Intel后来在其Intel 64架构中也增加了对x86-64的支持。

1.5K10

Java 17 更新(2):没什么存在感的 strictfp, 这回算是回光返照了

这恐怕没什么令人惊喜的,稍微有点儿踩坑经历的小伙伴都不会这么被坑,对吧,对吧,对吧。...,在上世纪 90 年代,Java 虚拟机为了保持原有的浮点型语义,在兼容 x86 架构的处理器上执行 x87 指令集(是 x86 指令集的一个关于浮点型的子集)的情况时耗费了很大的开销,性能上令人很不满意...,于是加入 strictfp 来表示原有的浮点型语义(即 IEEE 754 规定的那样),而默认的浮点型则采用了更加宽松的语义,这样算是一个折中的方案。...在 SSE2 (Streaming SIMD Extensions 2) 扩展指令集随着奔腾 4 发布(2002年4月)以后,Java 虚拟机有了更直接的方式来实现严格的浮点型语义,于是这个问题就不再存在了...好啦,关于 Java 浮点型的语义调整的更新我们就简单介绍这么多。反正说多了也没啥用,知道怎么出去吹牛就行了。

1.6K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux内核13_1-进程切换是对FPU单元的处理_X86

    使用这些指令可以操作CPU中的浮点寄存器。很显然,使用这些浮点运算指令的进程在进程切换的时候,需要保存属于它的硬件上下文中的浮点寄存器内容。 随后的奔腾系列处理器,因特尔引入了一组新的汇编指令。...这些寄存器是独立的,和FPU和MMX寄存器没有重叠,所以SSE扩展和FPU/MMX指令可以混合使用。奔腾4又又引入了新的扩展:SSE2扩展,是在SSE基础上的扩展,支持更高精度的浮点数。...SSE2扩展和SSE扩展使用相同的XMM寄存器。 X86微处理器不会自动在TSS中保存FPU、MMX和XMM寄存器。但是,从硬件上,支持内核只保存所需要的寄存器。...该标志被清除的时候有两种情况: 调用execve()系统调用,启动新进程的时候。因为控制单元绝不会再返回到之前的程序中,所以存储在thread.i387中的数据就没有了意义。...2 保存FPU寄存器 我们在分析进程切换的时候,知道主要的工作都是在__switch_to()宏中完成的。

    73620

    浅析Clickhouse的向量化执行

    现代计算机系统概念中,它是通过数据并行以提高性能的一种实现方式(其他的还有指令级并行和线程级并行),它的原理是在CPU寄存器层面实现数据的并行操作。CPU是如何实现SIMD的呢?答案是扩展指令集。...随着新指令的扩充,又有了SSE2、SSE3、SSSE3、SSE4(包含4.1和4.2)等新版本。...我们可以通过cpuid类软件获得处理器对SSE指令集的支持信息,下图以笔者自用MacBook Pro中的Intel Core i9-9880H为例。...一个XMM寄存器原本只能存储一种数据类型: 4个32位单精度浮点数 SSE2又扩展到能够存储以下类型: 2个64位双精度浮点数 2个64位/4个32位/8个16位整数 16个字节或字符 SSE的指令分为两大类...标量指令只对XMM寄存器中的最低位数据进行计算,打包指令则是对所有数据进行计算。下图示出SSE1中,单精度浮点数乘法的标量和打包运算。

    61520

    intel处理器历代产品_英特尔酷睿历代提升

    在告别 13 年传奇品牌奔腾之后,我们又迎来新一代酷睿 i 双核处 理器。现在,我们就来回顾一下英特尔处理器 40 年来的发展历程。...和 8086 一样,它 也没有浮点运算单元(FPU),不过它可以使用 X87 协处理器。它的最大频率为 12.5MHz,相比之下,竞争对手的速度已经能够达到 25MHz 了。...MMX 技术是 Intel 最新发明的一项多媒体增强指令集技术,它的英文全称可 以翻译成“多媒体扩展指令集”。...NetBurst 结构具有不少明显的优点:20 段的 超级流水线、高效的乱序执行功能、2 倍速的 ALU、新型的片上缓存、SSE2 指令 扩展集和 400MHz 的前端总线等等。...网络数据流单指令多数据扩展 2(SSE2) 通过增加的 144 条新指令,SSE2 具有更强多媒体增强指令和数据流单指令。

    2.2K30

    Linux x86 和ARM什么区别?

    而ARM体系结构目前被公认为是业界领先的32位嵌入式 RISC 微处理器结构,所有 ARM 处理器共享这一体系结构。 因此我们可以从其所属体系比较入手,来进行X86指令集与ARM指令集的比较。...由于RISC处理器的指令集是精简的,它的内存管理单元、浮点单元等都能设计在同一块芯片上。...X86指令集 X86指令集是Intel为其第一块16位CPU(i8086)专门开发的,后来的电脑中为提高浮点数据处理能力而增加的X87芯片系列数学协处理器以及使用X87指令,以后就将X86指令集和X87...X86指令集只有8个通用寄存器,所以,CISC的CPU执行是大多数时间是在访问存储器中的数据,而不是寄存器中的。这就拖慢了整个系统的速度。...解码分为硬件解码和微解码,对于简单的x86指令只要硬件解码即可,速度较快,而遇到复杂的x86指令则需要进行微解码,并把它分成若干条简单指令,速度较慢且很复杂。

    2.3K10

    i386和i686的区别

    i686指的是Pentium Pro以及此后的Intel IA32 CPU,也就是平常我们所说的P6系列处理器。 i386不用说了,泛指80386以后的。...i686是pentiumpro及以后的通用arch,而i386是所有x86的通用arch,i386包括而i686没有包括的就是386、486、586(pentium)、pentium-mmx 现在应该没有人还在用...十分使用扩展指令基对大规模计算来说很重要,如昨天加了-mmmx -march=i686打包了一下GIMP,发现有些处理(如马赛克滤镜)快了5倍以上。...另外,如果浮点运算使用-mfpmath=sse -msse的话,浮点除法速度有近百倍的提高,这对浮点运算偏重的如音、视频解码,编码很重要。...希望开发者能考虑一下,把/usr/lib/rpm/rpmrc中的buildtranslator xxx:i386改为 xxx:i686,并在optflag i686:中加入 -mmmx。

    1.8K20

    i386i686x86-64的区别

    i686指的是Pentium Pro以及此后的Intel IA32 CPU,也就是平常我们所说的P6系列处理器。 i386不用说了,泛指80386以后的。...i686是pentiumpro及以后的通用arch,而i386是所有x86的通用arch,i386包括而i686没有包括的就是386、486、586(pentium)、pentium-mmx 现在应该没有人还在用...十分使用扩展指令基对大规模计算来说很重要,如昨天加了-mmmx -march=i686打包了一下GIMP,发现有些处理(如马赛克滤镜)快了5倍以上。...另外,如果浮点运算使用-mfpmath=sse -msse的话,浮点除法速度有近百倍的提高,这对浮点运算偏重的如音、视频解码,编码很重要。...希望开发者能考虑一下,把/usr/lib/rpm/rpmrc中的buildtranslator xxx:i386改为 xxx:i686,并在optflag i686:中加入 -mmmx。

    4.9K10

    使用STL vector 作为XNAMath快速灵活的SIMD数据容器

    在做过一些研究后, 我发现XNAMath最符合我做SIMD移植的要求. 它只有5个头文件, 全是内联的SSE/SSE2指令, 并且有完善的文档和支持....最棒的是它可以像在Direct3D中那样应用在OpenGL中. 把矩阵转置成列主序的消耗并不是很大, 毕竟头文件就在那里, 实在不行还可以自己改嘛....缺点就是这是个预处理指令, 你必须书写和编译相同的SSE/SSE2和FPU指令的代码, 并且测试哪一个版本适用于目标平台. 当然, 除非你想支持非SSE处理器, 否则不会遇到这种状况....函数参数也不是16位对齐的, 它会产生一个编译错误'C2719'. 非对齐类型XMFLOAT4是一个包含4个单精度浮点数的结构体, 可以用在堆内存对齐的vector类中....不要以为参数是XMFLOAT4A类型的, 我们的数据在容器中是XMFLOAT4类型(XMFLOAT4在堆上对齐, 而XMFLOAT4A因为'C2719'错误不能使用).

    78430

    cpu(了解了以下8条,没人敢和你忽悠CPU)

    说白了,在台式机中,我们所说的超频,都是超CPU的外频(当然一般情况下,CPU的倍频都是被锁住的)相信这点是很好理解的。但对于服务器CPU来讲,超频是绝对不允许的。...等都是CPU的扩展指令集,分别增强了CPU的多媒体、图形图象和Internet等的处理能力。我们通常会把 CPU的扩展指令集称为"CPU的指令集"。...X86指令集是Intel为其第一块16位CPU(i8086)专门开发的,IBM1981 年推出的世界第一台PC机中的CPU—i8088(i8086简化版)使用的也是X86指令,同时电脑中为提高浮点数据处理能力而增加了...X87芯片,以后就将X86指令集和X87指令集统称为X86指令集。...核心,完全相同的运行频率;最后,尽可能保持相同的产品序列编号,因为两个生产批次的CPU作为双处理器运行的时候,有可能会发生一颗CPU负担过高,而另一颗负担很少的情况,无法发挥最大性能,更糟糕的是可能导致死机

    1.5K40

    各种开源汇编、反汇编引擎的非专业比较

    指令集支持不全,由于Ollydbg年久失修,现在甚至连对MMX指令集都不全,而现在的INTEL/AMD的扩展指令集标准又更新了多个版本,什么SSE5/AVX/AES/XOP就更别提了,完全无法解析。...在使用过程中基本上没有发现什么明显的缺点,不常用的新的扩展指令集也实现了不少。   ...目前实现的扩展指令集有: FPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, VMX, CLMUL, AES, MPX   同时它也给不同种类的指令进行了分类...udis86支持的X86扩展指令集有: MMX, FPU (x87), AMD 3DNow, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AES, AMD-V,...,因为它解码速度虽然不行,但是BUG很少(因为LLVM有苹果那么大个公司做支撑),而流图和指令分析(还不完善)目前仍然使用的BeaEngine,这也是没办法的事,毕竟性能也很重要。

    3.5K30

    Objective-C源文件编译过程

    token指的是程序的一个基本组成单元—词法单元。token的作用相当于一个句子中的单词,从某种意义上来说,一个单词无论出现在哪个句子中,它代表的意思都是一样的,是一个表义的基本单元。...注意:这里的位置是从1开始,而非0。 而上述token中的'int'、'main' 就是词素。...代码生成的一个至关重要的方面是合力分配寄存器以存放变量的值。 LLVM IR 有些编译器的结构单纯的分为前端和后端,比如GCC。而LLVM的结构并不是单纯的分为前端和后端。...LLVM编译器集合是围绕着一组精心设计的中间表示形式而创建的,这些中间表示形式使得我们可以把特定语言的前端和特定目标机的后端相结合。...如果将来LLVM需要支持一款新的机器架构,只需要针对这款机器架构提供一个新的后端。而LLVM IR优化器是通用的。这样一来LLVM就变得易扩展。

    9.6K51

    跟Google学写代码--Chromiumbase--cpu源码学习及应用

    Chromium是一个伟大的、庞大的开源工程,很多值得我们学习的地方。...SSE(Streaming SIMD Extensions)是英特尔在AMD的3D Now!发布一年之后,在其计算机芯片Pentium III中引入的指令集,是MMX的超集。...SSE2 SSE2是Intel在Pentium 4处理器的最初版本中引入的,但是AMD后来在Opteron 和Athlon 64处理器中也加入了SSE2的支持。...SSE2指令集添加了对64位双精度浮点数的支持。这个指令集还增加了对CPU快取的控制指令。AMD对它的扩展增加了8个XMM寄存器,但是需要切换到64位模式(AMD64)才可以使用这些寄存器。...以及对超执行绪技术的支持。 SSSE3 SSSE3是Intel针对SSE3指令集的一次额外扩充,最早内建于Core 2 Duo处理器中。

    98770

    Python(一)

    请确保你在缩进中使用数量一致的空格,否则你的程序将不会运行,或引发不期望的行为。错误的缩进可能会导致错误,我们不能任意开始一个新的语句块。...字符串是不可变的 这意味着一旦你创造了一串字符串,你就不能再改变它。 格式化方法 有时候我们会想要从其他信息中构建字符串。我们会使用 format() 函数。...其次,转换至字符串的工作将由 format 方法自动完成,而不是如这般需要明确转换至字符串。...在一个字符串中,一个放置在末尾的反斜杠表示字符串将在下一行继续,但不会添加新的一行。...-8') # b'\xe4\xb8\xad\xe6\x96\x87' 反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是 bytes。

    78720

    armeabi-v7a架构(sv7a)

    armeabi与armeabi-v7a表示支持不同的CPU类型armeabi是指的该so库用于ARM的通用CPU,而v7a的CPU支持硬件浮点运算。...v5 cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm v7 cpu。...SSE: 英特尔推出的类似 NEON 的工具SSE 指面向英特尔架构(IA)的SIMD 流指令扩展。 目前,英特尔® 凌动™ 最高支持 SSSE3(补充 SIMD 流指令扩展 3)。...如欲了解详细信息,请参阅英特尔《IA-32 和 IA-64 软件开发人员手册》中的“第一卷: 基础架构”部分。...它提供 SSE、SSE2、SSE3 和 SSSE3 的操作码。注意,数据运算通常会涉及到处理基于精度的打包浮点数值;并且需要在 XMM 寄存器之间,或在这些寄存器与内存之间批量传输数据。

    1.3K10
    领券