c++ - 如果它们是 16 字节对齐的,是否可以将 float 直接转换为 __m128?

标签 c++ c alignment sse intrinsics

如果 float 是 16 字节对齐的,将它们直接转换为 __m128 是否安全/可能/可取?

我注意到使用 _mm_load_ps_mm_store_ps 来“包装”原始数组会增加大量开销。

我应该注意哪些潜在的陷阱?

编辑:

使用加载和存储指令实际上没有开销,我混合了一些数字,这就是我获得更好性能的原因。即使您在 __m128 实例中对原始内存地址进行了一些可怕的修改,当我运行测试时,在没有 _mm_load_ps 指令的情况下完成了两倍的时间,可能会退回到一些故障安全代码路径。

最佳答案

是什么让您认为 _mm_load_ps_mm_store_ps “增加了大量开销”?这是向 SSE 寄存器加载/存储 float 据的正常方法,假设源/目标是内存(任何其他方法最终都归结为这一点)。

关于c++ - 如果它们是 16 字节对齐的,是否可以将 float 直接转换为 __m128?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11759791/

相关文章:

c++ - 安全的 Unity 构建

c++ - std::vector 已知序列

c - 用C语言将二叉树结构写入文件

html - 无法在 CSS 左侧对齐文本

css - 输入组插件在 mozilla 浏览器上没有很好地对齐

c++ - 尽管有工作对象,asio::io_service.run() 仍退出

c++ - 发送多个字符串的消息协议(protocol)?

c - fopen + Stream _dup 中的流描述符丢失

C 反转无符号整数中的位

css - DIV 在 FireFox 中未正确对齐