Создание пула задач / заданий с ограниченным количеством работников (ThreadPool) с использованием параллельного инструментария - PullRequest
3 голосов
/ 28 января 2012

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

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

Единственный способ настроить это сейчас, у меня есть массив ячеек строк, на котором я использую str2fun, есть ли лучший способ сделать это?

Вопросы приветствуются.

Ответы [ 2 ]

5 голосов
/ 28 января 2012

Нет необходимости писать такой код самостоятельно. Параллельный инструментарий Matlab позволяет создавать планировщик с несколькими заданиями . Вы можете позвонить createJob несколько раз, и планировщик выполнит вытягивание.

 foos = [@foo1,@foo2,@foo3,@foo4]
 for i=1:numel(foos)
     obj = createJob();
     createTask(obj, foos(i), 1, {'your input'});
     submit(obj);
 end

enter image description here

0 голосов
/ 28 января 2012

Почему бы не сделать что-то попроще, например:

matlabpool 3

parfor t=1:3
  if t==1
    a1=f1();
  end
  if t==2
    a2=f2();
  end
  if t==3
    a3=f3();
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...