通过编码是否有任何(非微优化)性能增益
float f1 = 200f / 2
Run Code Online (Sandbox Code Playgroud)
在比较中
float f2 = 200f * 0.5
Run Code Online (Sandbox Code Playgroud)
几年前我的一位教授告诉我,浮点除法比浮点乘法慢,但没有详细说明原因.
这句话适用于现代PC架构吗?
UPDATE1
关于评论,请同时考虑这个案例:
float f1;
float f2 = 2
float f3 = 3;
for( i =0 ; i < 1e8; i++)
{
f1 = (i * f2 + i / f3) * 0.5; //or divide by 2.0f, respectively
}
Run Code Online (Sandbox Code Playgroud)
更新2 从评论中引用:
[我想]知道什么是算法/架构要求导致>除法在硬件上比复制要复杂得多
数学库经常基于FLOPS进行比较.当我向几个不同的数学库展示FLOPS与大小的点集时,向我传达了什么信息?
如果比较是在同一算法的两个实现之间或两个不同硬件上的相同软件之间进行比较,那么作为性能度量的FLOPS会更有意义.我不明白为什么它是比较像矩阵矩阵乘法这样的东西的合适或流行的方法.
暗示只是底层算法几乎相同,并且通过最小化开销获胜来最快地为浮点单元提供信息的代码?
例子比比皆是.
http://eigen.tuxfamily.org/index.php?title=Benchmark
https://code.google.com/p/blaze-lib/wiki/Benchmarks
另一方面,这些LAPACK和Armadillo基准测试使用绝对时间进行给定操作,这对我来说更有意义.
http://www.netlib.org/lapack/lug/node71.html
http://arma.sourceforge.net/speed.html
相关:
我有一个表现良好的例程.但是,我不得不改变它.这种改变提高了程序的精确度但却损害了性能.
例程是大量的数学计算,可能是CPU绑定(我仍然需要对此进行更严格的测试,但我99%肯定).它是用C++编写的(编译器是Borland C++ 6).
我现在想测量一下例程的性能,首先我考虑测量执行时间,但在我看来这是一种有缺陷的方法,因为可能会有更多的事情发生.
然后我讨论了这个主题:测量应用程序性能的技术 - Stack Overflow.我喜欢通过MFlops测量的想法.
我的老板建议尝试通过cpu时钟周期进行某种测量,因此测试将与机器无关,但是,我认为这种方法属于MFlops测试.
在我看来,衡量两件事(执行时间和MFlops)是要走的路,但我想听听stackoverflow专家你们的想法.
测量CPU绑定例程性能的方法是什么?
我发现我的电脑有NVIDIA CUDA技术,我想测量CPU和GPU的处理能力.
我想要更深入地了解它是如何工作的,而不是搜索程序来做到这一点.我需要什么样的代码(C/C++)?