有什么区别
int x=7;
Run Code Online (Sandbox Code Playgroud)
和
register int x=7;
Run Code Online (Sandbox Code Playgroud)
?
我正在使用C++.
我试图找到一个字符的第一个实例,在这种情况下'''使用simd(AVX2或更早版本).我想使用_mm256_cmpeq_epi8,但是我需要一个快速的方法来查找是否有任何结果字节__m256i已设置为0xFF.然后计划使用_mm256_movemask_epi8将结果从字节转换为位,并使用ffs获取匹配的索引.使用_mm_movemask_epi8一次移出一部分是否更好?其他建议?
我有两个 64 位值,我想按如下方式对它们进行 XNOR:
RAX: 01000001 | 01000010 | 01000011 | 01000001 | 01000101 | 01000110 | 01000111 | 01000001 XNOR
RBX: 01000001 | 01000001 | 01000001 | 01000001 | 01000001 | 01000001 | 01000001 | 01000001
-------------------------------------------------------------------------------------------
RCX: 1 0 0 1 0 0 0 1
XNOR does the following:
1 XNOR 1 | 1
1 XNOR 0 | 0
0 XNOR 1 | 0
0 XNOR 0 | 1
Run Code Online (Sandbox Code Playgroud)
以便每次 XNOR 结果都准确地0xff输出1到 RCX 寄存器中相应的块位置。 …
我有一个用 F# for .NET 编写的使用 SSE2 的函数。我使用 AVX2 写了同样的东西,但根本问题是相同的。a 的预期目的是什么MoveMask?我知道它对我的目的有效,我想知道为什么。
我正在迭代两个 64 位浮点数组a和b,测试它们的所有值是否匹配。我正在使用该CompareEqual方法(我相信该方法正在包装对 的调用__m128d _mm_cmpeq_pd)一次比较多个值。然后我将该结果与64Vector128位0.0浮点数进行比较。我的推理是,在值不匹配的情况下,结果CompareEqual将给出一个值。0.0到目前为止,这是有道理的。
然后我Sse2.MoveMask对与零向量的比较结果使用该方法。我之前曾研究过使用SSEand for 匹配,并且我看到了人们用于测试非零值AVX的示例。MoveMask我相信这种方法正在使用int _mm_movemask_epi8英特尔内在函数。我已包含 F# 代码和 JIT 的程序集。
这真的是一个目的吗MoveMask,还是只是一个令人高兴的巧合,它可以达到这些目的。我知道我的代码有效,我想知道它为什么有效。
#nowarn "9" "51" "20" // Don't want warnings about pointers
open System
open FSharp.NativeInterop
open …Run Code Online (Sandbox Code Playgroud)