SIMD strlen() 实现与 x86 - 64 架构特性解析
1. SIMD strlen() 实现
在 C/C++ 代码中,可以通过特殊宏插入 SIMD 指令。对于 MSVC,部分宏位于 intrin.h 文件中。利用 SIMD 指令实现的 strlen() 函数,其运行速度比普通实现快 2 - 2.5 倍。以下是具体实现代码:
size_t strlen_sse2(const char *str)
{
register size_t len = 0;
const char *s = str;
bool str_is_aligned = (((unsigned int)str) & 0xFFFFFFF0) == (unsigned int)str;
if (str_is_aligned == false)
return strlen(str);
__m128i xmm0 = _mm_setzero_si128();
__m128i xmm1;
int mask = 0;
for (;;)
{
xmm1 = _mm_load_si128((__m128i *)s);
xmm1 = _mm_cmpeq_epi8(xmm1, xmm0);
if ((mask = _mm_movemask_epi8(xmm1)) != 0)
{
unsigned long pos;
_BitScanF
超级会员免费看
订阅专栏 解锁全文
864

被折叠的 条评论
为什么被折叠?



