3

での多くの操作を含む callgrind / qcachegrind を使用して、いくつかの信号処理コードをプロファイリングしていstd::vector<float>ます。

Mac OS のビルトインnearbyint機能からかなり深刻なホットスポットが発生しています。

ここに画像の説明を入力

これは、このベクトル関数によってほぼ完全に呼び出されているようです。

ここに画像の説明を入力

これは、多くのクラス メンバー関数から呼び出されます。私には、_push_back_slow_path割り当てのボトルネックのように見えますが、その理由は完全にはわかりません。実行ループのどの時点でも、ベクトルのサイズを変更していません。起こっていることはすべて、参照によってコピーされたり、反復されたり、data()op を使用して vDSP 操作の生のポインターを取得したりすることがあります。例えば ​​。. .

ここに画像の説明を入力

  • vectorホットスポットに未加工のデータ ポインターを渡しているときに、vDSP 関数がこのホットスポットの原因になるのはなぜですか?
  • このホットスポットの原因として考えられるものは何ですか?
  • 登場する理由はbasic_string?プロファイルされたライブラリは文字列を使用しません。
  • std::array可能な限り に切り替えることは賢明な次の動きでしょうか?

さらに詳しい情報をお気軽にお尋ねください。喜んで質問を編集します。

編集1

最初の答えに応えて、私は明示的にpush_backどこにも電話していません。ホットスポットは、フロートでのインライン化されたログ操作など、一見おかしな場所で発生しています。これは奇妙なことをしているコンパイラの最適化でしょうか?

ここに画像の説明を入力

4

0 に答える 0