gpt4 book ai didi

c++ - 加载 128 位混合 float+int 数据?

转载 作者:行者123 更新时间:2023-11-28 00:15:20 25 4
gpt4 key购买 nike

我有一个具有以下组成的结构:

static constexpr uint64_t emptyStructValue { 0 };

union MyStruct {
explicit MyStruct(uint64_t comp) : composite(comp){}

struct{
int16_t a;
bool b;
bool c;
float d;
};

uint64_t composite = 0;

bool hasValue(){
return composite != emptyStructValue;
}
};

我在另一个对象中有两个这样的结构:

class B{
Struct s1;
Struct s2;
};

我想知道,给定类型 B 的对象,我如何将所有 128 位加载到 SSE 寄存器并检查是否设置了单个位?

我找到了 _mm_loadu_si128() 但我的数据混合了整数和 float ?

最佳答案

实际上,如果 (sizeof(B) == 2*sizeof(uint64_t),那么我认为没有理由不按照你的建议去做。但是如果速度很重要(而且看起来就像它一样),你应该将你的 B 对象对齐到 128 位边界,这样你就可以使用 _mm_load_si128 而不是 _mm_loadu_si128

编辑添加:事实上,在 64 位模式下,使用常规操作码可能会更快。像这样的东西:

mov   rax,[rsi]
or rax,[rsi+8]
jnz BitSet

即使在 32 位模式下,它也可能会更快。您将不得不进行试验。

关于c++ - 加载 128 位混合 float+int 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30693828/

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