在四个CPU内核/八个CPU线程上执行单个程序

时间:2014-07-18 23:49:03

标签: parallel-processing performance java

我想在quadricore i7 CPU上执行(Java 7)以下算法,以便后者100%专门执行它。

long n = 1000000;
int a = 5;
long sum = 0;

for (long i = 1; i <= n; i ++) {
    for (long j = 1; j <= i; j ++) {
        for (long k = 1; k <= j; k *= a) {
            sum ++;
        }
    }
}
System.out.println("Sum = " + sum);

我已经利用了手动解决方案( java.util.concurrent.Executors java.util.concurrent.FutureTask ...),我将创建四个的任务

  • 第一个将在1到n / 4的范围内执行;
  • 第二个将在范围(n / 4 + 1)到n / 2;
  • 内执行
  • 第三个将在范围(n / 2 + 1)到3n / 4;
  • 内执行
  • 第四个将在范围(3n / 4 + 1)到n。
  • 内执行

我想知道在执行此程序时是否有一个简单/自动的解决方案来命令操作系统(我正在使用Windows)专用“所有”可用的CPU资源?

2 个答案:

答案 0 :(得分:2)

我不知道这是在Java还是Windows下可用。在UNIX类型操作系统下的C / C ++中,您可以(使用适当的权限)将应用程序重新设置为负优先级。负优先级通常被称为“实时优先级”,因为操作系统不会调整它们,并且它们将优先于(几乎)系统上的其他所有内容。

我认为您在Java中可以做的最好的事情是使用Runtime.getRuntime()。availableProcessors()方法来确定您拥有多少处理器,并至少分配那么多线程。

答案 1 :(得分:0)

AFAIK OS中没有直接/自动的命令解决方案(通用操作系统窗口,linux)。但是在RTOS(实时操作系统)中你可以划分你的任务并专注于所有&#34;执行程序时可用的CPU资源。