Я вычисляю симуляции Монте-Карло с помощью GNU Octave 4.0.0 на моем 4-ядерном ПК. Симуляция занимает почти 4 часа, чтобы вычислить скрипт 50 000 раз (специфически для моей проблемы), что является большим временем, потраченным на вычисления. Мне было интересно, есть ли способ запустить Octave на нескольких ядрах одновременно, чтобы сократить время вычислений.
Заранее спасибо.
решение1
GNU Parallel не поддерживает многопоточность, но онволявыполните многопроцессорную обработку, что может быть для вас достаточным:
seq 50000 | parallel my_MC_sim --iteration {}
По умолчанию будет использоваться один процесс на ядро ЦП, что гарантирует, что выходные данные двух параллельных заданий не будут смешиваться.
Вы даже можете поместить эту параллелизацию в скрипт Octave. Смотритеhttps://www.gnu.org/software/parallel/parallel_tutorial.html#Shebang
GNU Parallel — это общий распараллеливатель, который позволяет легко запускать задания параллельно на одной машине или на нескольких машинах, к которым у вас есть доступ по ssh. Часто он может заменить цикл for
.
Если у вас есть 32 различных задания, которые вы хотите запустить на 4 ЦП, то прямой способ распараллеливания — запустить 8 заданий на каждом ЦП:
Вместо этого GNU Parallel запускает новый процесс после завершения предыдущего, сохраняя при этом активными ЦП и, таким образом, экономя время:
Монтаж
Если GNU Parallel не упакован для вашего дистрибутива, вы можете выполнить персональную установку, которая не требует доступа root. Это можно сделать за 10 секунд, выполнив следующее:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Другие варианты установки см.http://git.savannah.gnu.org/cgit/parallel.git/tree/README
Узнать больше
Смотрите больше примеров:http://www.gnu.org/software/parallel/man.html
Посмотрите вступительные видеоролики:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Пройдите обучение:http://www.gnu.org/software/parallel/parallel_tutorial.html
Подпишитесь на рассылку, чтобы получить поддержку:https://lists.gnu.org/mailman/listinfo/parallel