80得票8回答
在没有硬件SIMD的情况下,通过SWAR并行将64位整数中打包的8位整数减1。

如果我有一个64位整数,我把它解释为一个包含8个元素的紧密打包的8位整数数组。我需要从每个打包的整数中减去常量1,同时处理溢出,而不是让一个元素的结果影响另一个元素的结果。 目前我有这个代码,它可以工作,但我需要一种并行地执行每个打包的8位整数减法且不进行内存访问的解决方案。在x86上,我可...

23得票4回答
这个算法如何计算32位整数中设置位的数量?

int SWAR(unsigned int i) { i = i - ((i >> 1) & 0x55555555); i = (i & 0x33333333) + ((i >> 2) & 0x33333333); ret...

10得票1回答
SIMD在寄存器内的min/max版本

假设我有两个uint16_t[4]数组,a和b。这些数组中的每个整数都在范围[0, 16383]内,因此未设置位14和15。然后我有一些代码来查找每个i中a[i]和b[i]的最小值和最大值: uint16_t min[4], max[4]; for (int i = 0; i < 4;...

8得票1回答
这种同时处理颜色组件的颜色混合技巧是如何工作的?

我看到了一段非常高效的Java代码,可以完美地将两种RGB888颜色混合成50%: public static int blendRGB(int a, int b) { return (a + b - ((a ^ b) & 0x00010101)) >> 1; }...