-1

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

就我而言,我想结合两个级别的噪声并对它们应用阈值。我可以简单地将它们相乘,因为它们在从0到的范围内,1并在同一范围内应用阈值。或者我可以将它们加在一起并在从0到的某个范围内应用一个阈值2。我知道算法并不相同,但两者都可以满足我的要求。

4

3 回答 3

3

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

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

这当然假设“快速”真的很重要。需要多长时间,您“允许”使用多长时间是否有限制。

于 2013-06-08T09:30:23.257 回答
2

优化问题的标准答案:

首先使您的实现正确且可读。然后检查这是否提供了可接受的性能。如果没有,请分析您的代码并检查您在哪里损失了大部分处理时间。然后完全改变它。

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

于 2013-06-08T10:35:19.067 回答
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(or a << 1) 而不是a*2,源代码不是(直接)决定性能的因素,生成的机器代码会,并且所有认真的编译器都会降低强度.

于 2013-06-08T11:06:49.157 回答