我一直对此感到好奇,因为压缩被用于所有事情。
在典型的现代CPU芯片上硅片中是否有基本的压缩支持说明?
如果没有,为什么不包括它们?
为什么这与加密有所不同,有些CPU对AES等算法有硬件支持?
答案 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有encoding和decoding部分的单独名称。该芯片比内核中的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指令)如果处理器试图尽可能通用,那么当增益和使用值值得(由制造商定义)时,它们确实会添加新指令。
我认为这是一个很好的问题,并且有尝试实现这一点。特别是FPGA可以编程为在一个周期内计算一种算法。对于CPU,我怀疑这些指令的大小可能对于投资回报率(投资回报)而言太大(空间),并且是特定高端指令的对象(如AVX512中所示),并且不适合适用于GPU。
为支持这一想法,2012年Zip-io: Architecture for application-specific compression of big data,Jun等人(英特尔,麻省理工学院)开发了一个FPGA压缩框架。
我允许自己抛弃摘要:
我们已进入“大数据”时代:网络扩展 和传感器导致数量呈指数级增长 数据。压缩是处理其中许多问题的有效方法 大型数据集和特定于应用程序的压缩算法 在大型工作集的问题上变得流行。不幸, 这些压缩算法通常是计算上的 困难,并且可能导致应用程序级别在实施时减慢 在软件中。为了解决这个问题,我们调查了ZIPIO, FPGA加速压缩的框架。用这个 系统我们证明了一个未经修改的工业软件 工作量可以加速3倍,同时实现 在其数据集中压缩超过1000倍。