gpt4 book ai didi

c++ - 对于具有所有相同组件的 SSE vector ,是动态生成还是预先计算?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:49 25 4
gpt4 key购买 nike

当我需要执行一个 vector 操作,其操作数只是广播到每个组件的 float 时,我应该预先计算 __m256 还是 __m128,然后加载它当我需要它时,或者每次我需要 vector 时使用 _mm_set1_ps 将 float 广播到寄存器?

我一直在预先计算非常重要且使用频繁的 vector ,并即时生成不太重要的 vector 。但是我真的通过预计算获得了任何速度吗?值得这么麻烦吗?

_mm_set1_ps 是用一条指令实现的吗?这可能会回答我的问题。

最佳答案

我认为通常最好从代码(例如循环)中分离出 SSE vector ,并在需要时使用它,假设您注意不要不小心将其强行放入内存。 (例如,如果你获取它的地址或通过引用将它传递给另一个函数,那么它可能会被强制进入内存,你可能会得到奇怪的行为。)
这个想法是,通常最好避免将值传入和传出 SSE 寄存器,如果碰巧在您的特定情况下情况并非如此,编译器已经知道该值是如何产生的 build 并可以rematerialize如果需要的话。我认为这比 loop-invariant code motion 容易得多一般来说,这是反向优化(即编译器为您分解出来的地方)并且需要编译器证明代码确实是循环不变的。

关于c++ - 对于具有所有相同组件的 SSE vector ,是动态生成还是预先计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31843345/

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