2010-11-14 28 views
-1

哪些操作应该会更快Linux上的x86 CPU上,什么是平均差异(单位:%):整数除法VS双师 - 优化问题

unsigned int x, y, z; 
x = y/z; 

或:

double x, y, z; 
x = y/z; 

的双操作将由FPU执行,并且CPU可以继续执行其他命令。这是对的吗? 它依赖于编译标志(我使用gcc与-O3标志)?

+5

这些是两种不同的操作,结果不同,并且很少,如果有的话,可以互换。如果您无法切换到更快的替代方案,X是否比Y快一点? – delnan 2010-11-14 17:51:44

+0

+1以上。并为作者..做一批,并运行在一个虚拟的让;也可以看到结果。 – sdadffdfd 2010-11-14 18:01:10

+1

为什么不试试呢? – 2010-11-14 23:00:41

回答

3

如果您的工作本质上是基于整数的,则int-float和float-int转换可能会破坏任何性能优势。 C的默认转换(截断)在旧款英特尔芯片上可能会特别慢。

除此之外,您的想法存在正确性问题,这可能是不足以实现的理由。

0

一个单独的浮点除法指令将花费比整数更长的时间。但是,如果您连续进行大量工作,由于流水线技术(至少在现代x86上),它们将达到大致相同的速率。

哦,是的,当FPU忙时,CPU可以继续其他操作。

0

积分操作通常比浮点操作要快。差异主要取决于硬件:有些平台甚至没有FPU。

这样一个简单的操作应该完全不依赖于您的操作系统或编译器标志:这应该是一些简单的汇编指令。

找出多少操作需要的最好方法是检查平台的组装手册或运行基准测试。

+1

在一些例如现代32位x86的情况下,编译器标志可能很重要:SSE(gcc'-mfpmath = sse')可能是更快的浮点执行方式。使用64位这通常是默认的。警告:调用约定可能会导致与非默认选项不兼容或性能差。 – jilles 2010-11-14 18:00:03