CPUのクロックの速度が、何MHzか読んで来るには? – プログラミング – Home

CPUのクロックの速度が、何MHzか読...
 
通知
すべてクリア

CPUのクロックの速度が、何MHzか読んで来るには?


ちな
 ちな
(@ちな)
ゲスト
結合: 18年前
投稿: 2
Topic starter  

VC++6での使用です。


引用解決済
トピックタグ
くえー
 くえー
(@くえー)
ゲスト
結合: 18年前
投稿: 4
 

レジストリの
HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor
に~MHzというのがあります。
それを読めばいいと思います。

http://www.kt.rim.or.jp/~yuta/prog/win32/Name/sys_ver.html


返信引用
ちな
 ちな
(@ちな)
ゲスト
結合: 18年前
投稿: 2
Topic starter  

くえーさん
ありがとうございます。
でも、このレジストリの値の取得って、
fopenして、fgetcとかで出来るんでしょうか?
それとも、ご指摘のサイトに書いてあるような
GetVersionEx
で行うとか?
ちょっと、値を読むシーケンスがわからなかったので、
お聞きしました。


返信引用
task
 task
(@task)
ゲスト
結合: 18年前
投稿: 3
 

計測するなら、こんな方法もありますよ。

int cpu_clk(){
__int64 c1 = 0, c2 = 0;
DWORD flag, mask = 0x10;
DWORD wait = 100;
DWORD time;

__asm{
mov eax, 01H;
cpuid;
mov flag, edx;
}

if(flag & mask){   // rdtsc 命令のサポートチェック
time = GetTickCount() + wait();
__asm{
rdtsc;  // 電源投入時からのクロックのカウント数
mov dword ptr[c1], eax;
mov dword ptr[c1+4], edx;
}

while(time > GetTickCount()); // 0.1秒待つ

__asm{
rdtsc;
mov dword ptr[c2], eax;
mov dword ptr[c2+4], edx;
}
}
return int((c2 - c1) / wait / 1000); // [MHz]にするため1000で割る
}

[GHz]位なら、0.1秒位で十分だと思いますが、もう少し低いクロックを計るなら、waitを大き
くしたほうが良いと思います。

while(time > GetTickCount()); の部分を Sleep にしても出来ますが、ノートパソコンの場
合、負荷をかけないとうまく測定できないみたいです。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

> でも、このレジストリの値の取得って、
> fopenして、fgetcとかで出来るんでしょうか?

ファイルとしてアクセスするわけではないので、Cの標準関数では無理です。

> ちょっと、値を読むシーケンスがわからなかったので、
> お聞きしました。

Win32SDKなのか、MFCなのかで微妙に変わると思われますが…
RegOpenKeyEx()/RegQueryValueEx()/RegCloseKey()等でしょうか。
ググるとそれなりにみつかると思います。


返信引用
task
 task
(@task)
ゲスト
結合: 18年前
投稿: 3
 

訂正です。
__int64 c1, c2 → unsigned __int64 c1, c2


返信引用
task
 task
(@task)
ゲスト
結合: 18年前
投稿: 3
 

ごめんなさいもう一個訂正
GetTickCount() + wait(); → GetTickCount() + wait;


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました