高エネルギー物理学実験におけるデータ収集

速度を測る

データ収集システムではデータの転送速度や入出力速度が問題になることが多い。 ここではソフトウェアにより速度を測ることを考える。一般に複数のプロセスが 走っているような環境では正確な速度はソフトウェアでは測りにくい。 ここで考察するのは正確さよりも設計などで用いる概数を得る方法の1つ、あるいは 実環境における実効速度と考えるべきであろう。

時間差を得る

time() 関数を使う

速度を測るには時間差を得ることが必要である。C の標準ライブラリに用意されて いる関数のみでやる場合は、time() と difftime() を使うことになるだろう。 clock() 関数は、プロセスが消費した時間を示すものであり、入出力の速度測定など には使えない(一般に入出力はシステムサービスを呼び出すだけで、実際の 入出力はシステムが行うので、プロセスが消費した時間には含まれない)。

time() 関数から得られる時刻は秒単位である。すなわち、time() 関数の差から 得られる値は少なくとも +-1秒の誤差をみなければならない。100秒間の測定では 少なくとも +-1% の誤差がある。

gettimeofday() を使う(Linux)

Linux で gcc を使う場合は、gettimeofday() 関数が使える。これを使うと マイクロ秒単位で時刻が得られる(実際の精度は機種に依存する)。

GetTickCount?() を使う(Windows)

Windows (WIN32) の場合は、GetTickCount?() 関数が使える。これは起動からの 経過時間をミリ秒単位で返す(実際の精度は10ミリ秒程度)。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-01-24 (木) 16:16:36