gpt4 book ai didi

c++ - 双瓶颈,如何改善?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:25:52 26 4
gpt4 key购买 nike

我需要提高以下代码的性能(Intel Ivy Bridge,x64):

unsigned int delta;
unsigned int a[100];
unsigned int b[100];

...

double sum = 0;

for(int i = 0; i < 100; i++)
sum += (double)b[i]/a[i];

bool possible = delta >= sum;

真正的瓶颈是double并使执行时间增加 3 倍。 a[index]将是 0 到 500m 之间的任何值。 b[index]将从 0 到 500。

:在这段代码的两次调用之间,数组 a 和 b 是如何修改的?

在每次调用中,唯一的区别是a[index]++;其中 0 <= index < 100 b 总是相同。 delta 也没有改变。

由于结果与另一个数字进行比较并存储为 bool 值,因此我绝对需要尽可能高的精度。这就是为什么我首先使用 double 而不是 float 的原因。如您所知,即使是 1/1b 的差异也会返回​​错误的值,因为结果是 bool 值!

最佳答案

第一件事:

将 Intel 程序集硬编码到您的程序中会降低它的可移植性、更脆弱、更不安全,并且通常会令人恐惧。这是一个应该避免的任务,除非您需要从裸机中获得最后一点性能,例如编写内核级代码(驱动程序和调度程序)。这可能不是它的地方。

第二件事:

除非您像上帝一样,否则您可能无法编写比现有代码运行速度更快的程序集。 C++ 蕴含着深奥的魔力,许多常规操作会编译成违反直觉的优化,这些优化比朴素的解决方案运行效率更高。

第三件事:

组装不是你的问题。 double 代表 double float ,浮点运算通常比整数运算的计算成本更高,这个瓶颈是计算固有的。

关于c++ - 双瓶颈,如何改善?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20750237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com