我想知道一笔金额是否比近期CPUS的产品更快。计算总和在数学上更容易,但可能有优化加速处理器中的乘法;我不知道。
在我的情况下,我想结合两个级别的噪音并对它们应用阈值。我可以简单地将它们相乘,因为它们在0
到1
的范围内,并在相同的范围内应用阈值。或者我可以将它们添加到一起并在0
到2
范围内的某个位置应用阈值。我知道算法并不相同,但两者都符合我的要求。
答案 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
,来源不是(直接)决定什么性能,由此产生的机器代码,以及所有严肃的编译器无论如何都会降低强度。