相关疑难解决方法(0)

81
推荐指数
7
解决办法
8万
查看次数

使用simd查找角色的第一个实例

我试图找到一个字符的第一个实例,在这种情况下'''使用simd(AVX2或更早版本).我想使用_mm256_cmpeq_epi8,但是我需要一个快速的方法来查找是否有任何结果字节__m256i已设置为0xFF.然后计划使用_mm256_movemask_epi8将结果从字节转换为位,并使用ffs获取匹配的索引.使用_mm_movemask_epi8一次移出一部分是否更好?其他建议?

x86 sse simd avx avx2

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

XNOR 8 位块中的两个 64 位寄存器

我有两个 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 寄存器中相应的块位置。 …

assembly bit-manipulation x86-64 simd

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

SSE 和 AVX MoveMask 的用途是什么

问题

  1. MoveMask 的目的或意图是什么?
  2. 学习如何使用 x86/x86-64 汇编/SSE/AVX 的最佳地点是哪里?
  3. 我可以更有效地编写代码吗?

提问原因

我有一个用 F# for .NET 编写的使用 SSE2 的函数。我使用 AVX2 写了同样的东西,但根本问题是相同的。a 的预期目的是什么MoveMask?我知道它对我的目的有效,我想知道为什么。

我正在迭代两个 64 位浮点数组ab,测试它们的所有值是否匹配。我正在使用该CompareEqual方法(我相信该方法正在包装对 的调用__m128d _mm_cmpeq_pd)一次比较多个值。然后我将该结果与64Vector1280.0浮点数进行比较。我的推理是,在值不匹配的情况下,结果CompareEqual将给出一个值。0.0到目前为止,这是有道理的。

然后我Sse2.MoveMask对与零向量的比较结果使用该方法。我之前曾研究过使用SSEand for 匹配,并且我看到了人们用于测试非零值AVX的示例。MoveMask我相信这种方法正在使用int _mm_movemask_epi8英特尔内在函数。我已包含 F# 代码和 JIT 的程序集。

这真的是一个目的吗MoveMask,还是只是一个令人高兴的巧合,它可以达到这些目的。我知道我的代码有效,我想知道它为什么有效。

F# 代码

#nowarn "9" "51" "20" // Don't want warnings about pointers

open System
open FSharp.NativeInterop
open …
Run Code Online (Sandbox Code Playgroud)

x86 f# sse avx .net-core

2
推荐指数
1
解决办法
1879
查看次数

标签 统计

avx ×2

simd ×2

sse ×2

x86 ×2

.net-core ×1

assembly ×1

avx2 ×1

bit-manipulation ×1

c++ ×1

f# ×1

x86-64 ×1