2016-08-23 12 views
0

私はCで書かれた数値コードをプロファイリングしています(ProfilerはInstruments、コンパイラはMac OSX 10.11.6ではclangです)。実行時間の77.3%が_platform_memmove$VARIANT$Haswellに費やされています。

アセンブリ出力では、上記の関数はDYLD-STUB$$memcpyによって呼び出されます。しかし、私はmemcpyが私のCコードにはありません(私はいくつかのmallocを持っています)。

さらに深くなると、組み立てコマンドrepがかなり時間を費やすことになります。 this投稿から、repは役に立たないと思われます。なぜコンパイラはそれを挿入しますか?そしてmemcpyはどこから来たのですか?

また、-gでコンパイルしようとしましたが、_platform_memmove$VARIANT$Haswellはもうほとんどうごめいていません。

+0

コードを投稿できますか?測定にはどのような差異/標準偏差がありますか? '-g'でランタイム全体がどのように変化しますか? – EOF

+2

memcpyで 'rep'が実際のコピーをしています。 – 2501

+0

あなたがこれまでに行ったことを実際に伝え、問題の原因を突き止めるために。 – Koshinae

答えて

4

さらに多くの検索をしたところ、問題が見つかりました:毎回コピーされる関数に構造体を渡していたので、memcpyです。

構造体へのポインタを受け入れるように関数を変更しました。これは、ファクタ5で自分のコードを高速化しました。

関連する問題