質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

4回答

1070閲覧

C++でループ内の時間計測

sanasei

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/04/11 12:39

前提・実現したいこと

Visual Studio 2013 でビルド済の
C++プログラム内の時間を測定したいです

発生している問題・エラーメッセージ

ループ内の関数内で処理される複数の処理それぞれの累計時間を計りたいが、良い方法が分からない
以下のようなソースコードイメージで
処理4a、処理4bの累計時間を計りたい

該当のソースコードイメージ

関数1(){
for(1~1臆){
関数2
}
}

関数2(){
処理2a
関数3
処理2b
}

関数3(){
処理3a
関数4
処理3b
}

関数4(){
処理4a
処理4b
}

試したこと

http://vivi.dyndns.org/tech/cpp/timeMeasurement.html
上記サイトを参考に、cronoで単独で処理4a、処理4bを計ってみることはしましたが、
そこからどう集計させればよいか思いつきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2019/04/12 21:44

> C++プログラム内の時間を測定 測定結果を何に使用されるのでしょうか? たぶんこれは目的では無く手段で、目的は別にあると思うのですが よろしければ目的についても記載されるともう少し的確な回答が得られると思います。
guest

回答4

0

VS2013なら、VisualStudioのパフォーマンス分析が使えます。
時間測定用の変数・処理を入れずに関数ごとの経過時間がだせます。
#それでも何もしないときに比べれば時間の影響はあるでしょうが…
ボトルネックを調べたいのであれば、これで十分のはず

私も、y_waiwaiさんの言葉に追加。
時間計測いれたことで最適化に影響する可能性もありえます(releaseなら)

投稿2019/04/12 18:45

yominet

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

用途にもよりますが、一時的なもの(ボトルネック探し等の、releaseするときは残さないもの)であれば、外に変数を用意しておけばいいんじゃないかなと思います。
多分これが一番変更少ない

C++

1namespace { 2 int timeA; 3 int timeB; 4} 5関数1() { 6 timeA = 0; 7 timeB = 0; 8 for(11) { 9 関数2 10 } 11 // ここに来るときにはtimeAに処理4aにかかった時間の累計が入り、 12 // timeBに処理4bにかかった時間の累計が入る 13} 14 15... 16 17関数4() { 18 処理4a 19 timeA += 処理4aにかかった時間; 20 処理4b 21 timeB += 処理4bにかかった時間; 22}

y_waiwaiさんが仰っている通り、入れ子になったものを複数階層同時に計測すると正しく測れないので、一つずつやっていく必要があります。

投稿2019/04/12 00:26

moredeep

総合スコア1507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

単純にそれらの関数を並べて順番に実行させるようにして、最初から最後までをそいつで計測すればそんでいいんじゃ

投稿2019/04/11 12:54

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanasei

2019/04/11 23:00

回答ありがとうございます。 理解できなかったので教えてください。関数を並べると言うのは一つの関数内にコードを書き換えるという事でしょうか? それくらい手を加える必要がありそうですか?
y_waiwai

2019/04/11 23:24

時間をセットする、時間を読む、という操作だけでも時間がかかります あなたがなにをどうしたいのか、も一度よく考えましょう。 あんまし細切れに時間計測したところで、なんの時間計測してるのかわからなくなりますぜ
guest

0

処理4a、処理4bの累計時間を計りたい

ということなので

単独で処理4a、処理4bを計ってみることはしましたが、
そこからどう集計させればよいか

(処理4aの時間+処理4bの時間)*1億 で良いのでは?

投稿2019/04/11 12:45

編集2019/04/11 12:57
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanasei

2019/04/11 22:56

回答ありがとうございます インデックスが変わる度に同じ時間で処理されるとは限らないので、特定ケースの測定値を1億倍するのはNGです。 1億回全て測りたいと考えています
Y.H.

2019/04/11 22:58

後出し条件は止めて、すべて質問に追記下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問