haskell - 分析高性能 Haskell 代码

标签 haskell assembly profiling

我有一些高性能 Haskell 代码 - 内部循环编译为 6 条汇编指令。修改内部循环以降低效率不会对性能产生任何明显影响,这表明内部循环不是瓶颈。但是,当我打开分析时,为内部循环生成的汇编代码的效率显着降低,并且分析器报告内部循环占用了 85% 的时间。

我怀疑某些东西不必要地慢,但是当我使用分析来查看什么时,我怀疑分析使内部循环足够慢以至于它占主导地位。我可以使用哪些技术来了解时间都花在哪里了?如果 Haskell 存在一个采样分析器,那就太好了。

最佳答案

您可以使用 Linux 性能事件:https://ghc.haskell.org/trac/ghc/wiki/Debugging/LowLevelProfiling/Perf

这将为您提供如下输出:

# Samples: 9161149923
#
# Overhead  Command      Shared Object  Symbol
# ........  .......  .................  ......
#
    30.65%   queens  queens             [.] s1ql_info
    18.67%   queens  queens             [.] s1qj_info
    12.17%   queens  queens             [.] s1qi_info
     9.94%   queens  queens             [.] s1o9_info
     5.85%   queens  queens             [.] r1nI_info
     5.33%   queens  queens             [.] s1sF_info
     5.18%   queens  queens             [.] s1sG_info
     3.69%   queens  queens             [.] s1oP_info
     1.68%   queens  queens             [.] stg_upd_frame_info
     0.88%   queens  queens             [.] stg_ap_2_upd_info
     0.62%   queens  queens             [.] s1sE_info
     0.56%   queens  [kernel]           [k] read_hpet
     0.39%   queens  queens             [.] stg_ap_p_info
     0.35%    :2030             f76beb  [.] 0x00000000f76beb
     0.31%   queens  queens             [.] s1oD_info
     0.28%  swapper  [kernel]           [k] mwait_idle_with_hints
     0.25%   queens  queens             [.] __stg_gc_enter_1
     0.23%   queens  queens             [.] evacuate
     0.18%  swapper  [kernel]           [k] read_hpet
     0.12%   queens  queens             [.] scavenge_block

如果在编译时保存核心,则可以将这些符号映射回核心中的函数。

有点痛苦,但会给你更值得信赖的结果。

正在进行一些工作来自动完成此操作。

关于haskell - 分析高性能 Haskell 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20881177/

相关文章:

haskell - 大型 Monad 堆栈的示例

使用 avr-gcc 编译汇编程序

c - 计时器在 C 中的函数调用中查找耗时

django - 分析 Django Web 服务器的高启动时间

performance - Spark : Inconsistent performance number in scaling number of cores

haskell - Data.Set 的 `any` 函数

haskell - 存在量化类型无法在类型类上下文中推断

haskell - Haskell 中的 C 风格枚举?

linux - 在 pulseaudio 中使用汇编程序 -/dev/dsp 播放音乐?

c - 如何在x86-64架构上使用INVLPG?