linuxやmac、windowsなんでもいいのですが、「CPU使用量」を取得するツールはありますか?
CPU使用率はよくありますが、これは割合であって絶対的な量ではないですよね。
別のマシン、CPU、別の周波数のCPUでも比較可能な絶対的なCPUの仕事量を表す値を取得することはできないでしょうか。
スーパーπで100万桁を計算する計算量を100とする。という具合の値を取得したいです。
よろしくお願いします。
>絶対的なCPUの仕事量
というものが測定しがたいために、ありません。
CPUには得意/不得意があります。
極端な例として、足し算が得意だがかけ算はちょっと遅いということもあります。
もしくはその逆。
また、処理量はメモリやバスの速度等、環境に大きく依存するために
CPU本体だけでは決まりません。
>絶対的なCPUの仕事量
というものが測定しがたいために、ありません。
CPUには得意/不得意があります。
極端な例として、足し算が得意だがかけ算はちょっと遅いということもあります。
もしくはその逆。
また、処理量はメモリやバスの速度等、環境に大きく依存するために
CPU本体だけでは決まりません。
ありがとうございます。
そうですよね。すべて正確にはわからないものの、なんとか目安になる値はないものでしょうか。
FLOPS - Wikipedia、MIPS - Wikipediaとかいうのが有ったりはします。
ただ単純に考えると、こういうのってあらかじめCPU使用率100%でどれだけの値が出るかと計算しておくとか、CPU側からこの値をもらえれればいいけど
そうじゃなかったら今の使用量ってだせないような気がします。
それにアセンブラをやれば分かるけど、CPUの違いとかメモリ量とか値を求めるFLOPSの値を求めるソフトによって計算量が変わったりするしどうしようもないかと。
業界側で取り決めをしてCPU側から使用率を取得できるようにするとかしないと無理じゃないかな。
ありがとうございます。
仮に、「bogomips×プロセスの使用率×プロセスの実行時間」を
CPU使用量としたら何か参考になりうる値になりますかね。
>CPU使用率はよくありますが、これは割合であって絶対的な量ではないですよね。
プログラムがCPUを占有していた時間です。
これにはメモリーやキャッシュからのデータ転送時間も含みます。
ゆえにその時間にCPUがどれだけの時間有効に演算が行われたのかさえもわかりません。
また、仮にデータ転送がなかったとしても、同時に何命令かを並列で走らせたりするので、単純に時間だけでは処理した演算は測れません。
そもそも、最近のCPUは実行結果を先読みして意味があるか分からない命令を実行したりするので、有効な演算って何なのかさえあやふやです。
>bogomips×プロセスの使用率×プロセスの実行時間
bogomipsはかなり小さなプログラムのようなので、おそらくはデータ転送など発生しないですが、実際のプログラムの動作では、上記のデータ転送待ちが発生します。
最近のCPUではCPUとキャッシュ、メモリの速度差が激しいので、結局、実行時間は走らせるプログラム依存になります。
1さんのおっしゃるようにCPUとしてではなくシステムとしての性能しか測れないと思います。
そのうえで、やはり様々なプログラムを走らせ実行時間を計測して、プログラムの特徴ごとに場合分けするしかないと思います。
リンクはベンチマークプログラム集を出している会社のHPです。
http://www.spec.org/
「CPU使用量」を「CPUが実行した命令数」と考えれば、取得は可能です。
最近のCPUは、CPU内部にパフォーマンスカウンタと呼ばれるカウンタを持っていて、
「CPUが実行した命令数」を数えることができます。
intel のCPUだと、INSTR_RETIRED という名前のカウンタになります。
このINSTR_RETIREDの値を取得するツールとしては、
があります。
なお、vtuneは intel cpu 上で動作している window、 linux に対応しています。
一方、oprofile は intel だけでなく amd のCPU等にも対応していますが、linux 上でしか動作しません。
ありがとうございます。
そうですよね。すべて正確にはわからないものの、なんとか目安になる値はないものでしょうか。