での多くの操作を含む callgrind / qcachegrind を使用して、いくつかの信号処理コードをプロファイリングしていstd::vector<float>
ます。
Mac OS のビルトインnearbyint
機能からかなり深刻なホットスポットが発生しています。
これは、このベクトル関数によってほぼ完全に呼び出されているようです。
これは、多くのクラス メンバー関数から呼び出されます。私には、_push_back_slow_path
割り当てのボトルネックのように見えますが、その理由は完全にはわかりません。実行ループのどの時点でも、ベクトルのサイズを変更していません。起こっていることはすべて、参照によってコピーされたり、反復されたり、data()
op を使用して vDSP 操作の生のポインターを取得したりすることがあります。例えば 。. .
vector
ホットスポットに未加工のデータ ポインターを渡しているときに、vDSP 関数がこのホットスポットの原因になるのはなぜですか?- このホットスポットの原因として考えられるものは何ですか?
- 登場する理由は
basic_string
?プロファイルされたライブラリは文字列を使用しません。 std::array
可能な限り に切り替えることは賢明な次の動きでしょうか?
さらに詳しい情報をお気軽にお尋ねください。喜んで質問を編集します。
編集1
最初の答えに応えて、私は明示的にpush_back
どこにも電話していません。ホットスポットは、フロートでのインライン化されたログ操作など、一見おかしな場所で発生しています。これは奇妙なことをしているコンパイラの最適化でしょうか?