1

嗨,我正在使用 VTUNE(英特尔视觉工作室扩展)分析我为研究编写的 2D 数值模型,以加快速度。我已经以这种方式加速了我的一维模型(即识别我的模型的“热点”)。不过这一次,在运行分析器后,我发现最耗时的部分不是我编写的 fortran 子例程(因为它发生在我的一维模型中),而是一个名为 Acxtrnal.dll 的 dll。我用谷歌搜索了这个 dll 的名称,但找不到更好的信息。有谁知道为什么这个 dll 需要这么多以及它需要什么?谢谢。

编辑:所以我能够从 Microsoft 网站添加 DLL 的下载符号,所以现在在调试时显示 CPU 时间在这里丢失了。NS_FaultTolerantHeap::APIHook_RtlFreeHeap。如果我展开它显示(大写子程序是我的):

free<-for__free_vm
for_write_int_fmt_xmit<-for_write_int_fmt<-LIMITERSUBR<-RECMUSCL<-MAIN__<-main<-_tmainCRTStartup<-BaseThreadInitThunk<- RtlUserThreadStart<- RtlUserThreadStart
for
_release_lun<-for_write_int_fmt_xmit<-for_write_int_fmt<-LIMITER<SUBR<-RECMUSCL<
M -main< - tmainCRTStartup<-BaseThreadInitThunk<- _RtlUserThreadStart<-_RtlUserThreadStart

4

1 回答 1

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%。)

于 2013-02-03T23:04:57.773 回答