cpu-architecture - 现代CPU有压缩指令吗
问题描述
我一直对此感到好奇,因为几乎所有东西都使用了压缩。
典型的现代 CPU 芯片上的硅片中是否有任何基本的压缩支持指令?
如果没有,为什么不包括在内?
为什么这与加密不同,其中一些 CPU 具有对 AES 等算法的硬件支持?
解决方案
它们没有通用压缩指令。
AES 对非常小的数据块进行操作,它接受两个 128 位输入,对它们进行一些重要的计算,产生单个 128 位输出。加速计算的专用指令有很大帮助。
在现代硬件上,无损压缩速度通常受到 RAM 延迟的限制。专用指令无法提高速度,更大更快的缓存可以,但现代 CPU 已经拥有非常复杂的多级缓存。它们已经可以很好地进行压缩了。
如果您需要压缩许多千兆位/秒,有几个 独立的 加速器,但这些不是处理器的一部分,通常是连接到 PCIx 的独立芯片。它们是非常小众的产品,因为大多数用户不需要那么快地压缩那么多数据。
但是,现代 CPU 有很多用于有损多媒体压缩的东西。它们中的大多数都有多个向量指令集扩展(mmx、sse、avx),其中一些指令对例如视频压缩用例有很大帮助。例如,_mm_sad_pu8
(SSE)、_mm_sad_epu8
(SSE2)、_mm256_sad_epu8
(AVX2) 对估计 8 位像素的 8x8 块的压缩误差非常有帮助。AVX2 版本只需几个周期即可处理 4 行块(Haswell 上 5 个周期,Skylake 上 1 个,Ryzen 上 2 个)。
最后,许多 CPU 集成了 GPU,其中包括用于硬件视频编码和解码的专用芯片,通常是 h.264,较新的还有 h.265。这是Intel GPU的表格,AMD 对编码和解码部分有不同的名称。该芯片比内核中的 SIMD 指令更节能。
推荐阅读
- java - Spring JPA OneToOne 映射实体在事务测试中行为不正确
- c# - 为什么 ArrayPool 上的分配比 Stack 上的分配更快?
- c# - Asp.net Web 引用 .net 标准 2.0 库引发运行时异常
- html - Ruby on Rails 无法正确显示 CSS 级联优先级
- java - 如何将包含双精度值的字符数组转换为双精度变量,而不产生字符串对象的开销?
- google-chrome-extension - 将“所有语言环境”屏幕截图放在特定于语言环境的屏幕截图之前
- python - 发生异常:ValueError 所有输入数组必须具有相同的维数
- web-deployment - 无法访问部署到 Azure 服务结构的 Web 应用程序
- javascript - NATIVESCRIPT - 核心 (JS) - 在 TabView 和 BLANK 页面之间切换
- python - python的多个错误解释器问题(即使是virtualenv)