【发布时间】:2021-10-08 09:51:50
【问题描述】:
目前我有两个布尔数组 X 和 Y,我想对它们进行按位或运算并将其存储回 X。我希望使用 SIMD 指令来执行此操作,但我发现我使用的加载指令是没有达到预期的效果。
#include <iostream>
#include <immintrin.h>
int main(){
bool mask[256]={0};
mask[130] = 1;
bool block_bloom[256]={0};
bool a[256] = {0};
__m256i reg1 = _mm256_loadu_si256((__m256i*)(&mask[0]));
__m256i reg2 = _mm256_loadu_si256((__m256i*)(&block_bloom[0]));
reg2 = _mm256_or_si256(reg1, reg2);
_mm256_storeu_si256((__m256i*) &a[0],reg2);
std::cout<< a[130] << std::endl;
std::cout<<mask[130];
}
正如我所料,这段代码应该给出输出 1 和 1,但输出是 0 和 1。我想知道我做错了什么以及如何解决它。非常感谢!
【问题讨论】: