Jam*_*mes 0 c sse bit-manipulation logical-operators
我有一个关于使用128位寄存器来提高代码速度的问题.考虑下面的C/C++代码:我定义了两个unsigned long long int小号a和b,并给他们一些价值.
unsigned long long int a = 4368, b = 56480;
Run Code Online (Sandbox Code Playgroud)
然后,我想计算
a & b;
Run Code Online (Sandbox Code Playgroud)
这里a在计算机中表示为64位数字4369 = 100010001001,并且相同b = 56481 = 1101110010100001,我计算a & b,它仍然是由a和b之间的逐位逻辑AND给出的64位数字:
a & b = 1000000000001
Run Code Online (Sandbox Code Playgroud)
我的问题如下:计算机是否有128位寄存器,我可以在上面进行操作,但是使用128位整数而不是64位整数,并且具有相同的计算机时间?更清楚一点:我想通过使用128位数而不是64位数来获得代码速度的两倍,例如我想计算128个AND而不是64个AND(每个位一个AND)电脑时间.如果可以的话,你有代码示例吗?我听说SSE的管理员可能会这样做,但我不确定.
是的,SSE2具有128位按位AND - 您可以通过C或C++中的内部函数使用它,例如
#include "emmintrin.h" // SSE2 intrinsics
__m128i v0, v1, v2; // 128 bit variables
v2 = _mm_and_si128(v0, v1); // bitwise AND
Run Code Online (Sandbox Code Playgroud)
或者您可以直接在汇编程序中使用它 - 指令是PAND.
您甚至可以在Haswell和后来的具有AVX2的CPU上执行256位AND:
#include "immintrin.h" // AVX2 intrinsics
__m256i v0, v1, v2; // 256 bit variables
v2 = _mm256_and_si256(v0, v1); // bitwise AND
Run Code Online (Sandbox Code Playgroud)
这种情况下的相应指令是VPAND.
| 归档时间: |
|
| 查看次数: |
2015 次 |
| 最近记录: |