2016-06-16 2 views
0

私はコマンドラインからCPU周波数を検出し、C/C++ライブラリのベンチマークスーツを呼び出すBashスクリプトを持っています。それはちょうどスクリプトはCygwinとCygwinの-64の下で失敗している私に起こったコマンドラインからCPU周波数を確認する

# CPU frequency in GHz 
CPU_FREQ=2.0 
if [ "$IS_LINUX" -ne "0" ] && [ -e "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" ]; then 
    CPU_FREQ=$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq) 
    CPU_FREQ=$(awk "BEGIN {print $CPU_FREQ/1024/1024}") 
elif [ "$IS_DARWIN" -ne "0" ]; then 
    CPU_FREQ=$(sysctl -a 2>/dev/null | $GREP 'hw.cpufrequency' | head -1 | awk '{print $3}') 
    CPU_FREQ=$(awk "BEGIN {print $CPU_FREQ/1024/1024/1024}") 
elif [ "$IS_SOLARIS" -ne "0" ]; then 
    CPU_FREQ=$(psrinfo -v 2>/dev/null | $GREP 'MHz' | head -1 | nawk '{print $6}') 
    CPU_FREQ=$(nawk "BEGIN {print $CPU_FREQ/1024}") 
fi 

:ここでは、スクリプトの本質です。

CygwinとCygwin-64でスクリプトのCPU頻度を調べるにはどうすればよいですか?

+0

Stack OverflowではなくSuper Userに属していると感じたら、ぜひお話ください。いずれにしてもいいと思うけど、それにフラグを立てて喜んで動かすように頼んだ。 – jww

+0

少なくともあなたは良いコードを持っています。私の気持ちはここでそれを維持することです。 'cygwin'はそのレベルの情報を生成するためにWindowsユーティリティに依存するかもしれませんが、Linuxのようなパッケージを入手するのはかなり簡単だと思いますので、あなたは運が良いかもしれません(しかし、私は長い間cgywinを使っていません。ほとんど知られていない意見;-))。がんばろう! – shellter

+0

Open Devプロジェクトについて私が気に入っているのは、nabble.comです。多分あなたは、あなたの話題は、http://cygwin.1069669.n5.nabble.com/を検索することによって議論されていることが分かります。がんばろう! – shellter

答えて

1

これは動作するはずです:

grep 'cpu MHz' /proc/cpuinfo | head -1 | awk -F: '{print $2/1024}'

(私はcygwinのターミナルでこれを実行すると、私は1.85156を取得します)。

+0

Cygwinには実際には '/ proc/cpuinfo'があります。 –

+0

私は何が間違っているかを見ています...もっと正確であるように見えるので、私は '/ sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq'に周波数変換しました。 CygwinとLinuxのカーネル2.6、3.1(そしてそれ以上)に 'cpufreq'サブツリーがありません。私のプログラムがデフォルト値を報告したとき、私は誤って '/ proc/cpuinfo'が見つからなかったためだと仮定しました。 – jww

+0

私は 'cpu MHz'の行は実際に現在の周波数(規模のチップ上)だと思うので、それは変わる可能性があります。 max cpu frequencyについては "モデル名"の行をgrepする必要があるかもしれませんが、そのクロスプラットフォームを解析することが必要な場合があります。 –

0

dmidecode -t 4を使用して基本的なCPU情報を表示することができます。これはOSの間接経由ではなくBIOS/EFIを直接照会するので正確です。現在の周波数(C-StatesまたはP-StatesをサポートするCPUの場合)は取得されませんが、i7zのようなアプリケーションがそのシナリオに適している可能性があります。

+0

Thanks @dragon。特権を持たないスクリプトで、それは*/dev/mem:Permission denied' *になります。 – jww