2016-11-14 6 views
0

私はプロファイリングを行うために非常に眠いCSを使用しています。プロファイリング; ippvmGetLibVersion:私はそれを呼び出さなかった

IPP(インテルのインテグレーテッド・パフォーマンス・プリミティブは)私のプロジェクトで使用され、基本的に単一の呼び出しのために:プロファイリングした後

ippsExp_64fc_A26(reinterpret_cast<Ipp64fc*>(delta_vector.data()), reinterpret_cast<Ipp64fc*>(delta_vector_out.data()), delta_vector.size()); 

、私は以前に1を述べた呼び出す関数から作られた奇妙な関数呼び出しに気づきました。 ippvmGetLibVersionはその名前であり、実行時間のほぼ3分の1を要します。私の情報源には言及していません。 ippInitは、メインプログラムの先頭で呼び出されます。

何が起こっていますか?どのようにして取り除きますか?同じリターンで一定の呼び出しを実行する時間が無駄になる

答えて

0

実際にはバグです。 Visual Studioのプロファイラには、前述の機能の兆候は見られません。

+1

このような非常に眠そうなCSの行動の理由は、次のようなものでもあります。すべてのプロファイラはCPUサンプリングを使用します。つまり、一定間隔でアプリケーションを中断し、中断前にアプリケーションがどこで動作していたかを判断しようとします。この分析は、スタックおよびグローバルシンボルからの情報に対して行われます。 IPPベクトル演算ドメインのippsExp_64fc_A26およびその他の関数には、アプリケーションのアドレス空間にグローバル名はありません。したがって、VS CSはプレースメントの分析中に基にするものは何もありません。これは、最も近い既知のグローバルシンボル(あなたの場合はippvmGetLibVersion)を指すことができます。スタックアンワインディング情報の欠如))。 –

1

誰がippvmGetLibVersionを呼び出しているか確認できますか? VS CSはその機能を提供しますか? もしそうでなければ、ippvmGetLibVersionアドレスだけでブレークポイントを設定し、コールスタックを表示することができます。

P.S.この関数にippsExp_64fc_A26と共通するものがあるかどうかを確認します。

よろしく、Sergey。

+0

いいえ、期待どおり、ippVMGetLibVersionはippsExp_64fc_A26から呼び出されません。 GetLibVersionの他の可能な呼び出しを探します。 –

+0

ありがとう!私はそれを調べようとします - おそらく、プロファイラ自体は盗聴されているか何かです。なぜなら、ippInitとこれ以外の呼び出しはないからです。 –

関連する問題