コンピュータプラクティス I 時間の測定 水野嘉明 コンピュータプラクティスⅠ 時間の測定 水野嘉明 時間の測定 1
本日の内容 プログラムの性能評価 有効数字、測定精度 プログラム実行時間の測定 実験1 実験2、3、レポートは次回
プログラムの評価基準 性能 (performance) 機能 (function) 再利用性 (reusability) 安全性 (信頼性 reliability) 維持性 (保守性 serviceability,maintenancebility)
性能の評価 実行時間 行数や命令数は実行時間と強い相関 資源(resource: メモリやディスク容量等)の消費量
物理量の測定 物理量の測定においては、目盛りの10分の1まで読む (アナログ時) 測定値には必ず誤差がある 物理量の測定においては、目盛りの10分の1まで読む (アナログ時) mm 5 10 15 12.3mm 測定値には必ず誤差がある 12.3mmの 「.3」はあまり確かではない 12.3±0.05 の範囲を示すと考える
有効数字 この測定値を 「12.3123mmだ!」 と主張しても意味はない 「12.3」までが意味のある数字 = 有効数字 mm 5 10 15 「12.3」までが意味のある数字 = 有効数字 測定の精度を考慮した上で特にその桁の数字に書くだけの合理的根拠があること
有効数字の表記 「12」 と 「12.0」 は異なる 12 ⇒ 12±0.5 (11.5~12.5) 有効数字2桁 「12」 と 「12.0」 は異なる 12 ⇒ 12±0.5 (11.5~12.5) 12.0 ⇒ 12.0±0.05 (11.95~12.05) 120 と書いてあったら? 有効数字3桁 各々 1.2×101 1.20×101 1.20×102(または 1.2×102 )と表記する 科学表記
有効数字の計算 (乗除) 乗除の結果の有効数字は、元の有効桁数の小さな方と等しい 1.23×102 × 3.4×103 = 4.182×105 = 4.2×105 有効数字2桁
有効数字の計算 (加減) 加減算は、桁を揃えて計算してから、一番粗い(有効数字の末位が最高の)項に有効数字の末位を揃える 1.23×102 + 3.4×103 = 0.123×103 + 3.4×103 = 0.1×103 + 3.4×103 = 3.5×103
有効数字の計算 (加減) 有効数字の桁数が、増えたり減ったりすることがある 特に桁落ちに注意する 1.234×102 - 1.233×102 = 123.4 - 123.3 = 1×10-1 有効数字4桁同士の演算の結果が有効数字1桁に
有効数字の計算 (定数の扱い) 測定値でない数値(定数など)は、有効数字は無限桁数と考える 有効数字の計算 (定数の扱い) 測定値でない数値(定数など)は、有効数字は無限桁数と考える π、√2などは、有効数字より1桁以上大きい桁数を使用する 練習:球の半径が 2.674m(有効数字 4桁)と計測されたとき、表面積は 4×3.1416×2.674×2.674 = 89.85 (m2) 4πr2 =
有効数字の計算 (筆算) 筆算するときは、計算の途中では有効数字よりも1桁分だけ桁数の大きな数で計算する 全桁計算し最後に丸める⇒面倒&ミスのもと、センスが悪い 毎回丸める⇒有効数字が落ちるので 不可
有効数字の計算: 練習 {(2.234×5.67815)+100.9049}×4.60 次の計算をせよ 2.234 × 5.67815 = + 100.9049 = × 4.60 =
練習 解説 不可な例 面倒&ミスのもと、センスが悪い 精度が落ちる 2.234 × 5.67815 = 12.6849871 練習 解説 面倒&ミスのもと、センスが悪い 不可な例 2.234 × 5.67815 = 12.6849871 12.68498710 + 100.9049 = 113.5898871 113.5898871 × 4.60 = 522.51348066 = 523 2.234 × 5.67815 = 12.68 12.68 + 100.9049 = 113.58 113.58 × 4.60 = 522 精度が落ちる
練習 解説 本当は全桁数4桁の 12.68 だが、1桁増やす 2.234 × 5.67815 = 12.685 12.685 + 100.9049 = 113.590 113.590 × 4.60 = 523 本当は小数第2位までの 113.59 であるが,1桁増やす
測定精度 測定器により測定精度は異なる 最小目盛(分解能)が1mmのデジタル式定規では、1mm未満の長さは測れない
測定精度 前記の1mm刻みの定規で 1mm未満の長さを測るには、拡大して(または同じものを複数並べて)測り、測定値を倍率で割る プログラムの時間を計る場合も同じ 測定精度が不足する場合は、繰返し実行させて計測する 秒単位で 100秒以上計測すれば 有効数字は2桁
測定精度 100ヶ並べて 85mmならば 1ヶの幅は 8.5×10-1mm ・・・ 100ヶ並べて 85mmならば 1ヶの幅は 8.5×10-1mm 100回実行して 85秒ならば 1回の実行時間は 8.5×10-1秒
測定精度: 練習 1mm刻みの定規で、44ヶ並べて計測したところ、909mmであった。1ヶの長さは何mmか? ・・・ 44ヶ : 909mm 答: 909/44 = 20.65909090909090・・ = 2.07×101 (mm)
平均 測定数値を平均しても、有効数字の桁は増えない 誤差(ばらつき)をキャンセルすることはできる プログラムの実行時間のように測定値が分解能より小さい場合は、繰り返し実行させた時間を測定する
時間による性能評価 – バッチによる応答時間の計測 時間による性能評価 – バッチによる応答時間の計測 測定の原理 1. 開始時刻を測定 2. 対象プログラムを、十分な回数 実行する 3. 終了時刻を測定 4. (終了時刻ー開始時刻) を回数で 割れば、一回あたりの実行時間
時間による性能評価 – バッチによる応答時間の計測 時間による性能評価 – バッチによる応答時間の計測 TIMEコマンド (Windows) 現在時刻を分単位で表示する time関数 (C言語) 秒単位の時刻を求めるtime()とctime()を用いて、時刻を秒単位で表示する
TIMEコマンド コマンドプロンプト(CMD.EXE)にて使用 TIME/T /Tがないと 時刻の設定 /Tがあると 分単位の表示
time()関数 time_t time(time_t *t) システム時刻までの経過時間を t に設定する コンピュータプラクティス I time()関数 time_t time(time_t *t) システム時刻までの経過時間を t に設定する 経過時間 t は、万国標準時(UTC)の「1970年1月1日 0時0分0秒」からの経過時間を秒単位で表した数値 万国標準時(UTC)は、「UCT」ではない。 時間の測定
ctime()関数 char *ctime(const time_t *t) 経過時間 t を現地時間に合わせて日時の文字列に変換する
演習1 現在時刻を秒単位で表示するプログラム second.exe を作成せよ // second: 秒単位での日付・時刻を表示 コンピュータプラクティス I 演習1 現在時刻を秒単位で表示するプログラム second.exe を作成せよ // second: 秒単位での日付・時刻を表示 // 2009 May 水野嘉明 (テキストの付録Cを編集) #include <stdio.h> #include <time.h> int main( void ) { time_t t; // 現在時刻 time(&t); // 現在時刻を求める printf("%s\n", ctime(&t)); // 日時の文字列に変換し表示 return 0; } MinGW ? 時間の測定 26
バッチファイル 複数のコマンドを記述しておき、一括して実行する テキストで記述する エディタ(ノートパッド等)を使用する 拡張子は .BAT コマンドプロンプト(CMD)にて使用
バッチファイル @ECHO OFF REM FOO.BAT:時間測定 REM 2008/11 MIZUNO TIME /T 以後のコマンドを 表示しない @ECHO OFF REM FOO.BAT:時間測定 REM 2008/11 MIZUNO TIME /T A.EXE > NUL PAUSE コメント 時刻表示 測定したいコマンド >NUL は出力を捨てる 停止してキー入力待ち
バッチでの繰り返し 同じコマンドを100回繰り返すには、 FOR /L %%I IN (1,1,100) DO A.EXE 制御変数 開始値、刻み、終値 実行するコマンド 変数%Iを 1から100まで動かしながら、という意味 回数を増やすときは「100」を書き換える
バッチによる応答時間計測 計測しているのは、正確に言えば「応答時間 」 ロード時間 + 実行時間 さらに、計測用コマンド(TIME または second)の応答時間も含まれる これらについては、次回
演習2 second.exeを用いたバッチファイルにより、あるプログラムの応答時間を測定した。繰返し回数100回 で測定したところ、24秒 という結果になった。 真の応答時間は、どのような範囲にあると考えられるか この測定で得られる有効数字の桁数は、何桁か
演習2 解説 全体の(100回分の)時間は どちらも、0:00~0:24 の24秒間 つまり、全体時間は23秒超25秒未満 23秒強 0:0:00 0:01 0:02 0:23 0:24 0:25 23秒強 25秒弱 どちらも、0:00~0:24 の24秒間 つまり、全体時間は23秒超25秒未満
演習2 解説 したがって、応答時間の範囲は 有効数字は、1桁 0.23秒 ~ 0.25秒 2×10-1秒
実験1 プログラム全体の応答時間 プログラムL06Y01(付録A)について応答時間を TIME、second(time関数)のそれぞれの方法で測定せよ TIME、secondの各方法での有効数字桁数は、各々1桁、2桁 になるように繰返し回数を設定する 二つの方法の応答時間を比較し、考察せよ
実験1の注意事項 (1) TIMEとsecondでは、繰り返し回数は当然異なる 必要な有効数字桁数が出る回数 ⇒ 同じになってはおかしい 分単位 有効数字1桁 10分程度 second 秒単位 有効数字2桁 100秒程度 ※ 繰返し回数は、レポートに明記すること
実験1の注意事項 (2) プログラム L06Y01.EXE は、サーバではなく ローカルマシンに置くこと ネットワークの負荷によるばらつきが大きい
実験1の注意事項 (3) 実験レポートの章立ては、R1とは異なる 章立ては、固定されたものではない R2では、R1とは別の章立てを用いる (CP2以降で用いるもの)
新しい章立て
新しい章立て 章の構成 表紙 第4章 実験結果 目次 第5章 考察と結論 第1章 目的 第6章 課題 第2章 理論 参考文献、付録 第3章 実験方法
新しい章立て 「目的」 R1の「序論」に相当する 次のようなことを記述する 実験の目的・意図 (結論と対応する事を忘れない) 各実験の関係 レポートの全体像・構成
新しい章立て 「理論」 どのような理論あるいは原理に基づき実験を行ったかを書く 各実験について、 理論と観察に基づき仮説を立てる 何を対象に、どのような測定を行なうかを書く
新しい章立て 「実験方法」 実験で使った道具(ツール、ソフトウエアなど)を明示する 実験の手順、条件、環境を詳しく 第3者が、このレポートだけ を読んで、同じ実験が間違いなくできるように書く
新しい章立て 「実験結果」 各実験の結果を文章で書く 表やグラフを有効に利用する 観測した生の値を省略しないこと 四捨五入した値だけだと、妥当性が検証できないことがある
新しい章立て 考察と結論 考察は、今回の実験全体を通して得られたこと(知見)を論理的に導くこと 結論は、目的の章の内容と対応させ、実験により分かったことを書く (感想を書かないこと)
新しい章立て 課題 課題は通常、文献の調査と考察からなる 二つ以上の文献を調べ、参照・引用する 考察は、必ず自分の言葉で書く (自分の文章と引用は区別する、引用だけで終わらない)
実験を開始して下さい
次回の予定 「性能評価」 応答時間と実行時間、起動時間 実験レポート R2 応答時間の測定 起動時間の測定 コマンドプロンプト
お疲れさまでした