小编ner*_*wim的帖子

为什么 SSE4.2 cmpstr 比常规代码慢?

我正在尝试验证一个只能包含 ASCII 可见字符、空格和 \t 的字符串。

但在大多数 CPU 上,ASCII 表查找似乎比带有 _SIDD_CMP_RANGES 的 _mm_cmpestri 指令更快。我已经在 i5-2410M、i7-3720QM、i7-5600U 和未知类型的 KVM 虚拟化 Xeon 上进行了测试,只有最后一个矢量化版本速度更快。

我的测试代码在这里:

#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <immintrin.h>
#include <stdalign.h>
#include <stdlib.h>

#define MIN(a,b) (((a)<(b))?(a):(b))

#define ALIGNED16 alignas(16)

#define MEASURE(msg,stmt) { \
    struct timeval tv; \
    gettimeofday(&tv, NULL); \
    uint64_t us1 = tv.tv_sec * (uint64_t)1000000 + tv.tv_usec; \
    stmt; \
    gettimeofday(&tv, NULL); \
    uint64_t us2 = tv.tv_sec * (uint64_t)1000000 + tv.tv_usec; \
    printf("%-20s - %.4fms\n", msg, …
Run Code Online (Sandbox Code Playgroud)

c performance x86 assembly sse

5
推荐指数
1
解决办法
1003
查看次数

标签 统计

assembly ×1

c ×1

performance ×1

sse ×1

x86 ×1