相关疑难解决方法(0)

如何分析在Linux上运行的C++代码?

我有一个在Linux上运行的C++应用程序,我正在优化它.如何确定代码的哪些区域运行缓慢?

c++ unix profiling

1732
推荐指数
12
解决办法
49万
查看次数

最后的性能优化策略

这个网站上已经存在很多性能问题,但是我发现几乎所有这些都是特定于问题且相当狭窄的问题.几乎所有人都重复这些建议,以避免过早优化.

我们假设:

  • 代码已经正常工作
  • 所选择的算法对于问题的情况已经是最佳的
  • 已经测量了代码,并且已经隔离了违规的例程
  • 所有优化尝试也将被测量,以确保它们不会使事情变得更糟

我在这里寻找的是在一个关键算法中挤出最后几个百分点的策略和技巧,除此之外别无他法.

理想情况下,尝试使答案语言不可知,并在适用的情况下指出建议策略的任何缺点.

我将使用我自己的初步建议添加回复,并期待Stack Overflow社区可以想到的任何其他内容.

language-agnostic optimization performance

600
推荐指数
28
解决办法
8万
查看次数

gprof 的替代品

还有哪些程序与 gprof 做同样的事情?

profiler profiling gprof

170
推荐指数
6
解决办法
7万
查看次数

一起计算sin和cos的最快方法是什么?

我想一起计算一个值的正弦和正弦值(例如创建一个旋转矩阵).当然我可以一个接一个地分别计算它们a = cos(x); b = sin(x);,但我想知道在需要两个值时是否有更快的方法.

编辑: 总结到目前为止的答案:

  • 弗拉德说,有asm命令FSINCOS计算它们(几乎与FSIN单独呼叫同时)

  • Chi注意到的那样,这种优化有时已经由编译器完成(当使用优化标志时).

  • 咖啡厅指出,其功能sincossincosf可能是可用的,并且可以通过只包括直接调用math.h

  • 讨论使用查找表的 tanascius方法存在争议.(但是在我的计算机和基准测试场景中,它运行速度比sincos32位浮点几乎相同的速度快3倍.)

  • Joel Goodwin与一种极其快速近似技术的有趣方法相关联,具有相当好的准确性(对我来说,这比查表更快)

c c# c++ algorithm math

98
推荐指数
9
解决办法
2万
查看次数

Java的快速超越/三角函数

由于java.lang.Math中的三角函数非常慢:是否有一个快速和良好近似的库?似乎可以在不损失太多精度的情况下快速进行几次计算.(在我的机器上,乘法需要1.5ns,而java.lang.Math.sin需要46ns到116ns).遗憾的是,还没有办法使用硬件功能.

更新:功能应该足够准确,比如GPS计算.这意味着您需要至少7个十进制数字的精度,这排除了简单的查找表.它应该比基本x86系统上的java.lang.Math.sin快得多.否则就没有意义了.

对于pi/4以上的值,除硬件功能外,Java 还会进行一些昂贵的计算.这样做是有充分理由的,但有时你更关心速度而不是最后一位精度.

java math optimization trigonometry

19
推荐指数
3
解决办法
1万
查看次数

三角函数的效率/速度

在我正在制作的游戏中,我有两个点,pt1和pt2,我想弄清楚它们之间的角度.在早先的计算中,我已经计算出了距离.显而易见的方法是在垂直距离(tan(theta)= opp/adj)上确定水平距离.

我想知道,因为我已经计算了距离,使用arcsine/arccosine与距离和dx或dy会更快吗?

另外,我可能会更好地预先计​​算表格吗?

performance geometry

6
推荐指数
4
解决办法
4278
查看次数

是否有可能使这个矢量化的MATLAB代码更快?

在我的程序中,我需要计算总和:

和.

我计算这个总和与新值2500倍Cz.

参数z可以是矢量.我编写了简单的for循环和矢量化版本代码,如下所示:

K = 200;
n_z = 40000;
C = ones(K,1); % an example, in real life the arey some coefficients (at next call will be new)
k = 0:K-1;
z = linspace(0, 2*pi, n_z); % at next call will be new

tic;
    my_sum_for = zeros(1, K);
    for i=1:n_z
       my_sum_for(i) = C' * tan(k' * z(i));
    end
toc; % Elapsed time is 1.820485 seconds.

tic;
     my_sum = C' * tan(k' * z); …
Run Code Online (Sandbox Code Playgroud)

matlab vectorization

1
推荐指数
1
解决办法
310
查看次数