1

こんにちは、VTUNE (Intel Visual Studio 拡張機能) を使用して、研究用に作成した 2D 数値モデルを少し高速化するためにプロファイリングしています。私はすでにこの方法で 1D モデルを高速化しています (つまり、モデルの「ホットスポット」を特定しています)。今回、プロファイラーを実行した後、最も時間のかかる部分は、(1D モデルで発生したように) 私が書いた Fortran サブルーチンではなく、Acxtrnal.dll という dll であることがわかりました。このdllの名前をグーグルで検索しましたが、より良い情報を見つけることができませんでした. この dll がなぜそんなに多くを消費しているのか、そして何のために必要なのか、誰か知っていますか? ありがとうA。

編集:したがって、Microsoft Web サイトから 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<-LIUSTERSUBR<-CL<
-RECM -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のシンボルは本当に必要ありませんでした:)

It's good that you took two stack samples, so you could see the problem twice. Seeing a problem once is not enough unless you know in advance that you have a really serious slowdown. Seeing it twice in so few samples means it is responsible for a large fraction of the time, like more than 50 percent and possibly close to 100, so it's worthwhile trying to fix. (Actually it's a Beta distribution whose most likely value is 2/2 = 100%.)

于 2013-02-03T23:04:57.773 に答える