旧版GCC上的DPPS

时间:2010-10-16 06:53:53

标签: c assembly sse

开平!

我需要在c中优化一些矩阵乘法代码,我正在使用SSE向量指令。我还发现SSE4.1已经有了dot-product,dpps的指令。

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

我在为c添加一些汇编代码时玩了一下。问题是我以前从未使用汇编程序代码,所以它真的很混乱。编写汇编程序中处理向量指令的所有代码也更有效率吗?

所以我在这里询问是否有其他方法如何使用dpps指令,是否值得使用?

1 个答案:

答案 0 :(得分:2)

坦率地说,我没有看到问题所在。根据您的描述,似乎需要执行最终代码的机器支持SSE4.1和DPPS。因此,一旦编译了源代码(包括instrinsic(或assembly)),就可以在这台机器上执行它。您只需要使用较新版本的编译器编译代码,方法是在您正在讨论的机器上安装较新版本,或者在另一台机器上编译,然后将可执行文件复制到它必须的机器上继续。

至于DPPS的优化是否值得付出努力,这将取决于您的代码(即,有多少优化潜力 - 您应该彻底剖析以找出瓶颈所在的位置)以及如何重要的表现实际上是在这个特定的情况下(即它值得你的时间?;时间就是金钱)

显然,如果你有很少的装配经验,在asm中实现你的例程,或者甚至只是在DPPS周围编写你自己的asm包装函数,就会变得不那么有吸引力了。 (但肯定可以这样做。)