我正在对多个重复进行仿真,我试图查看是否有可能将这些重复并行化以缩短计算时间。
目前,我只是简单地在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类型数组中?
非常感谢。
答案 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
通过异步调用,您可以在任意多个线程上运行模拟,并在模拟运行完成时收集数据。