c++ - SSE 指令在实践中优化了什么,编译器如何启用和使用它们?

标签 c++ c assembly sse

SSE 和/或 3D 现在!有 vector 指令,但它们在实践中优化了什么?例如,8 位字符是 4 乘 4 而不是 1 乘 1 处理的吗?是否对某些算术运算进行了优化?字长有什么影响(16 位、32 位、64 位)?

是否所有编译器都在它们可用时使用它们?

真的必须了解汇编才能使用 SSE 指令吗?了解电子学和门逻辑是否有助于理解这一点?

最佳答案

背景:SSE 同时具有 vector 和标量指令。 3D现在!死了。

在没有程序员帮助的情况下,任何编译器都很难从矢量化中获得有意义的好处。通过编程努力和实验,人们通常可以接近纯汇编的速度,而无需实际提及任何特定的 vector 指令。有关详细信息,请参阅编译器的 vector 编程指南。

涉及到一些可移植性权衡。如果您为 GCC 的矢量化程序编写代码,您可能能够使用非英特尔架构(例如 PowerPC 和 ARM),但不能使用其他编译器。如果您使用英特尔内在函数使您的 C 代码更像汇编,那么您可以使用其他编译器,但不能使用其他架构。

电子知识帮不了你。学习可用的说明将。

关于c++ - SSE 指令在实践中优化了什么,编译器如何启用和使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5677250/

相关文章:

c++ - 理解术语和概念的含义——RAII(Resource Acquisition is Initialization)

c++ - 无向图中的连通分量

c - 接受两个 void* 并比较它们的函数

assembly - 为什么 "push ebp"会改变 ebp 的值?

assembly - 为什么引用同一节中的全局函数的函数只能在链接时求解,而局部函数则在编译时求解?

c++ - 使用 OpenCV C++ 检测和跟踪视频中液滴的步骤

c++ - 我需要实现一个指向成员函数重载的 C++ 函数指针

我们可以使用 googletest (gtest) 来测试 C 代码吗

c - 指针和指针位置之间的区别

c - 为什么 "guarded do"在 asm 中比 "jump to middle"好