gpt4 book ai didi

c - 128 位整数之间的按位运算

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:39 24 4
gpt4 key购买 nike

我有一个关于使用 128 位寄存器来提高代码速度的问题。考虑以下 C/C++ 代码:我定义了两个 unsigned long long int ab,并给它们一些值。

unsigned long long int a = 4368, b = 56480;

然后,我要计算

a & b;

这里a在计算机中表示为64位数字4369 = 100010001001,同样b = 56481 = 1101110010100001,然后我计算 a & b,它仍然是一个 64 位数字,由 a 和 b 之间的逐位逻辑与给出:

a & b = 1000000000001

我的问题如下:计算机是否有一个 128 位寄存器,我可以在其中执行上述操作,但使用 128 位整数而不是 64 位整数,并且计算机时间相同?更清楚一点:我想通过使用 128 位数字而不是 64 位数字,将我的代码速度提高两倍,e。 G。我想用相同的计算机时间计算 128 个 AND 而不是 64 个 AND(每个位一个 AND)。如果可能的话,你有代码示例吗?我听说上交所注册人可能会这样做,但我不确定。

最佳答案

是的,SSE2 有一个 128 位的按位与 - 您可以通过 C 或 C++ 中的内部函数使用它,例如

#include "emmintrin.h"          // SSE2 intrinsics

__m128i v0, v1, v2; // 128 bit variables

v2 = _mm_and_si128(v0, v1); // bitwise AND

或者您可以直接在汇编程序中使用它 - 指令是 PAND

您甚至可以在具有 AVX2 的 Haswell 和更高版本的 CPU 上执行 256 位 AND:

#include "immintrin.h"          // AVX2 intrinsics

__m256i v0, v1, v2; // 256 bit variables

v2 = _mm256_and_si256(v0, v1); // bitwise AND

此时对应的指令是VPAND

关于c - 128 位整数之间的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18725928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com