总和比乘法更快?

时间:2013-06-08 09:20:15

标签: c++ performance cpu add multiplication

我想知道一笔金额是否比近期CPUS的产品更快。计算总和在数学上更容易,但可能有优化加速处理器中的乘法;我不知道。

在我的情况下,我想结合两个级别的噪音并对它们应用阈值。我可以简单地将它们相乘,因为它们在01的范围内,并在相同的范围内应用阈值。或者我可以将它们添加到一起并在02范围内的某个位置应用阈值。我知道算法并不相同,但两者都符合我的要求。

3 个答案:

答案 0 :(得分:3)

我认为我们在这里谈论浮点数,而不是整数运算,因为你提到0到1的范围。

在这种情况下,没有显着差异。究竟有多大差异取决于代码运行的实际处理器,操作的确切连续性(一个操作依赖于另一个操作,答案不是“准备好”直到稍后等等,其中另一个算法允许更多的计算要并行完成)。因此,您需要实际实现两个版本的代码并测量系统上的差异。如果要在许多不同的机器上运行,则需要在具有不同处理器的多种类型的机器上进行测量。

这当然假设“快速”真的很重要。需要多长时间,并且是否允许“允许”服用多长时间。

答案 1 :(得分:2)

优化问题的标准答案:

首先使您的实现正确且可读。然后检查它是否提供可接受的性能。如果没有,请分析您的代码并检查丢失大部分处理时间的位置。然后改变那个。

您可能需要更改第二步的可读代码,但由于您首先要使其正确且可读,因此您需要有一个基线进行比较,您可以先阅读代码所执行的操作。

答案 2 :(得分:2)

x86的典型(从处理器到处理器)数字是

        Latency 1/Throughput
fp add:    3         1
fp mul:    5         1-3
int add:   1         < 1
int mul:   3-7       1-4

具有更多位的整数乘法更慢,并且双宽乘法(在C中不可表示)更慢。

int add和int mul之间的最大区别并不意味着你应该写a+a(或a << 1)而不是a*2,来源不是(直接)决定什么性能,由此产生的机器代码,以及所有严肃的编译器无论如何都会降低强度。