我有一些高性能的Haskell代码 - 内部循环编译成6个汇编指令。 修改内部循环使其不那么有效并没有对性能产生任何明显影响,这表明内部循环不是瓶颈。 但是,当我打开分析器时,为内部循环生成的汇编代码变得明显不那么有效,并且分析器报告内部循环花费了85%的时间。
我怀疑某些东西不必要地慢,但是当我使用分析器查看时,我怀疑分析器使内部循环足够慢以至于它占主导地位。 我可以使用什么技术来查看时间去哪里? 如果有适用于Haskell的采样分析器,那将是很棒的。
我有一些高性能的Haskell代码 - 内部循环编译成6个汇编指令。 修改内部循环使其不那么有效并没有对性能产生任何明显影响,这表明内部循环不是瓶颈。 但是,当我打开分析器时,为内部循环生成的汇编代码变得明显不那么有效,并且分析器报告内部循环花费了85%的时间。
我怀疑某些东西不必要地慢,但是当我使用分析器查看时,我怀疑分析器使内部循环足够慢以至于它占主导地位。 我可以使用什么技术来查看时间去哪里? 如果有适用于Haskell的采样分析器,那将是很棒的。
# 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
如果你在编译时保存核心,你可以将这些符号映射回核心中的函数。
虽然比较麻烦,但可以得到更可靠的结果。
目前正在进行自动化处理这个方面的工作。