- - PR -
javaによるIntel Hyper-Threading対策
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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経由ではないと現地点は手段がないのでしょうか? さきほどから、色々調べているのですが、手がかりになるようなアーティクルが見つからなかったので、投稿させていただきました。 ご存知の方はどうか、ご教授ください。 よろしくお願いします。 | ||||
|
投稿日時: 2003-11-20 16:37
Hyper-Threadingはハードウェアレベルでマルチプロセッサのふりをしているので、ソフトウェアから見分ける方法は無いと思うのですが。JNIでWindowsのネイティブAPIを叩いたら出来るのですか?? | ||||
|
投稿日時: 2003-11-20 17:04
Java での方法があるのなら私も知りたいです。
WindowsAPI では GenuineIntel Family 15 Model 2 3.0GHz Stepping 9 などの情報が得られるようです(Norton System Information より)ので、 上記情報と HT 対応 CPU かどうかのテーブルを用意すればいいかもしれませんね。 | ||||
|
投稿日時: 2003-11-22 21:43
なぜJavaプログラムからHyper-Threadingを意識する必要があるのでしょうか。
その理由について、差し支えなければ教えて頂けませんか? | ||||
|
投稿日時: 2003-11-23 14:11
CPUライセンスのソフトウェア開発では気になるところかも知れませんね。
物理的に1CPUなのに、Hyper-Threadingで2CPUだと勘違いして、「ライセンスがありません」とか言われたり・・・。 | ||||
|
投稿日時: 2003-11-24 00:50
なるほど、そういう理由はありますね。 ただ、Hyper-Threadingという非常に低レベルな話をJavaプログラム内でケアしなければならないのは、何か焦点がずれている気がします。もっと理想的な解決法は無いのでしょうか。 そもそも、Hyper-ThreadingのCPUを1CPUとしてカウントするのか、それとも2CPUとしてカウントするのか。業界の趨勢はどちらなのでしょうか。何もJavaに限らない気もします。 | ||||
|
投稿日時: 2003-11-24 10:00
賛成です。 現実的には ・JavaアプリケーションでCPU単位のライセンスを採用するのは不適当なので別の方法への変更を検討する。 ・JNIを使用する。ただしOS毎にバイナリを書き下ろす。 になるでしょうか。 ただ、後者を取るにしても今度は「2ライセンス分を要求できるような品質のアプリケーションを提供できるのか」を検討し直さなければならないような気がします。 単純に倍の料金を払うのに性能が変わらない、ではユーザはいい気分はしませんよね。 [追加] ここで議論したいのは、 「どこかで見かけた」とか「以前(全く別の製品で)この方法を使ったことがある」からといって安易に、そのライセンスが適用しづらい製品にまで適用するのはいかがなものか、ということです。 ちょっとずれた例かもしれませんが、 ・「USBケーブルで携帯電話とPCを接続して電話帳データなどをやりとりするアプリケーション」でUSBドングルを採用したら...。 ・モバイル用途の地図+GPSセットでオンラインアクティベーションを採用したら...。 それぞれのアプリケーションに相応しいライセンス形態を採用するべきだと思います。 今回の話も、私は「JavaでCPU数がいくつかなんて気にするのはナンセンス」だと思います。 [ メッセージ編集済み 編集者: びしばし 編集日時 2003-11-24 10:11 ] | ||||
|
投稿日時: 2003-11-25 01:27
本来は、やるとしたらJVMで実装すべき問題かも知れませんね。論理CPU(?)の数を返すメソッドと、物理CPUの数を返すメソッドの両方を用意するとか。
ただ、そもそもJavaでプロセッサ数を意識する必要があるのか、というのは私も思います。 | ||||
1
