- - PR -
CPU数(物理プロセッサ数)の取得
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-10-09 14:08
はじめまして、ken90Hと申します。
現在、ソフトウェアのプロテクト機能を作成していますが、作業上、CPU数(物理プロセッサ数)を取得しなければならなくなりました。Javaの標準APIではCPUのアーキテクチャーは取得できると思いますが、数まで取得できなかったと思います。それで、他の方法について教えていただけないでしょうか? どうぞ、よろしくお願いしますm(_ _)m --補足-- 環境:Windows, UNIX, Linux(全プラットフォームで動くプログラム) JDK:JDK 1.3, 1.4 [ メッセージ編集済み 編集者: ken90H 編集日時 2003-10-09 14:12 ] | ||||||||
|
投稿日時: 2003-10-09 14:47
「他の方法」とは、nativeで書く方法でしょうか?
挙げている OS では x86,Sparc,PPC,Alpha などといろんな CPU が使われる可能性がありますので、汎用的な方法はないかと思われます。 まずはプラットフォーム、CPUを絞って調べる必要がありそうですね。 すくなくとも Javaではできなさそうです。 | ||||||||
|
投稿日時: 2003-10-09 14:51
顔爺と申します。
java.lang.Runtime.availableProcessors() は使えませんか? -- 追記 -- 確認したらこのメソッドは 1.4 で追加されたものなので、 1.3 系では駄目ですね。 [ メッセージ編集済み 編集者: 顔爺 編集日時 2003-10-09 15:27 ] | ||||||||
|
投稿日時: 2003-10-09 14:53
Javaのコマンドを実行するときに、-Dオプションを使ってあげると、System.getPropertyで取得できます。簡単だけど力技っぽいですが・・・
たとえば、こんなクラスを作って、 public class HogeHoge{ public static void main(String[] args){ String cpunum = System.getProperty("cpu.num"); System.out.println("CPU NUMBER : " + cpunum); } } 実行するときに、 java -Dcpu.num=2 HogeHoge とすると、 CPU NUMBER : 2 と表示されます。こんなんでいかがでしょうか? | ||||||||
|
投稿日時: 2003-10-09 15:38
>java.lang.Runtime.availableProcessors() は使えませんか?
おぉ、1.4ではこんなメソッドがあったんですね。勉強になりました。ありがとうございます。 手元の Sparc が2つあるマシンでちゃんと2が返りました。 「物理」プロセッサ数とは規程されてないので、Hyper-Threading が有効な状態では何がかえるでしょうか。 tonoさん: ソフトウェアのプロテクト機能として、CPU数に制限を加えるのにユーザに手動で数を指定させるのはちょっとナンセンスではないかと思われますが・・・。 | ||||||||
|
投稿日時: 2003-10-09 16:00
unibon です。こんにちわ。
上記でも述べられていますが、1.4 から備わった API なんですね。 ダメモトで 1.3 で使ってみるとやはり NoSuchMethodError になりました。
Windows XP で試してみたら 2 が返りました。 他のやりかたとしては、CPU の数に依存するようなプログラムをわざと動かして判定するとか (できるのだろうか?)。 なお、余談ですが、ライセンスを管理されるユーザの立場からの要望を言えば、 ハイパースレッディングは 2 CPU とみなさず 1 CPU とみなしてほしいのが心情です。 #別に2つ分速いわけではないので。 | ||||||||
|
投稿日時: 2003-10-09 17:05
早々の返信ありがとうございました。
様々な良い意見、大変やくにたちました。 結果的に、java.lang.Runtime.exec()より 各OSに見合ったコマンドをキックすることで取得することになりました。 Windows: in the command prompt type: cmd.exe /c echo %NUMBER_OF_PROCESSORS% Solaris: in the command prompt type: /usr/bin/uname -X AIX: in the command prompt type: /usr/sbin/lsdev -Cc processor HPUX: in the command prompt type: /bin/sh -c /usr/bin/sar -M 1 1 | awk 'END {print NR-5}' Linux: in the command prompt type: cat /proc/cpuinfo ありがとうございましたm(_ _)m |
1