如何解决使用glibc的strlen/ strcmp或基于SSE4.2自己滚动是否有益?
根据“使用英特尔®Streaming SIMD扩展4(英特尔®SSE4)进行架构验证”(英特尔,2008年),[它们]添加了一些指令,以帮助对两个16字节的操作数同时进行字符搜索和比较。我用C语言编写了一些基本的strlen()和strcmp()函数,但它们似乎比glibc慢。
我可能想尝试使用内联汇编来查看我的项目在输入/输出XML方面的表现。
我已经读过(在这里),在诸如strlen()之类的东西上使用SMID充满了潜在的问题(内存对齐),因此我有点担心在生产代码中使用它。
解决方法
glibc的实现将很难被击败。这些功能经过仔细优化,包括手工组装的零件。这是glibc使用AVX2指令的strcmp的x86_64实现。警告,它是800行:
https://github.com/lattera/glibc/blob/master/sysdeps/x86_64/multiarch/strcmp-avx2.S
有关更多详细信息,还请阅读Peter Codes的fantastic explanation关于glibc的实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。