3

告诉线程以编程方式更改它正在处理的核心的方法是什么?

假设我正在使用具有一些内核的 FX-8150,但我希望我的一个线程能够在特别是 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

我有一个名为Java Thread Affinity的库,它允许您将正在运行的线程分配给逻辑线程或核心。

在您的情况下,您至少需要为操作系统允许一个内核,并且您可以在 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 core 0。使用 ... /affinity 2 ... 指定 cpu core 1 等

然后,您应该修改程序的开始菜单和/或桌面快捷方式以指向您新创建的批处理文件。

一个小缺点是,在程序打开之前,您会看到一个小的 cmd 窗口在屏幕上短暂闪烁。

为了获得额外的性能,您可以添加 /high 以赋予应用程序更高的 cpu 优先级。

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