SIMD与64位编程技术解析
1. SIMD strlen()实现
SIMD(单指令多数据)指令可通过特殊宏插入到C/C++代码中。在MSVC里,部分宏位于 intrin.h 文件。利用SIMD指令实现 strlen() 函数,其运行速度比普通实现快2 - 2.5倍。该函数会将16个字符加载到XMM寄存器,并逐个与零进行比较。
以下是实现代码:
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;
_B
超级会员免费看
订阅专栏 解锁全文
51

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



