- PR -

javaによるIntel Hyper-Threading対策

1
投稿者投稿内容
ken90H
会議室デビュー日: 2003/04/11
投稿数: 5
お住まい・勤務地: 芦屋市
投稿日時: 2003-11-20 15:20
みなさま、お疲れ様です。
プロセッサ数に関する質問ですが
Windows 2k/xp Intel Hyper-Threadingの環境で、java.lang.Runtime
.availableProcessors()を実行すると"2"という結果が返ってきます。
またWindowsの環境変数「NUMBER_OF_PROCESSOR」も"2"になります。
物理CPU数は1なので、1を返すようなは方法はあるのでしょうか?
やはり、JNI経由ではないと現地点は手段がないのでしょうか?
さきほどから、色々調べているのですが、手がかりになるようなアーティクルが見つからなかったので、投稿させていただきました。
ご存知の方はどうか、ご教授ください。
よろしくお願いします。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-20 16:37
引用:

プロセッサ数に関する質問ですが
Windows 2k/xp Intel Hyper-Threadingの環境で、java.lang.Runtime
.availableProcessors()を実行すると"2"という結果が返ってきます。
またWindowsの環境変数「NUMBER_OF_PROCESSOR」も"2"になります。
物理CPU数は1なので、1を返すようなは方法はあるのでしょうか?
やはり、JNI経由ではないと現地点は手段がないのでしょうか?


Hyper-Threadingはハードウェアレベルでマルチプロセッサのふりをしているので、ソフトウェアから見分ける方法は無いと思うのですが。JNIでWindowsのネイティブAPIを叩いたら出来るのですか??
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2003-11-20 17:04
Java での方法があるのなら私も知りたいです。

WindowsAPI では
GenuineIntel Family 15 Model 2 3.0GHz Stepping 9
などの情報が得られるようです(Norton System Information より)ので、
上記情報と HT 対応 CPU かどうかのテーブルを用意すればいいかもしれませんね。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-22 21:43
なぜJavaプログラムからHyper-Threadingを意識する必要があるのでしょうか。
その理由について、差し支えなければ教えて頂けませんか?
いたち
常連さん
会議室デビュー日: 2003/04/25
投稿数: 27
投稿日時: 2003-11-23 14:11
CPUライセンスのソフトウェア開発では気になるところかも知れませんね。
物理的に1CPUなのに、Hyper-Threadingで2CPUだと勘違いして、「ライセンスがありません」とか言われたり・・・。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-24 00:50
引用:

CPUライセンスのソフトウェア開発では気になるところかも知れませんね。


なるほど、そういう理由はありますね。
ただ、Hyper-Threadingという非常に低レベルな話をJavaプログラム内でケアしなければならないのは、何か焦点がずれている気がします。もっと理想的な解決法は無いのでしょうか。
そもそも、Hyper-ThreadingのCPUを1CPUとしてカウントするのか、それとも2CPUとしてカウントするのか。業界の趨勢はどちらなのでしょうか。何もJavaに限らない気もします。
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2003-11-24 10:00
引用:

おばけさんの書き込み (2003-11-24 00:50) より:
ただ、Hyper-Threadingという非常に低レベルな話をJavaプログラム内でケアしなければならないのは、何か焦点がずれている気がします。もっと理想的な解決法は無いのでしょうか。



賛成です。

現実的には

・JavaアプリケーションでCPU単位のライセンスを採用するのは不適当なので別の方法への変更を検討する。
・JNIを使用する。ただしOS毎にバイナリを書き下ろす。

になるでしょうか。
ただ、後者を取るにしても今度は「2ライセンス分を要求できるような品質のアプリケーションを提供できるのか」を検討し直さなければならないような気がします。
単純に倍の料金を払うのに性能が変わらない、ではユーザはいい気分はしませんよね。

[追加]
ここで議論したいのは、
「どこかで見かけた」とか「以前(全く別の製品で)この方法を使ったことがある」からといって安易に、そのライセンスが適用しづらい製品にまで適用するのはいかがなものか、ということです。

ちょっとずれた例かもしれませんが、

・「USBケーブルで携帯電話とPCを接続して電話帳データなどをやりとりするアプリケーション」でUSBドングルを採用したら...。
・モバイル用途の地図+GPSセットでオンラインアクティベーションを採用したら...。

それぞれのアプリケーションに相応しいライセンス形態を採用するべきだと思います。
今回の話も、私は「JavaでCPU数がいくつかなんて気にするのはナンセンス」だと思います。

[ メッセージ編集済み 編集者: びしばし 編集日時 2003-11-24 10:11 ]
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-25 01:27
本来は、やるとしたらJVMで実装すべき問題かも知れませんね。論理CPU(?)の数を返すメソッドと、物理CPUの数を返すメソッドの両方を用意するとか。

ただ、そもそもJavaでプロセッサ数を意識する必要があるのか、というのは私も思います。
1

スキルアップ/キャリアアップ(JOB@IT)