gpt4 book ai didi

c++ - 使用 SSE 内在函数复制少量数据的问题

转载 作者:行者123 更新时间:2023-11-27 22:38:25 25 4
gpt4 key购买 nike

我在这里看过类似的问题并尝试使用类似的代码,但我在某处出错了。顺便说一下,这只是一个学习练习。这是代码:

struct alignas(16) Data
{
union
{
int field1;
int field2;
int field3;
int field4;
int field5;
int field6;
int field7;
int field8;
__m128 v[2];
};
};

void copy((__m128* __restrict b, const __m128* __restrict a)
{
*b++ = *a++;
*b++ = *a++;
}

int main(int, char**)
{
Data dst={0};
Data src={0};
src.field1=1;
src.field2=500;
src.field3=200;
src.field4=393;
src.field5=29383;
src.field6=3838;
src.field7=128484;
src.field8=111;

copy(dst.v,src.v);


std::cout<<" before copy dst.field1=" << dst.field1 <<" dst.field2=" << dst.field2 << std::endl;
return 0;
}

复制前field1和field2都是0,复制后都是111?我是 C++ 的新手,所以看起来它是在 dst 结构的 64 位上复制结构的最后 32 位,但不确定为什么?

最佳答案

您的 union 不正确,它有 1 个整数或您的 __m128 数组。 field1, field2 等都指向同一个内存。除了最后一个分配给 field8 的所有作业都将被覆盖。

您可以改用它:

struct alignas(16) Data
{
union
{
int fields[8];
__m128 v[2];
};
};

关于c++ - 使用 SSE 内在函数复制少量数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51269843/

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