主要观点:今年初主要网络引擎(WebKit/Safari 和 Chromium/Chrome/Edge/Brave)利用 SIMD 指令加速 HTML 解析,WebKit 和 Chromium 解决的问题是尽快跳转到下一个目标字符,如<、&、\r 和\0,最初使用 std::find_first_of 或 SearchValues 类,后采用向量化分类,文中还介绍了类似 simdjson 的方法及用 C++和 C#实现的代码结构,并通过基准测试比较了不同方法的速度和指令效率。
关键信息:
- SIMD 指令可同时处理多个字节,如 16 字节。
- WebKit 和 Chromium 工程师使用向量化分类,加载字节块并识别目标字符。
- 介绍了用于解决问题的 C++结构,包括构造函数和相关方法,更新函数较复杂。
- 用 C++基准测试比较了 find_first_of、向量分类和 64 位向量分类的速度和指令效率。
- C#中也比较了常规方法、SearchValues 类和向量分类及 64 位向量分类的速度。
重要细节: - 在 C++中,构造函数初始化 neon_match64 对象,通过多个方法实现对目标字符的处理。
- 基准测试在 Apple M2 笔记本上进行,给出了不同方法的速度等数据。
- C#代码在 Arseniy Zlobintsev 的帮助下进行了移植。
- 未移植 x64 处理器代码,但预计有良好结果。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。