您好我正在使用VTUNE(一个英特尔视觉工作室扩展)分析我为我的研究编写的2D数字模型,以便加快它的速度。我已经用这种方式加速了我的1D模型(即识别我模型的“热点”)。这一次,在运行探查器后,我发现最耗时的部分不是我写的fortran子程序(因为它出现在我的一维模型中),但它是一个名为Acxtrnal.dll的DLL。我用谷歌搜索了这个dll的名字,但我找不到更好的信息。有谁知道为什么这个dll需要这么多以及它需要什么? 谢谢 甲
编辑:所以我能够从微软网站上添加下载DLL的符号,所以现在调试它时会显示CPU时间丢失。 NS_FaultTolerantHeap :: APIHook_RtlFreeHeap。如果我展开它显示(大写子程序是我的):游离LT; -for__free_vm
for_write_int_fmt_xmit< -for_write_int_fmt< -LIMITERSUBR< -RECMUSCL< - 主要__< - 主< -_ tmainCRTStartup< -BaseThreadInitThunk< - 的 RtlUserThreadStart< - RtlUserThreadStart
对 _release_lun< -for_write_int_fmt_xmit< -for_write_int_fmt< -LIMITERSUBR< -RECMUSCL< - 主要< - 主< - tmainCRTStartup< -BaseThreadInitThunk< - _RtlUserThreadStart< -_ RtlUserThreadStart
答案 0 :(得分:1)
很好,你拿了几个堆栈样本,如图所示。你的RECMUSCL正在调用LIMITERSUBR,它正在调用for_write_int_fmt
,它正在做很多事情。
free
for__free_vm
for_write_int_fmt_xmit
for_write_int_fmt
LIMITERSUBR <------ Look at the line in LIMITERSUBR that prints integers
RECMUSCL because it appears on both stack samples
MAIN__
main
_tmainCRTStartup
BaseThreadInitThunk
__RtlUserThreadStart
_RtlUserThreadStart
for__release_lun
for_write_int_fmt_xmit
for_write_int_fmt
LIMITERSUBR
RECMUSCL
MAIN__
main
_tmainCRTStartup
BaseThreadInitThunk
__RtlUserThreadStart
_RtlUserThreadStart
您可以在LIMITERSUBR中的代码行查看堆栈示例,在这里您要编写整数,并查看是否需要这样做。
(你看,你真的不需要系统dll中的符号:)
你带两个堆栈样本是好的,所以你可以看到问题两次。 除非事先知道你有一个非常严重的减速,否则看一次问题是不够的。 在如此少的样本中看到它两次意味着它在很大一部分时间内负责,例如超过50%并且可能接近100,所以值得尝试修复。 (实际上它是Beta分布,其最可能的值是2/2 = 100%。)