gpt4 book ai didi

c++ - 严格别名和 __m128i 类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:20 33 4
gpt4 key购买 nike

当使用 SSE2 内部函数进行按位运算时,必须将指针从 int* 转换为 __m128i*。此代码是否违反了严格的别名规则?

void bit_twiddling_func(int size, int const* input, int* output) {
const __m128* x = (const __m128*)input;
const __m128* y = (const __m128*)output;

for (int i=0; i < size/4; ++i, ++x, ++y) {
__m128i x4 = _mm_load_si128(x); // load 4 integers

// do some bit twiddling

_mm_store_si128(y, x4); // store 4 integers
}
}

谢谢!

最佳答案

是的;它打破了严格的别名规则。两种不同的类型不能指向内存中的同一位置。此处 x 指向输入,y 指向输出,但它们属于不同类型。

您可以更改函数的签名以采用 __m128* 参数,但保留它可能是最简单的方法。如果您注意输入/输出参数指向具有适当对齐和大小限制的内存(即它们应该每个指向您的循环没有索引结束或加载未初始化数据的地方),它可能会工作得很好.)

关于c++ - 严格别名和 __m128i 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6449103/

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