Параллельное программирование в системе Mathematica

Я заинтересован в запуске той же функции, которая выполняет несколько вычислений по методу Монте-Карло с разными значениями аргументов в нескольких ядрах в параллельном режиме. Я также хочу убедиться, что вся функция работает в одном ядре, без распределения вычислений внутри функции между ядрами. Например, предположим, что у меня есть функция (намеренно упрощенная)

f[a_, b_] := Module[{}, RandomReal[{a, b}]]


In[1]:= LaunchKernels[]

Out[1]= {KernelObject[1, "local"], KernelObject[2, "local"], 
 KernelObject[3, "local"], KernelObject[4, "local"], 
 KernelObject[5, "local"], KernelObject[6, "local"], 
 KernelObject[7, "local"]}

SeedRandom[795132, Method -> "ParallelGenerator"];

m1 = 1; m2 = 2; m3 = 3; m4 = 4; m5 = 5; m6 = 6; m7 = 7; m8 = 8;

DistributeDefinitions[f, m1, m2, m3, m4, m5, m6, m7, m8];

. Теперь я хочу запустить f [m1, m2], f [m3, m4], f [m5, m6], f [m7, m8] f [m9 , m10] на пяти разных ядрах без передачи информации между этими ядрами, т. е. с отдельным потоком случайных чисел в разных ядрах.

Как это можно сделать в Mathematica?

8
задан asim 29 November 2011 в 21:06
поделиться