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

我正在运行多次重复的模拟,我试图看看是否可以并行化这些重复以缩短计算时间。


目前我只是在 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 类型的数组中?


繁星点点滴滴
浏览 143回答 2
2回答

慕的地6264312

您可以尝试类似并行流的方法来执行并行性,如下行之一。Stream.of(allResults).parallel().forEach(i -> processData(i));Arrays.stream(allResults).parallel().forEach(i -> processData(i));

眼眸繁星

默认情况下,Java 是一种同步语言,要并行工作,您需要查看线程。我建议研究异步函数调用以及在 Java 中执行此操作的方法。这是之前就此事提出的一个问题:How to asynchronously call a method in Java通过异步调用,您可以在任意数量的线程上运行模拟,并在模拟运行完成时收集数据。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java