带SSE的整数值/浮点值
Integer/Floating points values with SSE
我必须将一个整数向量与另一个整数矢量相乘,然后将结果(因此是整数向量)与浮点值向量相加。
我应该对整数使用MMX或SSE4,还是可以对所有这些值(即使有整数?)使用SSE将整数放入__m128寄存器?
事实上,我经常在__m128寄存器中使用整数,我不知道我是在浪费时间(隐式强制转换值)还是在浪费时间。
我正在使用-O3选项进行编译。
您可能应该对所有内容都使用SSE(MMX只是SSE的一个非常过时的前兆)。如果你打算主要针对较新的CPU,那么你甚至可以考虑AVX/AVX2。
首先用标量代码干净而稳健地实现所有内容,然后对其进行基准测试。标量实现可能足够快,而不需要做任何其他事情。此外,gcc和其他编译器(例如clang、ICC,甚至Visual Studio)在自动向量化方面做得相当好,因此您可以"免费"获得满足性能需求的SIMD向量化代码。但是,如果此时仍需要更好的性能,则可以开始将标量代码转换为SSE。不过,为了验证和基准测试的目的,保留原始的标量实现-在优化代码时很容易引入错误,而且了解优化后的代码比基线代码快多少是很有用的(您可能希望SSE比标量代码快2到4倍)。
虽然前面的答案是合理的,但有一个显著的区别——数据组织。对于直接SSE使用,数据最好组织为阵列结构(SoA)。通常,标量代码可能会围绕结构数组(AoS)布局生成数据。如果是这样的话,从标量形式到矢量形式的转换将是困难的
更多阅读https://software.intel.com/en-us/articles/creating-a-particle-system-with-streaming-simd-extensions
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何只允许用户输入正整数
- 如何在c++中从文本文件中逐行读取整数
- SSE 整数 2^n 的 2 次方,对于没有 AVX2 的 32 位整数
- 使用 SSE 将 8 位整数除以 4(或移位)
- 使用 SSE 内部函数存储四个 16 位整数
- AVX/SSE 回合向下浮动并返回整数向量
- 用sse累加整数向量
- SSE整数除法
- Ivy Bridge上使用SSE/AVX的最大SIMD整数乘法
- 在c++中对整数数组进行线性搜索时,SSE比较不能按预期工作