Я хотел бы генерировать 1 миллиард случайных точек из распределения вероятности и оценивать функции, используя эти точки, для вычисления интеграла Монте-Карло. Проблема в том, что я использую MATLAB и мало знаю других языков программирования. MATLAB, конечно, очень медленный, и я обсудил возможность параллелизации интеграции путем вычисления значений для 100 миллионов точек в 10 различных процессах. Это возможный подход? Если да, то каков наилучший способ его реализации?Параллелизация интеграции Монте-Карло
в настоящее время подход заключается в следующем:
Для I: N
Генерировать случайное число из распределения
Вычислить функцию Добавить оценку функции к временной переменной
конца
Divide временную переменную с помощью N и, следовательно, интеграл был аппроксимирован.
Функция оценивается следующим образом:
0, если генерируется точка меньше, чем число B
разность между точкой и В, если генерируется точка больше или равна B.
Использование Вместо этого будет использоваться подход Арпи, в котором будет использоваться парр-петля.
«Matlab, конечно, очень медленный», хорошо это во многом зависит от пользователя;). Во всяком случае, параллелизация, безусловно, возможна, посмотрите ['parfor'] (http://www.mathworks.com/help/distcomp/parfor.html?refresh=true). Кроме того, я бы пересмотрел ваш подход к вычислению интеграла, существует множество методов снижения вычислительной нагрузки, например. важная выборка. Но «лучший» подход зависит от проблем. – Arpi
Это правда, и со мной, как с пользователем, это определенно медленно;) Спасибо за помощь как в парре, так и в пересмотре моего подхода @Arpi! – rickri
Возможно, вы захотите предоставить описание/уравнения/psuedocode/diagram ваших функций. Существует много подходов к анализу алгоритма, поиск правильного зависит от характера алгоритма. например, если ваша функция просто выполняет базовую арифметику, то узким местом является, вероятно, доступ к памяти, а не процессорное время, что означает, что в использовании нескольких ядер/гиперпотоков мало/нет смысла. –