现代CPU有压缩指令吗?

时间:2018-05-04 22:19:42

标签: cpu-architecture instructions

我一直对此感到好奇,因为压缩被用于所有事情。

  • 在典型的现代CPU芯片上硅片中是否有基本的压缩支持说明?

  • 如果没有,为什么不包括它们?

  • 为什么这与加密有所不同,有些CPU对AES等算法有硬件支持?

3 个答案:

答案 0 :(得分:3)

他们没有通用压缩说明。

AES在非常小的数据块上运行,它接受两个128位输入,对它们进行一些非平凡的计算,产生单个128位输出。加速计算的专用指令有很多帮助。

在现代硬件上,无损压缩速度通常受RAM延迟的限制。专用指令无法提高速度,更大更快的缓存可以,但现代CPU已经拥有非常复杂的多级缓存。它们已经足够好用于压缩了。

如果你需要压缩许多千兆位/秒,那就是several standalone accelerators,但这些不是处理器的一部分,通常是连接到PCIx的独立芯片。而且它们是非常小众的产品,因为大多数用户不需要快速压缩那么多数据。

然而,现代CPU有很多东西用于有损多媒体压缩。 它们中的大多数具有多个向量指令集扩展(mmx,sse,avx),并且这些指令中的一些有助于例如视频压缩用例。例如,_mm_sad_pu8(SSE),_mm_sad_epu8(SSE2),_mm256_sad_epu8(AVX2)对于估计8x像素的8x像素块的压缩误差非常有用。 AVX2版本仅在几个周期内处理4行块(Haswell上有5个周期,Skylake上有1个周期,Ryzen上有2个周期)。

最后,许多CPU集成了GPU,其中包括用于硬件视频编码和解码的专用芯片,通常为h.264,较新的也为h.265。这是Intel GPUs的表格,AMD有encodingdecoding部分的单独名称。该芯片比内核中的SIMD指令更节能。

答案 1 :(得分:1)

各种领域的许多应用程序当然可以从中受益并使用数据压缩算法。因此,拥有对压缩和/或解压缩的硬件支持会很不错,类似于对其他流行功能(如加密/解密,各种数学转换,位计数等)的硬件支持。但是,压缩/解压缩通常在大量数据(许多MB或更多)上运行,并且不同的算法表现出不同的存储器访问模式,这些模式可能对传统的存储器层次结构不友好,甚至可能受到它们的不利影响。此外,由于对大量数据进行操作,并且如果直接在主CPU流水线中实现,CPU将在很长一段时间内完全忙于压缩或解压缩。另一方面,考虑加密,例如,加密少量数据是典型的,因此直接在CPU中为硬件提供硬件支持是有意义的。

正是由于这些原因,硬件压缩/解压缩引擎(加速器)已被许多公司作为ASIC或FPGA实现为协处理器(片上,封装或外部)或扩展卡(通过PCIe / NVMe)包括:

也就是说,可以在单个现代x86内核上实现非常高的吞吐量。英特尔于2010年发布了paper,其中讨论了DEFLATE解压缩算法的实现结果,称为igunzip。他们使用了一个基于Nehalem的物理内核,并尝试使用单个逻辑内核和两个逻辑内核。它们实现了超过2 Gbits / s的令人印象深刻的解压缩吞吐量。关键的x86指令是PCLMULQDQ。但是,现代硬件加速器(如QuickAssist)的执行速度可提高约10倍。

英特尔拥有多项相关专利:

虽然很难确定哪些英特尔产品采用了这些专利中提出的技术或设计。

答案 2 :(得分:-1)

有这样的内在因素。例如在AVX512中设置:

  • _mm512_mask_compress_pd_mm512_maskz_compress_pd执行连续存储活动的float32元素VCOMPRESSPD作为AVX-512指令)
  • _mm512_mask_compress_ps_mm512_maskz_compress_ps所以连续存储有效的float64元素。VCOMPRESSPS为AVX-512指令)
  • _mm512_mask_compress_epi32_mm512_maskz_compress_epi32_mm512_mask_compressstoreu_epi32执行连续存储活动的int32元素VPCOMPRESSD作为AVX-512指令)
  • _mm512_mask_compress_epi64_mm512_maskz_compress_epi64执行连续存储有效的int64元素VPCOMPRESSQ作为AVX-512指令)

来自Intel reference

如果处理器试图尽可能通用,那么当增益和使用值值得(由制造商定义)时,它们确实会添加新指令。

我认为这是一个很好的问题,并且有尝试实现这一点。特别是FPGA可以编程为在一个周期内计算一种算法。对于CPU,我怀疑这些指令的大小可能对于投资回报率(投资回报)​​而言太大(空间),并且是特定高端指令的对象(如AVX512中所示),并且不适合适用于GPU。

为支持这一想法,2012年Zip-io: Architecture for application-specific compression of big data,Jun等人(英特尔,麻省理工学院)开发了一个FPGA压缩框架。

我允许自己抛弃摘要:

我们已进入“大数据”时代:网络扩展 和传感器导致数量呈指数级增长 数据。压缩是处理其中许多问题的有效方法 大型数据集和特定于应用程序的压缩算法 在大型工作集的问题上变得流行。不幸, 这些压缩算法通常是计算上的 困难,并且可能导致应用程序级别在实施时减慢 在软件中。为了解决这个问题,我们调查了ZIPIO, FPGA加速压缩的框架。用这个 系统我们证明了一个未经修改的工业软件 工作量可以加速3倍,同时实现 在其数据集中压缩超过1000倍。