Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

使用英特尔 AVX-512 更快地解析 JSON

Posted on 2022-05-26

肖像2018facebook.jpg

许多最新的英特尔处理器都受益于称为 AVX-512 的新指令系列。这些指令在宽寄存器(最多 512 位)上运行,并遵循单指令多数据 (SIMD) 范例。这些新的 AVX-512 指令允许您打破一些速度记录,例如以内存副本的速度解码base64数据。

大多数现代处理器都有 SIMD 指令。 AVX-512 指令更宽(每个寄存器更多位),但这不一定是它们的主要吸引力。如果您只是采用现有的 SIMD 算法并将它们应用于 AVX-512,您可能不会获得您想要的那么多好处。的确,更宽的寄存器是有益的,但在超标量处理器(每个周期可以发出多条指令的处理器)中,每个周期可以发出的指令数量同样重要,甚至更多。通常,512 位 AVX-512 指令更昂贵,处理器每个周期可以发出更少的指令。要充分利用 AVX-512,您需要仔细设计代码。英特尔逐步发布这些指令的事实变得更具挑战性:最近的处理器有许多新的强大的 AVX-512 指令,这些指令最初是不可用的。因此,AVX-512 不是“一个东西”,而是一系列指令集。

此外,AVX-512 指令的早期实现通常会导致可测量的降频:处理器会在使用这些指令后一段时间内降低其频率。值得庆幸的是,支持 AVX-512(Rocket Lake 和 Ice Lake)的最新英特尔处理器已经取消了这种系统化的频率限制。值得庆幸的是,在运行时很容易检测到这些最新的处理器。

亚马逊强大的英特尔服务器基于 Ice Lake。因此,如果您将软件应用程序部署到功能强大的服务器上的云中,您可能已经对 AVX-512 有很好的支持!

几年前,我们发布了一个名为 simdjson 的非常快速的 C++ JSON 解析器。作为解析器,它在某种程度上是独一无二的,因为它严重依赖 SIMD 指令。在几个指标上,它曾经是并且仍然是最快的 JSON 解析器,尽管已经出现了其他有趣的竞争对手。

最初,我为 simdjson 编写了一个快速而肮脏的 AVX-512 内核。我们从未合并它,一段时间后,我只是将其删除。然后我就忘记了。

感谢有才华的英特尔工程师(Fangzheng Zhang 和 Weiqiang Wan)的贡献,以及本博客读者(Kim Walisch 和 Jatin Bhateja)的间接贡献,我们制作了一个新的闪亮的 AVX-512 内核。与往常一样,请记住,simdjson 是许多人的工作,是一个由数十名贡献者组成的整个社区。我必须对第一次写信给我关于 AVX-512 端口的张方正表示感谢。

我们刚刚发布了最新版本的 simdjson 。它打破了新的速度记录。

让我们考虑一个有趣的测试,您试图扫描整个文件(跨越千字节)以找到与某个标识符对应的值。在simdjson中,代码如下:

自动文档=解析器。迭代( json ) ;       
   for (自动推文: doc.find_field ( “状态” ) ) {   
      如果( uint64_t ( tweet.find_field ( “ id ” ) ) == find_id ) {   
        结果=推文。 find_field ( “文本” ) ;   
        返回真;   
      }   
    }   
    返回假;   

在带有 GCC 11 的 Tiger Lake 处理器上,处理速度提高了一倍,以每秒处理的输入字节数表示。

simdjson(512 位 SIMD):新 7.4 GB/秒
simdjson(256 位 SIMD):旧 4.6 GB/秒

速度增益非常重要,因为在这个任务中,我们大多数只是读取数据,而我们做的二次处理相对较少。我们不会从 JSON 数据中创建树,也不会创建数据结构。

simdjson 库有一个缩小功能,它只是从输入中去除不必要的空格。也许令人惊讶的是,我们的速度是之前基线的两倍多:

simdjson(512 位 SIMD):新 12 GB/秒
simdjson(256 位 SIMD):旧 4.3 GB/秒

另一个合理的基准是将输入完全解析为具有完全验证的 DOM 树。解析标准 JSON 文件 ( twitter.json ),我获得了近 30% 的收益:

simdjson(512 位 SIMD):新 3.6 GB/秒
simdjson(256 位 SIMD):旧 2.8 GB/秒

虽然 30% 听起来可能并不令人兴奋,但我们是从一个快速的基线开始的。

我们能做得更好吗?肯定的。有许多我们尚未使用的 AVX-512。我们不使用三元布尔运算 ( vpternlog )。我们没有使用新的强大的 shuffle 函数(例如, vpermt2b )。我们有一个共同进化的例子:更好的硬件需要新的软件,这反过来又使硬件大放异彩。

当然,要获得这些新优势,您需要具有足够 AVX-512 支持的最新 Intel 处理器,显然,您还需要相对较新的 C++ 处理器。最近的一些笔记本电脑级英特尔处理器不支持 AVX-512,但如果您依赖 AWS 并拥有大型英特尔节点,您应该没问题。

您可以直接获取我们的版本或等待它到达标准包管理器之一(MSYS2、conan、vcpkg、brew、debian、FreeBSD 等)。

原文: https://lemire.me/blog/2022/05/25/parsing-json-faster-with-intel-avx-512/

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Christopher Butler
  • Colin Percival
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Dustin Curtis
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Liz Danzico
  • Lou Plummer
  • Luke Wroblewski
  • Matt Baer
  • Matt Stoller
  • Matthias Endler
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • Sam Rose
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • thesephist
  • Thinking Deep & Wide
  • Tim Kellogg
  • Understanding AI
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme