4

MacOS上のC++用のコード分析/プロファイリングツールを探しています。このスレッドに関する投稿があったことは知っていますが、必要なアプリケーションは非常に具体的であるため、もう少し具体的なアドバイスを提供できるかもしれません。

だからここに私の問題があります:私はC ++で科学コード(修士プロジェクト)を書いているので、それは純粋なコンソールアプリケーションであり、対話性は与えられていません。コードは超並列コンピューターで実行されることになっているため、MPIを使用します。ただし、現時点では、スケーラビリティを最適化するのではなく、シングルコアのパフォーマンスを最適化しています。プログラム全体をシリアルとして書き直したくないので、1スレッドでMPIを使用します。正常に動作しますが、オプティマイザは明らかにこれに対処できる必要があります。

何を分析したいですか?ええと、コードは非常に単純な構造であるという意味でそれほど複雑ではありません。したがって、必要なのは、プログラムが特定の関数に費やす時間のリストだけです。これにより、最も時間が失われる場所がわかり、測定できます。私の最適化のスピードアップ。

すべてのアイデアをありがとう

4

4 に答える 4

3

CPUサンプラーとスレッドアクティビティビューアーを含むInstruments.appを使用する必要があります...とりわけ。(Xcode で「製品 > プロファイル...」を選択)

よりきめ細かいものが必要な場合は、コードをインストルメント化できます。偶然にも、私はそのような機会のために一連のプロファイリング マクロを作成しました :)

https://github.com/nielsbot/Profiler

これにより、インストルメント化されたルーチンで費やされた時間のネストされた素敵な出力が表示されます。(そのページの指示)

于 2013-03-16T21:40:06.437 に答える
1

kcachgrindを試しましたか:http://kcachegrind.sourceforge.net/html/Home.html with valgrind?

于 2013-03-16T21:04:55.667 に答える
1

http://www.scalasca.org/をお勧めします。その後の並行公演にもご利用いただけます。

于 2013-03-16T21:50:08.693 に答える
1

「遅い機能」を探したり、さまざまな部分で使用された時間を測定したりしないでください。これらの概念は非常に間接的であるため、何を最適化するかを伝えるのにはほとんど役に立ちません。

代わりに、実時間でプログラム全体が行っていることをストロボ X 線で撮影し、それぞれを調べて、プログラムがその瞬間を費やしている理由を確認します。これがうまく機能する理由は、機能色のメガネで見ないからです。それは目的に応じた色のメガネで見ているので、プログラムがやっていることを実行する必要があるかどうかがわかります。大きな問題の特定については非常に正確です。それらの測定は正確ではありませんし、正確である必要もありません。

測定を行うだけで何が起こるかというと、一連のルーチンで多数の数値が得られるということです。あなたはそれらを見て、「それはどういう意味ですか?」と言います。何を修正すべきかを教えてくれなければ、自分の背中を軽くたたき、プログラムは最適であるに違いないと言います。実際、おそらく修正できるものがあるかもしれませんが、プロファイラーからはそれを把握できませんでした。さらに、それを見つけて修正すると、さらに高速化するために修正できる他の問題が明らかになる可能性があります。

それがランダムな一時停止です。

于 2013-03-16T21:50:17.627 に答える