gpt4 book ai didi

java - 这需要多长时间才能运行,我怎样才能加快速度

转载 作者:行者123 更新时间:2023-11-30 07:22:29 25 4
gpt4 key购买 nike

我正在运行一些代码来测试布朗运动和散度,我很好奇这段代码需要多长时间才能运行,以及有什么方法可以加快这个过程。我对 java 比较陌生,所以目前的代码比较基础。我运行的参数是 1000000 1000000。

public class BrownianMotion {

public static void main(String[] args) {

/**starts vars for program*/

int N = Integer.parseInt(args[0]);
int T = Integer.parseInt(args[1]);
double sqtotal = 0;
double r;
double avg;

/**number of trials loop*/

for (int count=0;count<T;count++) {

/**started here so that x & y reset at each trial*/

int x = 0;
int y = 0;

/**loop for steps*/
for (int steps=0;steps<N;steps++) {

r = Math.random();
if (r < 0.25) x--;
else if (r < 0.50) x++;
else if (r < 0.75) y--;
else if (r < 1.00) y++;

}
/**squared total distance after each trial*/
sqtotal = sqtotal + (x*x+y*y);

}

/**average of squared total*/

avg = sqtotal/T;
System.out.println(avg);

}
}

在此先感谢您的帮助。

最佳答案

据我了解您的代码,您可以并行运行每个试验。如果您的 CPU 有多个内核,它会相应地运行得更快。

(编辑添加)

通常,我会将算法转换为 Callable,创建 tens(每个维度、每个状态等一个),然后使用 Executors.newFixedThreadPool () 创建一个合理大小的线程池(比如,对于我的 Intel i3 笔记本电脑,4 个线程)并调用 invokeAll()。 More details in this blog post

但是,在您的 100,000 示例中,这并不是很好。 理想的 方法是使用 CompletionService 在作业完成时重新提交它们。这开始变得复杂了。

一个更简单但效率不高(但仍然更快)的方法可能是

  1. 创建一个包含 10 个 BrownianWalkers 的集合。请注意,如果他们在开始时设置 x 和 y = 0 它们可以被重用。所以你只需要创建一次这个列表
  2. 创建固定线程池
  3. 在 i=0...10000 的循环中 {
  4. 调用 submitAll()。
  5. 遍历结果( future )并将它们添加到您的总和中。

你会浪费一点时间等待所有的完成,但仍然应该有一个显着的加速。由于大多数处理器的内核都是 2、4、8 等...,稍微改进一下就是使集合成为 2 的幂(而不是 10,这使数学变得容易)

关于java - 这需要多长时间才能运行,我怎样才能加快速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com