📝
内容提要
jieba-rs的性能优化记录显示,HMM分词速度从2.85µs降至1.32µs,非HMM从2.21µs降至0.94µs,分别提升了2.16倍和2.35倍。主要改动包括使用thread_local!替代lazy_static!、复用内存、减少拷贝和优化数据结构,最终用更高效的字符分类方法替换了正则引擎,显著提升了分词性能。
🎯
关键要点
-
jieba-rs的HMM分词速度从2.85µs降至1.32µs,非HMM从2.21µs降至0.94µs,分别提升了2.16倍和2.35倍。
-
主要改动包括使用thread_local!替代lazy_static!、复用内存、减少拷贝和优化数据结构。
-
用更高效的字符分类方法替换了正则引擎,显著提升了分词性能。
-
通过复用HMM工作内存,减少了每次分配的开销。
-
借用切片代替拷贝,减少了字符串拷贝的次数,提升了性能。
-
将HashMap替换为Vec,优化了DAG中的字节偏移存储方式。
-
干掉正则引擎后,分词性能提升了25-29%。
-
预计算发射概率和词频的对数,进一步提升了性能。
❓
延伸问答
jieba-rs的HMM分词性能提升了多少?
HMM分词速度从2.85µs降至1.32µs,提升了2.16倍。
jieba-rs的非HMM分词性能提升了多少?
非HMM分词速度从2.21µs降至0.94µs,提升了2.35倍。
jieba-rs的性能优化主要改动有哪些?
主要改动包括使用thread_local!替代lazy_static!、复用内存、减少拷贝和优化数据结构。
为什么jieba-rs要替换正则引擎?
因为正则引擎占用了29%的CPU时间,替换后性能提升了25-29%。
如何通过复用内存来提升jieba-rs的性能?
通过复用HMM工作内存,减少每次分配的开销,从而提升性能。
jieba-rs的性能测试是如何进行的?
每个commit单独checkout,使用cargo bench进行基准测试,记录中位数。
➡️