我发现在Ubuntu下运行一些计算代码的性能相当差,这是在我用于科学计算的全新无头工作站机器上.我注意到在Ubuntu上运行一些稍微复杂的代码与我用于开发的旧Mac笔记本电脑上的速度有所不同.然而,我已经设法将它提炼成一个非常简单的例子,它仍然表现出比我的旧机器更少的改进:
#include <stdio.h> #include <math.h> int main() { double res = 0.0; for(int i=1; i<200000000; i++) { res += exp((double) 100.0/i); } printf("%lf",res); return(0); }
现在,Mac是运行OS X 10.5的近5年的2.4GHz Core 2 Duo MacBook Pro,它运行此代码大约6.8秒.然而,在运行Ubuntu 11.10的全新3.4GHz Core i7戴尔上大约需要6.1秒!有人可以告诉我这里发生了什么,因为一台近5年的笔记本电脑在全新桌面工作站的10%以内是荒谬的吗?这更加荒谬,因为我可以通过监控工具看到Core i7涡轮增压到接近4GHz!
Mac编译:
gcc -o test test.c -std=gnu99 -arch x86_64 -O2
Ubuntu编译:
gcc -o test test.c -std=gnu99 -m64 -O2 -lm
谢谢,
路易
it is absurd that a nearly 5 year old laptop is within 10% of a brand new desktop workstation
请记住,您正在对一个特定函数(exp)进行基准测试.我们真的不知道你所测试的exp()函数的两个实现是否相同(一个比另一个更好地优化是不可想象的).
如果您要对不同的功能进行基准测试,结果可能会大不相同(可能更符合您的期望;或者不是).
如果exp()确实是您实际应用的瓶颈,那么可以考虑使用快速近似.这篇论文提供了一个这样的近似值:A Fast,Compact Approximation of the Exponential Function.