Compiler construction SIMD在词法分析中的应用

Compiler construction SIMD在词法分析中的应用,compiler-construction,compiler-optimization,simd,lexer,lexical-analysis,Compiler Construction,Compiler Optimization,Simd,Lexer,Lexical Analysis,我听说现代编译器(clang)和解析器(比如simdjson)使用simd指令来加速词法分析。但这怎么可能呢 我想在C++中实现一个语言的词表。如何使用simd加速词法分析和解析?在RapidJSON中使用simd的一个方法是。但这不是词法。假设x86 SSE2pcmpeqb/pmovmskb可以用于一次查找16字节的空间。或SSE4.2pcmpistri/m获取字符范围或字符集匹配的位掩码。当然,一旦有了位掩码,就可以对其进行位扫描。GCC使用SIMD加快查找注释结尾的速度。考虑到在许可证、变

我听说现代编译器(clang)和解析器(比如simdjson)使用simd指令来加速词法分析。但这怎么可能呢


<>我想在C++中实现一个语言的词表。如何使用simd加速词法分析和解析?

在RapidJSON中使用simd的一个方法是。但这不是词法。假设x86 SSE2
pcmpeqb
/
pmovmskb
可以用于一次查找16字节的空间。或SSE4.2
pcmpistri/m
获取字符范围或字符集匹配的位掩码。当然,一旦有了位掩码,就可以对其进行位扫描。GCC使用SIMD加快查找注释结尾的速度。考虑到在许可证、变更日志和文档之间,很可能大多数文件都是注释,我想这是有道理的。但我还没有看到(或搜索到)一个能证实其有效性的基准测试。无论如何,词法分析不是编译的瓶颈,优化最好在基本工作完成后进行。这是真的,但我发现这个问题很有趣,因为我一直在寻找不带条件分支的DFA实现方法。我仍然不确定这是否可行,但如果有人使用simd实现了lexer,我很想知道。就我的0.02美元,总的来说,让我们把SIMD看作一种工具。并非所有的语言都是相同的,例如,一个类似nginx的配置文件只有十条或二十条语言规则,但Python。。。是一个复杂的问题(可能比C++更复杂)。SIMD似乎只适用于除预定义表达式(如正则表达式)之外的情况,特别是字符串的开头和结尾。因此,考虑SIMD对于明确定义的情况。