MATLAB® или код запусков синхронно или асинхронно. Можно использовать следующие функции, чтобы запустить код асинхронно:
Вычислите максимум двух случайных матриц. MATLAB запускает каждую линию последовательно.
tic A = rand(10000); B = ones(10000); C = max(A,B); toc
Elapsed time is 0.992156 seconds.
Когда вы запускаете код, MATLAB выполняет три вычисления.
Вычислите A = rand(10000)
на переднем плане.
Вычислите B = ones(10000)
на переднем плане.
После создания 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 выполняет три вычисления.
Вычислите A = rand(10000)
в фоновом режиме.
Использование parfeval
запланировать функциональный rand
запускаться в фоновом режиме, с 1
выведите и один вход 10000
. Возвратите будущий fA
на переднем плане.
Запустите функциональный rand
в фоновом режиме.
Вычислите B = ones(10000)
на переднем плане.
После создания A
и B
, вычислите C = max(A,B)
на переднем плане.
Использование wait
явным образом ожидать будущего fA
закончить запускаться в фоновом режиме.
Использование fetchOutputs
получить rand(10000)
от будущего fA
.
Вычислите конечный результат 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
рабочие.