SSE文档和访问
SSE Documentation and accessing
此刻我正在通过Union访问我的float值
typedef union
{
float v[4];
_mm128 m;
}SSEFloat;
但是在这个链接中我听说性能是损失的。GCC 4是否有性能损失?浮动需要对齐吗?也在欧盟吗?或者像这样设置值是正确的吗
SSEFloat a;
float tmp = 10.0;
a.m = _mm_load1_ps( &tmp );
目前我找不到英特尔SSE固有文档太:(对于速度优化,是否有一个"小"列表?
编译器将保证代码将正确执行,但它可能为了正确性而牺牲性能。由于联合实际上只是为访问4项浮点向量的各个元素增加了语法上的便利,并且_mm128对象(概念上,如果不是实际的话)位于寄存器中,因此我建议您直接使用_mm128对象,并使用_mm_store_ps和_mm_load_ps系列api将数据移入和移出对象。
您提供的链接中的注释表明编译器对联合的优化很差,特别是对_mm128s。如果你想确定这一点,你应该做有和没有联合的实验。对于Linux中的高分辨率时间测量,我推荐使用pthread_getcpuclockid和clock_gettime api。如果可以的话,把你的结果贴出来!
一般来说,为了获得最佳性能,应该让编译器尽可能地容易和简单。这意味着把高性能的东西,如_mm128,从复杂的结构(如联合)中移除,而只是在堆栈上声明它们,或者在专门为它们分配的内存中声明它们。
如果您在联合中使用浮点数,编译器可能会输出非sse代码来访问它们,这将对性能造成影响。这取决于对象的使用。您可以在包装器结构体前面添加_MM_ALIGN16 (__declspec(align(16))并覆盖new和delete操作符(如果您正在编写c++)。检查这个问题:SSE, intrinsic, and alignment
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 如何在文档文件夹中创建目录
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 关于类的 Python 文档 - 对C++的引用不正确
- C++/autoconf 等效于文档库要求.txt的要求是什么?
- mbed:使用 USB 文档库编译会导致错误
- C++ VISUAL STUDIO:GLFWwindow没有初始化,即使它是在文档中编写的并且以前工作过
- 使用 yaml-cpp 更新 YAML 文档的节点和值
- 在加载 MSHTML 文档之前从 MSHTML 文档中删除无效的 URL
- 如何在C++中表示JSON文档的递归对象结构?
- 如何查找 Redshift Maya API 文档?
- 如何使用值模板编写文档测试用例?
- 当通过访问中的VBA远程启动时,请写信给我的文档
- MFC编辑控制消息处理访问文档对象
- 从c++程序访问Microsoft Word文档
- 从标准C++代码访问iPhone的沙盒文档文件夹
- 访问基于二进制格式文档的特定二进制信息
- SSE文档和访问
- 我可以从 MFC 中的另一个文档访问一个文档的数据吗