2012-01-16 4 views
30

既存のJavaプログラムをベンチマークしています。これらは、マルチコアCPUの恩恵を受けるために設計されたスレッド化されたアプリケーションです。実行速度に対するコア数の影響を測定したいと考えていますが、これらのアプリケーションのコードを変更することはできません。既存のJavaアプリケーションでxコアを使用することはできますか?

もちろん、別のマシンでソフトウェアをテストすることもできますが、これは高価で複雑です。私たちはむしろソフトウェアソリューションを持っています。

注:テストプラットフォームはWindows、Linux、Macのいずれかであると仮定できます。理想的には、これらのプラットフォームのいずれかでテストを実行したいと考えています。

+0

私はそれがJavaプログラムで制御されているとは思わない、私はそれが純粋なOS固有の決定だと思います。私はこの質問に専門家がコメントしてくれるのが好奇心です。 – kosa

+0

カスタムソフトウェアソリューション/カスタマイズが必要な場合は、おそらくハードウェア自体よりもはるかに高価になります。とにかく、Javaプログラムにいつでも1つのコアだけを使用させることができるかどうかはわかりません。 OS/JVM関連のもの – fmucar

+0

VirtualBoxのような仮想マシン内での実行を検討してください。次に、インスタンスに使用可能なCPUパワーを決定する簡単なGUIがあります。 –

答えて

32

これは、CPUアフィニティの設定と呼ばれ、Java固有のものではなく、プロセスのOS設定です。

Linuxの

http://www.cyberciti.biz/tips/setting-processor-affinity-certain-task-or-process.html Windowsでは

http://www.addictivetips.com/windows-tips/how-to-set-processor-affinity-to-an-application-in-windows/

Macの場合、あなたがそれを設定することができますように、それは見ていません:https://superuser.com/questions/149312/how-to-set-processor-affinity-on-os-x

+0

また、テストに役立つJavaライブラリのhttps://github.com/peter-lawrey/Java-Thread-Affinityをチェックしてください。 – philwb

+0

さらに、(これは実装に依存するかもしれませんが) 'Runtime.getRuntime()。availableProcessors()'を呼び出す前にCPUアフィニティ*を設定すると、このメソッドは変更を反映してコア数を返します* JVMの[* javadoc](http://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#availableProcessors--)に準拠して*利用可能です。 – Bass

-5

逆さま問題を回し、 nコアを mコアマシンでのみ使用するようにアプリケーションを制限する方法を理解する代わりに、ご使用のアプリケーションで利用可能なコア数が nであることを確認してください。あなたはwhile (true);ような何かをすることによって一つのコアを食べる非常に簡単なプログラムを書いて、メートル開始することができます - ので、あなたのコードはのみ利用可能 n個のコアを持っていることを確認して、最高の優先順位で実行し、そのプログラムの Nインスタンスを。

また、BIOSまたはOSでCPUコアを無効にすることができれば、それも問題ありません。私はMac OS XのCHUDツールを使っていましたが、G5時代からこれらのツールに触れていないので、これ以上動作しない可能性があります。

関連する問題