Асинхронные функции

MATLAB® или код запусков синхронно или асинхронно. Можно использовать следующие функции, чтобы запустить код асинхронно:

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

tic
A = rand(10000);
B = ones(10000);
C = max(A,B);
toc
Elapsed time is 0.992156 seconds.

Когда вы запускаете код, MATLAB выполняет три вычисления.

  1. Вычислите A = rand(10000) на переднем плане.

  2. Вычислите B = ones(10000) на переднем плане.

  3. После создания A и B, вычислите C = max(A,B) на переднем плане.

Асинхронный код

Когда вы запускаете функцию асинхронно, MATLAB может запустить другой код на переднем плане одновременно.

Использование parfeval или parfevalOnAll запускать функции асинхронно. Использование afterEach и afterAll чтобы запустить функции асинхронно после, предыдущая функция завершается.

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

    • Использование parfeval и backgroundPool запускать код в фоновом режиме.

    • Если у вас есть использование Parallel Computing Toolbox™ parpool (Parallel Computing Toolbox), чтобы запустить код по параллельному пулу.

    • Если у вас есть Parallel Computing Toolbox, можно использовать parfeval (Parallel Computing Toolbox) и другие функции, чтобы автоматически запустить код по параллельному пулу. Для получения дополнительной информации смотрите функции MATLAB Запуска с Автоматической Параллельной Поддержкой (Parallel Computing Toolbox).

  • Можно запустить другой код, в то время как функция запускается в фоновом режиме.

  • Использование fetchOutputs выбирать результаты Future объект.

Синхронные функцииАсинхронные функции
MATLAB ожидает функции, чтобы завершиться.MATLAB не ожидает функции, чтобы завершиться.
MATLAB сразу запускает код.MATLAB запускает код, когда рабочий доступен. Для получения дополнительной информации смотрите Второстепенных Рабочих.
Выходные параметры от функции доступны в текущей рабочей области.Чтобы скопировать выходные параметры в текущую рабочую область, использовать fetchOutputs. Когда вы используете fetchOutputs, MATLAB ожидает функции, чтобы завершиться.
Можно использовать любую функцию или объект в синхронной функции.

Можно использовать большинство функций и объектов в асинхронной функции.

Текущая рабочая область также доступна в синхронной функции.Большинство переменных в текущей рабочей области также доступно в асинхронной функции.

Вычислите максимум двух случайных матриц: один созданный в фоновом режиме и один созданный на переднем плане. Матричный A создается в фоновом режиме, и матричный B вычисляется на переднем плане одновременно.

Примечание

Обычно вы не должны использовать wait. fetchOutputs будет неявно ожидать MATLAB, чтобы закончить запускать функцию в фоновом режиме прежде, чем собрать результаты. Функция wait используется здесь, чтобы явным образом показать ожидание результатов прежде, чем собрать их.

tic
fA = parfeval(backgroundPool,@rand,1,10000);
B = ones(10000);
wait(fA)
C = max(fetchOutputs(fA),B);
toc
Elapsed time is 0.534475 seconds.

Когда вы запускаете код, MATLAB выполняет три вычисления.

  1. Вычислите A = rand(10000) в фоновом режиме.

    1. Использование parfeval запланировать функциональный rand запускаться в фоновом режиме, с 1 выведите и один вход 10000. Возвратите будущий fA на переднем плане.

    2. Запустите функциональный rand в фоновом режиме.

  2. Вычислите B = ones(10000) на переднем плане.

  3. После создания A и B, вычислите C = max(A,B) на переднем плане.

    1. Использование wait явным образом ожидать будущего fA закончить запускаться в фоновом режиме.

    2. Использование fetchOutputs получить rand(10000) от будущего fA.

    3. Вычислите конечный результат C из матриц fetchOutputs(fA) и B.

Второстепенные рабочие

Когда вы используете parfeval или parfevalOnAll чтобы запустить функцию асинхронно, MATLAB запускает функцию на пуле.

Когда вы используете backgroundPool чтобы запустить код в фоновом режиме, MATLAB использует фоновый пул, чтобы запустить тот код.

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

Используйте NumWorkers свойство BackgroundPool узнать, сколько рабочих вы имеете.

  • Если у вас нет Parallel Computing Toolbox, фоновый пул имеет 1 рабочий.

  • Если у вас есть Parallel Computing Toolbox, фоновый пул имеет несколько рабочих. Количество рабочих в фоновом режиме объединяет, min(8,N) где N количество физических ядер на вашей машине. Например, если ваша машина имеет 4 ядра, фоновый пул имеет 4 рабочие. Если ваша машина имеет 16 ядер, фоновый пул имеет 8 рабочие.