【发布时间】:2020-02-25 13:44:56
【问题描述】:
我正在使用 AVX(不是 AVX2)创建 strlen 函数... 使用 AVX 可以访问(YMM)寄存器,但有一个问题......我知道的 strlen 函数的指令是:
vmovdqu
vpcmpeqb
vpmovmskb
但这些说明仅适用于 AVX 中的“XMM”...如果我想将它们与 (YMM) 一起使用,我需要一个 AVX2-CPU ...但我在谈论 AVX ... 现在要使用“AVX”和“YMM”寄存器创建 strlen 函数,我必须使用哪些指令?
【问题讨论】:
-
也可以试试
pcmpistrm和pcmpistri。 -
这仍然是 SSE (4.2) 和 AVX (XMM) 而不是 AVX (YMM)
-
我知道。但是这些说明是专门为此目的而制定的。如果 AVX 指令都使用 128 位寄存器,则与 SSE 指令没有性能差异,并且由于使用 256 位寄存器是不可能的,这是一个可能的选择。
-
但是'pcmpistri'的速度真的很差!!!!!!!!!!!!它甚至比 SSE2 慢 30%!
-
取决于用例,但对于这种情况可能是的。