背景
前段时间进行了CPU指令集的一些简单的学习.
了解到不同架构,不同制程之间的运算性能差异巨大
当时一般是采用比较多的工具获取一个中间数值进行比例
前几天发现有一个 cpufp的功能.
所以也拿下来进行一下简单那验证.
一些简单的理解
SSE: SSE(Streaming SIMD Extensions) 1999年开始推出
是 Intel 开发的一系列 SIMD(Single Instruction, Multiple Data)指令集扩展,
用于加速处理多媒体、科学计算和其他高性能计算任务。
SSE 旨在通过并行处理多个数据元素来提高计算性能,从而支持高效的数据处理和计算。
SSE 指令通常操作 128 位的 XMM 寄存器,
这些寄存器可以容纳 4 个 32 位浮点数或 2 个 64 位浮点数。
AVX: AVX(Advanced Vector Extensions)2011年推出
是 Intel 和 AMD 提出的 SIMD(Single Instruction, Multiple Data)指令集扩展,
用于提高浮点运算性能,特别是在处理高性能计算、图形处理和科学计算等任务时。
AVX 指令集在 SSE(Streaming SIMD Extensions)基础上引入了许多增强功能,
包括更大的寄存器宽度和更高效的指令。
256 位寄存器:引入了 YMM 寄存器,扩展了 SSE 的 128 位寄存器到 256 位,能够处理更多的数据元素。
浮点运算:主要支持单精度(32 位)和双精度(64 位)浮点数的运算。
新的指令:提供了一些新指令,用于改进向量运算的性能,如 VADDPS, VMULPS, VRSQRTPS 等。
AVX-512
AVX-512 在 2016 年随 Intel 的 Skylake 微架构推出。
512 位寄存器:引入了 ZMM 寄存器,将寄存器宽度扩展到 512 位,能够处理更多的数据元素。
更多指令:增加了更多的指令和操作模式,包括掩码操作、压缩/解压缩等。
增强的向量操作:支持更复杂的向量操作,如 VADDPS, VMULPS, VPERM2F128(数据重新排列)
矢量化:通过支持 512 位的寄存器,AVX-512 提供了更高的并行处理能力。
FMA: FMA(Fused Multiply-Add)
指令是一种高效的数学运算指令,用于同时执行乘法和加法操作。
这种指令可以在单一指令中完成两个基本操作,从而提高计算精度和性能,
特别适合于浮点运算密集的应用程序,如科学计算、图形处理和机器学习等领域。
FMA 指令执行 a * b + c 这种操作,其中 a、b 和 c 是浮点数。
它首先执行 a * b,然后将结果加上 c,这一过程是原子性的,
不会受到舍入误差的影响,从而提高了计算精度。
ARM FMA 指令集
在 ARMv8.1-A 和更高版本的架构中,引入了 FMA 指令。
它们属于 ARM 的 Advanced SIMD 指令集(也称为 NEON)。
这些指令能够处理 128 位和 64 位的浮点数运算,并支持单精度和双精度浮点数。
关于ARM的:
在 ARM 架构中,FMLA.VV 是一种用于 SIMD(Single Instruction, Multiple Data)操作的指令,
特别用于向量运算。FMLA 指令的基本功能是执行“乘法加法”操作,并将结果累加到目标寄存器中。
FMLA.VV 是一种用于向量的 Fused Multiply-Add 指令。
操作:result = (a * b) + c,其中操作是逐元素进行的。
应用:在科学计算、图形处理和机器学习中广泛使用。
性能:通过向量化操作,提高了计算效率和性能。
部分CPU的单核心 FMA 的算力能力
CPU型号 CPU指令集 CPU具体运算指令 测试结果
HG7285 FMA FMA(f32,f32,f32) 39.304 GFLOPS
FT2500 asimd fmla.vv(f32,f32,f32) 16.698 GFLOPS
6150 AVX512F FMA(f32,f32,f32) 217.25 GFLOPS
6342(VM) AVX512F FMA(f32,f32,f32) 202.38 GFLOPS
6342 AVX512F FMA(f32,f32,f32) 203.97 GFLOPS
说明 物理机的 6342 其实还有一个AVX512VNNI指令集
他的计算性能效果最好, 但是是一个矩阵的性能计算 与FMA的计算结果不好直接对比
6342 AVX512_VNNI DP4A(s32,u8,s8) 815.73 GOPS
关于多核心和超线程
6342 24c*2 96线程的情况
96个thread:
| AVX512F | FMA(f32,f32,f32) | 9.7786 TFLOPS |
48个thread:
| AVX512F | FMA(f32,f32,f32) | 9.7671 TFLOPS |
24个thread: 绑定第一个CPU
| AVX512F | FMA(f32,f32,f32) | 4.8897 TFLOPS |
1个thread: 绑定0号线程
| AVX512F | FMA(f32,f32,f32) | 203.97 GFLOPS |
6150 18c*4 144线程
144个thread:
| AVX512F | FMA(f32,f32,f32) | 11.158 TFLOPS |
72个thread:
| AVX512F | FMA(f32,f32,f32) | 11.334 TFLOPS |
18个thread:
| AVX512F | FMA(f32,f32,f32) | 2.8527 TFLOPS |
1个thread: 绑定0号线程
| AVX512F | FMA(f32,f32,f32) | 217.25 GFLOPS |
简单总结
1. 虚拟化只能虚拟自己认识的指令集, 最新的指令集可能无法虚拟化,导致性能损失.
2. 三代志强因为修复 meltdown和spectre等安全漏洞,AVX等的提升不大,甚至下降.
3. 四路服务器的AVX多线程损耗, 比两路大非常多.
二路服务器核心数是四路的67% 但是计算能力是 87%
并且二路的单核心计算能力稍差.
4. 超线程对AVX等需要大量高级寄存器的指令集没有帮助, 因为指令集数量有限.
文章转载自济南小老虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




