问题标签 [swar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ 中 MSB ->LSB 和 LSB->MSB 的有符号 INT 转换
我检查了 SWAR 算法(S IMD W ithin A Register )以反转 s 的位顺序。有类似的东西吗?unsigned int
signed int
optimization - 这种并行处理颜色分量的颜色混合技巧如何工作?
我看到这个 Java 代码非常有效地在两种 RGB888 颜色之间进行了 50% 的完美混合:
这显然相当于单独提取和平均通道。像这样的东西:
但是第一种方法效率更高。我的问题是:这个魔法是如何工作的?我还能用它做什么?还有更多类似的技巧吗?
c++ - 该算法如何计算 32 位整数中设置的位数?
我看过这段代码,它计算的位数等于1
32 位整数,我注意到它的性能优于__builtin_popcount
但我无法理解它的工作方式。
有人可以详细解释这段代码是如何工作的吗?
c - 有没有一种有效的方法在 64 位数字的高 32 位部分和低 32 位部分分别进行 32 位按位旋转?
我目前正在使用 C/C++,并且我有一个uint64_t
. 我需要分别对顶部 32 位和底部 32 位进行按位旋转。例如,如果我的输入是
我需要向右旋转 2 位,正确的输出是
显而易见的方法是制作一个临时的 32 位数字并分别对其进行旋转操作,但是有没有一种不同的、有效的方法呢?
c++ - 按段比较 64 位整数
我有两个 64 位整数x
和y
. 它们每个代表5个短无符号整数:前10位代表第一个整数,接下来的13位代表第二个整数,接下来的16位代表第三个整数,接下来的14位代表第4个整数,其余位代表第 5 个整数。
让x0
, x1
, x2
, x3
,x4
是构成 的 5 个短整数x
。让y0
, y1
, y2
, y3
,y4
是构成 的 5 个短整数y
。我需要知道x0 < y0
AND x1 < y1
AND AND x2 < y2
AND x3 < y3
AND x4 < y4
。
我认为最简单的解决方案是转移:
我知道有很多按位体操。有更快的解决方案吗?
c++ - 并行将 64 位整数中的压缩 8 位整数减 1,没有硬件 SIMD 的 SWAR
如果我有一个 64 位整数,我将其解释为包含 8 个元素的压缩 8 位整数数组。我需要1
在处理溢出时从每个压缩整数中减去常数,而一个元素的结果不会影响另一个元素的结果。
我现在有这段代码,它可以工作,但我需要一个解决方案,它可以并行地减去每个压缩的 8 位整数并且不进行内存访问。在 x86 上,我可以使用这样的 SIMD 指令psubb
并行减去压缩的 8 位整数,但我正在编码的平台不支持 SIMD 指令。(在这种情况下为 RISC-V)。
因此,我正在尝试执行SWAR(寄存器中的 SIMD)来手动取消 a 字节之间的进位传播uint64_t
,执行与此等效的操作:
我认为您可以使用按位运算符执行此操作,但我不确定。我正在寻找不使用 SIMD 指令的解决方案。我正在寻找一个非常便携的 C 或 C++ 解决方案,或者只是它背后的理论,以便我可以实现自己的解决方案。
assembly - 一个寄存器可以一次保存多个值吗?
在 64 位 x86 寄存器的情况下,如果一个值的大小足够小以至于多个指令可以放入一个寄存器,是否可以在同一个寄存器中一次保存多个值?例如将两个 32 位整数装入一个寄存器。如果可能,这会是一件坏事吗?我一直在阅读寄存器,我对这个概念很陌生。
c - 来自“Bit Twiddling Hacks”的 SWAR 字节计数方法——它们为什么有效?
Bit Twiddling Hacks包含以下宏,用于计算单词x
中小于或大于n
:
但是,它并没有解释它们为什么起作用。这些宏背后的逻辑是什么?
c - 如何编写将 0xFF 置于匹配通道中的 SWAR 比较?
我正在尝试编写一个 SWAR 比较相等操作,uint64_t
假装是uint8_t
. 根据 Hacker's Delight 和 Bit Twiddling Hacks 中的技术,我设法达到的最接近的结果如下:
但是,这会放入0x80
匹配的0x00
“车道”和不匹配的“车道”,而我想要匹配的“车道”和不0xFF
匹配0x00
的“车道”。是否可以在没有分支的情况下编写它?