gpt4 book ai didi

c++ - SSE 文档和访问

转载 作者:太空宇宙 更新时间:2023-11-04 03:56:32 25 4
gpt4 key购买 nike

目前我正在通过 union 访问我的浮点值

typedef union
{
float v[4];
_mm128 m;
}SSEFloat;

但是在这个link我听说性能是损失。GCC 4 有性能损失吗?float 是否需要对齐?也在联盟?或者像这样设置值是否正确

SSEFloat a;
float tmp = 10.0;
a.m = _mm_load1_ps( &tmp );

目前我也找不到英特尔 SSE 内部文档:(是否有一个“小”列表 - 速度优化需要知道什么?

最佳答案

编译器会保证代码正确执行,但可能会为了正确性而牺牲性能。由于 union 实际上只是为访问 4 项浮点 vector 的各个元素添加语法便利,并且 _mm128 对象(概念上,如果不是实际上)位于寄存器中,我建议您直接使用 _mm128 对象并使用_mm_store_ps_mm_load_ps将数据移入和移出对象的 API 系列。

您提供的链接中的评论表明,编译器可以围绕 union 进行较差的优化,尤其是 _mm128s。如果你想确定这一点,你应该在有 union 和没有 union 的情况下进行实验。对于 Linux 中的高分辨率时间测量,我推荐 pthread_getcpuclockidclock_gettime蜜蜂。如果可以,请发布您的结果!

一般来说,为了获得最佳性能,让编译器尽可能简单易行。这意味着将像 _mm128 这样的高性能事物排除在像 union 这样的复杂结构之外,而只是在堆栈上或在明确为它们分配的内存中声明它们。

关于c++ - SSE 文档和访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16023004/

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