c++の処理速度の計測方法を調べる
c++言語を覚えたい理由の一つにc++の処理速度が「早いから」があります
ですがc++の実行・処理速度って
どうやって測るんですか?
C言語/C++ 処理時間計測 入門 - ViVi web site
上のサイトによると、
プログラム開発当初から過度のパフォーマンス最適化を行うのは良くないと言われている。 プログラムソースの柔軟性が失われる可能性があるし、必要無いかもしれない最適化に時間を費やすのは開発工数管理的に好ましくないからだ。
プログラムがある程度動作するようになり、パフォーマンスが悪い(実行速度が遅すぎる)場合は、 処理時間計測を行い処理時間を要している箇所を探しだし、アルゴリズムやデータ構造の変更などのパフォーマンス・チューニングを行う必要がある。
らしいので
最適化は、自分にはまだ必要無いという事が判明しました
しかし、c++言語を書く練習の一つとして
自分の書いたコードがどのくらいの処理速度なのかを測るのはいい練習だと思います
後々になって、その経験が役に立つ時が来ると思いますしね
上のリンクを参考にしながら
処理速度を測る為の自分なりのコードを
wandboxに書いてみました
70〜90%ぐらいほぼ一緒ですが
エラー無くかけました
version c++14
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << "clock():\n";
for (int i = 0; i < 10; ++i) {
vector<int> v; // int 型動的配列
clock_t start = clock(); // *************** スタート時間
const int N = 1000*100; // 10万回
for (int i = 0; i < N; ++i) {
v.push_back(i); // 末尾に i を追加
}
clock_t end = clock(); // *************** エンド時間
cout << "duration = " << (double)(end - start) / CLOCKS_PER_SEC << "sec.\n";
}
getchar();
return 0;
}
MATLABでよく処理速度を計っていたので、すぐに気付きましたが
clock()という関数を使って
clock_t start = clock(); ここで計測時間が始まり
clock_t end = clock(); ここで計測時間が終了して
その間に行っている計算?処理?の速度を測っているんですよね?
それ以外にも処理速度を計る関数は他にも沢山あるらしいです
- clock() c/c++
- GetTickCount() windows
- timeGetTime() windows
- QueryPerformanceCounter() windows
- C++11 std::chrono() c++11
その他のライブラリ リンク
処理時間の計測を考察しているQiita先輩がいたので
それに習ってみるのも経験になりそうです
C++ 処理時間計測classを作ってみる
これでc++言語を学んでいる間、処理速度を測ったり出来る様になりました!
(上で紹介している関数は、あくまでもc++のコーディング練習程度である可能性が出てきたので参考程度に、詳細はコメント欄をご覧下さい)
処理の高速化については
別の話題になるし、深い知識がいると思うので
いずれかは説明が出来る様になりたいですね
追記
c++の処理速度計算は時間プロファイラー?を使って測る方法がいいらしいですよ?
(詳細はコメント欄をご覧下さい)
(2019年8月現在)