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