如何并行处理for循环,并将每次重复的结果保存在矩阵中?

时间:2019-02-25 14:44:48

标签: java optimization parallel-processing

我正在对多个重复进行仿真,我试图查看是否有可能将这些重复并行化以缩短计算时间。

目前,我只是简单地在for循环中运行了几次模拟,但是理想情况下,这些模拟都可以同时运行,然后将每次重复的结果保存到数组中进行处理。

目前,我的代码类似于

public static void getAllTheData(){

   int nReps = 10;
   double[][] allResults = new double[nReps][]

   //this for loop is what I want to parallellise 
   for(int r = 0; r < nReps; r++){

       //run the simulation to completion here
       simulation.doStuffToCompletion()

       allResults[r] = simulation.getValues()

   }
//average allResults here and do further analysis
}

我的问题是,我如何同时并行运行所有这些重复,并将每次并行运行的结果保存在allResults类型数组中?

非常感谢。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用诸如并行流之类的方法来进行并行化,如以下几行之一。

Stream.of(allResults).parallel().forEach(i -> processData(i));

Arrays.stream(allResults).parallel().forEach(i -> processData(i));

答案 1 :(得分:1)

Java默认是一种同步语言,要并行工作,您需要研究线程。我建议研究异步函数调用以及在Java中实现它的方法。

以下是有关此问题的先前问题:How to asynchronously call a method in Java

通过异步调用,您可以在任意多个线程上运行模拟,并在模拟运行完成时收集数据。