Как распараллелить цикл for и сохранить результаты каждого повторения в матрице? - PullRequest
0 голосов
/ 25 февраля 2019

Я запускаю симуляцию для нескольких повторений и пытаюсь выяснить, возможно ли распараллелить эти повторения, чтобы улучшить время вычислений.

В настоящее время я просто запускаю симуляцию несколько раз в течениецикл, но в идеале все они могут выполняться одновременно, а затем результаты каждого повторения сохраняются в массив для обработки.

В настоящее время мой код выглядит примерно так:

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
}

MyВопрос в том, как я могу запустить все эти повторения одновременно и сохранить результаты каждого параллельного запуска в массиве типа allResults?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вы можете попробовать что-то вроде параллельных потоков, чтобы выполнить параллелизм, как одна из следующих строк.

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

Arrays.stream(allResults).parallel().forEach(i -> processData(i));
0 голосов
/ 25 февраля 2019

Java по умолчанию является синхронным языком, и для параллельной работы вам нужно изучить потоки.Я предлагаю изучить асинхронные вызовы функций и способы сделать это в Java.

Вот предыдущий вопрос, заданный по этому вопросу: Как асинхронно вызывать метод в Java

При асинхронном вызове вы можете запустить симуляцию на любом количестве потоковвы хотите и собираете данные по окончании симуляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...