嘿!
我需要用c语言优化一些矩阵乘法代码,我用SSE矢量指令来做。我还发现SSE4.1已经对点积、DPPS有指导作用。
问题是,在机器上,这个软件应该可以工作,安装了一个旧版本的gcc(4.1.2),它不支持SSE4.1,但是它有一个支持它的处理器(不要问我为什么gcc版本比处理器老…)。所以我不能使用mm_dp_ps函数。
我在c中添加了一些汇编代码,但问题是我以前从未使用过汇编代码,所以这真的很让人困惑。在汇编程序中编写所有处理矢量指令的代码是否更有效?
所以我在这里问,有没有其他方法可以使用dpps指令,它是否值得使用?

最佳答案

坦白地说,我看不出问题。根据您的描述,需要在其上执行最终代码的机器似乎支持SSE4.1和DPPS。因此,一旦编译了源代码(包括内部(或程序集),就可以在这台机器上执行它。你只需要用一个新版本的编译器编译你的代码,要么在你正在谈论的机器上安装一个新版本,要么在另一台机器上编译,然后将可执行文件复制到它必须运行的机器上。
至于使用DPPS进行优化是否值得,这将取决于您的代码(即,优化的潜力有多大--您应该彻底分析以找出瓶颈所在)以及在这种特定情况下性能实际上有多重要(即,它值得您花时间吗?;时间就是金钱)
显然,如果您没有多少组装经验,那么在asm中实现您的例程,或者甚至只是围绕DPPS编写您自己的asm包装函数,都会变得不那么吸引人。(但这当然是可能的。)

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

10-11 21:16