3

プログラムで作業しているコアを変更するようにスレッドに指示する方法は何ですか?

いくつかのコアを持つFX-8150を使用しているが、スレッドの1つを特に5.coreで動作させたいとしましょう。これは可能ですか?はいの場合、Javaのサンプルを教えてください。スレッドは、別のプロセスのスレッドまたは現在のプロセスのスレッドである可能性があります。

私の疑似例:

time interval 1 : my_thread working in first core at 5GHz while other cores are 3.6 GHz
time interval 2 : my_thread working in second core at 5GHz while other cores are 3.6 GHz
time interval 3 : my_thread working in third core at 5GHz while other cores are 3.6 GHz
time interval 4 : my_thread working in fourth core at 5GHz while other cores are 3.6 GHz
time interval 5 : my_thread working in fifth core at 5GHz while other cores are 3.6 GHz
time interval 6 : my_thread working in sixth core at 5GHz while other cores are 3.6 GHz
time interval 7 : my_thread working in seventh core at 5GHz while other cores are 3.6 GHz
time interval 8 : my_thread working in eighth core at 5GHz while other cores are 3.6 GHz

他のすべてのコアはアイドル状態である必要があります。

4

2 に答える 2

3

実行中のスレッドを論理スレッドまたはコアに割り当てることができるJavaThreadAffinityというライブラリがあります。

あなたの場合、OSに最低1つのコアを許可する必要があり、Linuxで残りのすべてのコアを予約できます。スレッドライブラリは、これらの予約済みコアにスレッドを割り当てます。予約済みのCPUが必要な理由は、そのCPUで他のスレッドが実行されないようにするためです。スレッドを論理CPUまたはコア全体に割り当てるようにライブラリに指示できます。別のスレッドと同じまたは異なるコアまたはソケットにスレッドを割り当てることができます。

https://github.com/peter-lawrey/Java-Thread-Affinity/wiki/Getting-started

ライブラリは現在、WindowsとLinuxをサポートしています。

于 2012-09-28T14:04:15.067 に答える
1

Windows 7を使用していると仮定します。タスクマネージャーでプロセスを見つけて右クリックし、[アフィニティの設定]を選択して、使用するコアを選択します。

http://www.sevenforums.com/tutorials/83632-processor-affinity-set-applications.html

プログラム的に:

プログラムと同じフォルダに次の内容の.batバッチファイルを作成することにより、プログラムのアフィニティを永続的に設定できます。

start /affinity 1 program_name.exe

start /affinity 1 <invoke your_java_program>

これにより、プログラムはcpuコア0のみを使用するようになります。use.../アフィニティ2...を使用して、cpuコア1などを指定します。

次に、プログラムのスタートメニューやデスクトップショートカットを変更して、新しく作成したバッチファイルを指すようにする必要があります。

小さな欠点は、プログラムが開く前に、画面に小さなcmdウィンドウが短時間点滅することです。

パフォーマンスを向上させるために、/ highを追加して、アプリケーションに高いCPU優先度を与えることができます。

start /affinity 1 /high program_name.exe
start /affinity 1 <invoke your_java_program>
于 2012-09-28T14:05:36.457 に答える