c - 旧版本 GCC 上的 DPPS

标签 c assembly sse

嘿!

我需要优化 c 中的一些矩阵乘法代码,我正在使用 SSE vector 指令进行优化。我还发现 SSE4.1 已经包含点积指令 dpps。

问题是这个软件应该可以运行的机器上安装了旧版本的 gcc (4.1.2),它不支持 SSE4.1,但它有一个支持它的处理器(不要问我为什么 gcc 版本比处理器版本旧...)。所以我不能使用 _mm_dp_ps 函数。

我正在尝试向 c 添加一些汇编代码。问题是我以前从未使用过汇编代码,所以它真的很困惑。在汇编程序中编写所有处理 vector 指令的代码是否更有效?

所以我想问一下,是否还有其他方法可以使用 dpps 指令,是否值得使用?

最佳答案

坦率地说,我看不出问题所在。从你的描述来看,最终代码需要执行的机器似乎支持SSE4.1和DPPS。因此,一旦您的源代码(包括内部代码(或程序集))被编译,就可以在这台机器上执行。您只需要使用较新版本的编译器编译您的代码,方法是在您正在谈论的机器上安装较新版本,或者在另一台机器上编译,然后将可执行文件复制到它必须的机器继续前进。

至于使用 DPPS 进行优化是否值得,这将取决于您的代码(即,有多少优化潜力——您应该彻底分析以找出瓶颈所在) 以及在这种特定情况下性能实际上有多重要(即是否值得 时间?;时间就是金钱)

显然,如果您没有什么汇编经验,那么在 asm 中实现您的例程,或者甚至可能只是围绕 DPPS 编写您自己的 asm 包装函数,就会变得不那么吸引人了。 (但这当然是可能的。)

关于c - 旧版本 GCC 上的 DPPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3947966/

相关文章:

c - switch 语句不适用于变量为 '\n' 的位置,例如 Enter?

assembly - 如何在字符串定义中将 ASCII 字符大写?

assembly - x86 指令 PCLMULQDQ 中的 "P"前缀代表什么?

visual-studio-2005 - VS2005 中的 SSE4 指令?

c# - 如何更改c#中窗口窗体的原点即左上角和openGL C即中心?

c - 删除硬盘时 "Verifies the write"是什么意思?

c - 在 C 语言中,是否可以像在 char 数组声明中初始化字符串一样在指针声明中初始化字符串?

assembly - 使用具有非零嵌套级别的 x86 的 ENTER 指令?

assembly - 所有程序都可以转换为汇编吗?

c - __m128 中至少有 4 个 SP 值